mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 14:47:26 +00:00 
			
		
		
		
	* massage vesting account json to match cosmos-sdk/Account json for trust wallet * remove comment
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package v18de63
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"github.com/tendermint/tendermint/crypto"
 | 
						|
 | 
						|
	"github.com/cosmos/cosmos-sdk/codec"
 | 
						|
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
						|
)
 | 
						|
 | 
						|
// BaseVestingAccount implements the VestingAccount interface. It contains all
 | 
						|
// the necessary fields needed for any vesting account implementation.
 | 
						|
type BaseVestingAccount struct {
 | 
						|
	*BaseAccount
 | 
						|
 | 
						|
	OriginalVesting  sdk.Coins `json:"original_vesting" yaml:"original_vesting"`   // coins in account upon initialization
 | 
						|
	DelegatedFree    sdk.Coins `json:"delegated_free" yaml:"delegated_free"`       // coins that are vested and delegated
 | 
						|
	DelegatedVesting sdk.Coins `json:"delegated_vesting" yaml:"delegated_vesting"` // coins that vesting and delegated
 | 
						|
	EndTime          int64     `json:"end_time" yaml:"end_time"`                   // when the coins become unlocked
 | 
						|
}
 | 
						|
 | 
						|
// ContinuousVestingAccount implements the VestingAccount interface. It
 | 
						|
// continuously vests by unlocking coins linearly with respect to time.
 | 
						|
type ContinuousVestingAccount struct {
 | 
						|
	*BaseVestingAccount
 | 
						|
 | 
						|
	StartTime int64 `json:"start_time" yaml:"start_time"` // when the coins start to vest
 | 
						|
}
 | 
						|
 | 
						|
// PeriodicVestingAccount implements the VestingAccount interface. It
 | 
						|
// periodically vests by unlocking coins during each specified period
 | 
						|
type PeriodicVestingAccount struct {
 | 
						|
	*BaseVestingAccount
 | 
						|
	StartTime      int64   `json:"start_time" yaml:"start_time"`           // when the coins start to vest
 | 
						|
	VestingPeriods Periods `json:"vesting_periods" yaml:"vesting_periods"` // the vesting schedule
 | 
						|
}
 | 
						|
 | 
						|
type prettyPublicKey struct {
 | 
						|
	PubKey crypto.PubKey
 | 
						|
}
 | 
						|
 | 
						|
func (p prettyPublicKey) MarshalJSON() ([]byte, error) {
 | 
						|
	cdc := codec.New()
 | 
						|
	codec.RegisterCrypto(cdc)
 | 
						|
	return cdc.MarshalJSON(p.PubKey)
 | 
						|
}
 | 
						|
 | 
						|
type vestingAccountPretty struct {
 | 
						|
	Address          sdk.AccAddress  `json:"address" yaml:"address"`
 | 
						|
	Coins            sdk.Coins       `json:"coins" yaml:"coins"`
 | 
						|
	PubKey           prettyPublicKey `json:"public_key" yaml:"public_key"`
 | 
						|
	AccountNumber    string          `json:"account_number" yaml:"account_number"`
 | 
						|
	Sequence         string          `json:"sequence" yaml:"sequence"`
 | 
						|
	OriginalVesting  sdk.Coins       `json:"original_vesting" yaml:"original_vesting"`
 | 
						|
	DelegatedFree    sdk.Coins       `json:"delegated_free" yaml:"delegated_free"`
 | 
						|
	DelegatedVesting sdk.Coins       `json:"delegated_vesting" yaml:"delegated_vesting"`
 | 
						|
	EndTime          int64           `json:"end_time" yaml:"end_time"`
 | 
						|
 | 
						|
	// custom fields based on concrete vesting type which can be omitted
 | 
						|
	StartTime      int64   `json:"start_time,omitempty" yaml:"start_time,omitempty"`
 | 
						|
	VestingPeriods Periods `json:"vesting_periods,omitempty" yaml:"vesting_periods,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
func (pva PeriodicVestingAccount) MarshalJSON() ([]byte, error) {
 | 
						|
	pubKey := prettyPublicKey{PubKey: pva.PubKey}
 | 
						|
 | 
						|
	alias := vestingAccountPretty{
 | 
						|
		Address:          pva.Address,
 | 
						|
		Coins:            pva.Coins,
 | 
						|
		PubKey:           pubKey,
 | 
						|
		AccountNumber:    strconv.FormatUint(pva.AccountNumber, 10),
 | 
						|
		Sequence:         strconv.FormatUint(pva.Sequence, 10),
 | 
						|
		OriginalVesting:  pva.OriginalVesting,
 | 
						|
		DelegatedFree:    pva.DelegatedFree,
 | 
						|
		DelegatedVesting: pva.DelegatedVesting,
 | 
						|
		EndTime:          pva.EndTime,
 | 
						|
		StartTime:        pva.StartTime,
 | 
						|
		VestingPeriods:   pva.VestingPeriods,
 | 
						|
	}
 | 
						|
 | 
						|
	return json.Marshal(alias)
 | 
						|
}
 | 
						|
 | 
						|
// DelayedVestingAccount implements the VestingAccount interface. It vests all
 | 
						|
// coins after a specific time, but non prior. In other words, it keeps them
 | 
						|
// locked until a specified time.
 | 
						|
type DelayedVestingAccount struct {
 | 
						|
	*BaseVestingAccount
 | 
						|
}
 |