Go SDK#

github: https://github.com/okx/exchain-go-sdk


1 utils function#

All utils functions are defined in the package utils under path exchain-go-sdk/utils. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk/utils"

_, _, _ = utils.CreateAccountWithMnemo(defaultMnemo, "turing", defaultPassWd)

1.1 Account function#

1.1.1 Create a random key info with the given name and password#

func CreateAccount(name, passWd string) (info keys.Info, mnemo string, err error)

Enter parameters:

NameTypeMark
namestringaccount name
passWdstringaccount password

Printed results:

// Info interface
type Info interface {
	// Human-readable type for key listing
	GetType() KeyType
	// Name of the key
	GetName() string
	// Public key
	GetPubKey() crypto.PubKey
	// Address
	GetAddress() types.AccAddress
	// Bip44 Path
	GetPath() (*hd.BIP44Params, error)
	// Algo
	GetAlgo() SigningAlgo
}

// Mnemonic
string

1.1.2 Create the key info with the given mnemonic, name and password#

func CreateAccountWithMnemo(mnemonic, name, passWd string) (info keys.Info, mnemo string, err error)

Enter parameters:

NameTypeMark
namestringaccount name
passWdstringaccount password
mnemonicstringaccount mnemonic

Printed results:

// Info interface
type Info interface {
	// Human-readable type for key listing
	GetType() KeyType
	// Name of the key
	GetName() string
	// Public key
	GetPubKey() crypto.PubKey
	// Address
	GetAddress() types.AccAddress
	// Bip44 Path
	GetPath() (*hd.BIP44Params, error)
	// Algo
	GetAlgo() SigningAlgo
}

// Mnemonic
string

1.1.3 Create the key info with the given private-key string, name and password#

func CreateAccountWithPrivateKey(privateKey, name, passWd string) (info keys.Info, err error)

Enter parameters:

NameTypeMark
namestringaccount name
passWdstringaccount password
privateKeystringaccount private-key

Printed results:

// Info interface
type Info interface {
	// Human-readable type for key listing
	GetType() KeyType
	// Name of the key
	GetName() string
	// Public key
	GetPubKey() crypto.PubKey
	// Address
	GetAddress() types.AccAddress
	// Bip44 Path
	GetPath() (*hd.BIP44Params, error)
	// Algo
	GetAlgo() SigningAlgo
}

1.1.4 Create a random mnemonic#

func GenerateMnemonic() (mnemo string, err error)

Printed results:

// Mnemonic
string

1.1.5 Generate private key from mnemonic#

func GeneratePrivateKeyFromMnemo(mnemonic string) (privKey string, err error)

Enter parameters:

NameTypeMark
mnemonicstringaccount mnemonic

Printed results:

// Private Key
string

1.2 Token utils function#

1.2.1 Parse the whole multi-send info string into TransferUnit#

func ParseTransfersStr(str string) ([]types.TransferUnit, error) 

Enter parameters:

NameTypeMark
strstringtransfer unit info in string, e.g. "addr1 1okt\naddr2 2okt"

Printed results:

// TransferUnit slice 
type TransferUnit struct {
    To    sdk.AccAddress
    Coins sdk.SysCoins
}

1.3 Order utils function#

1.3.1 Filter the order IDs from the new order's tx response#

func GetOrderIDsFromResponse(txResp *sdk.TxResponse) (orderIDs []string, err error) 

Enter parameters:

NameTypeMark
txResp*sdk.TxResponsethe pointer of the new order's tx response

Printed results:

// orderID slice
[]string

2 Auth module#

All auth functions are defined in the package auth under path exchain-go-sdk/module/auth. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Auth().QueryAccount(accAddrStr)

2.1 Query#

2.1.1 Get the account info#

func (ac authClient) QueryAccount(accAddrStr string) (account types.Account, err error) 

Enter parameters:

NameTypeMark
accAddrStrstringaccount address in bech32

Printed results:

// Account interface
type Account interface {
    GetAddress() sdk.AccAddress
    SetAddress(sdk.AccAddress) error

    GetPubKey() crypto.PubKey
    SetPubKey(crypto.PubKey) error

    GetAccountNumber() uint64
    SetAccountNumber(uint64) error

    GetSequence() uint64
    SetSequence(uint64) error

    GetCoins() sdk.Coins
    SetCoins(sdk.Coins) error

    SpendableCoins(blockTime time.Time) sdk.Coins
    
    String() string
}

3 Token module#

All token functions are defined in the package token under path exchain-go-sdk/module/token. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Token().Issue(info, defaultPassWd, "usdk", "usdk", "1000000000", "stable coins", memo, true, accountNumber, sequence)

3.1 Query#

3.1.1 Get token info with a specific symbol, or the owner address#

func (tc tokenClient) QueryTokenInfo(ownerAddr, symbol string) (tokens []types.TokenResp, err error)

Enter parameters:

NameTypeMark
ownerAddrstringowner address in bech32
symbolstringsymbol of token

Printed results:

// TokenResp slice
type TokenResp struct {
    Description         string
    Symbol              string
    OriginalSymbol      string
    WholeName           string
    OriginalTotalSupply sdk.Dec
    Type                int
    Owner               sdk.AccAddress
    Mintable            bool
    TotalSupply         sdk.Dec
}

3.2 Transaction#

3.2.1 Transfer coins to other receiver#

func (tc tokenClient) Send(fromInfo keys.Info, passWd, toAddrStr, coinsStr, memo string, accNum, seqNum uint64)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
toAddrStrstringreceiver's account address in bech32
coinsStrstringtransfer amount, e.g. "1024.1024okt"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

3.2.2 Multi-send coins to several receivers#

func (tc tokenClient) MultiSend(fromInfo keys.Info, passWd string, transfers []types.TransferUnit, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
transfers[]types.TransferUnitset of data struct containing the receivers and transfer amount. A build function is shown on 1.2.1

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

3.2.3 Issue a kind of token#

func (tc tokenClient) Issue(fromInfo keys.Info, passWd, orgSymbol, wholeName, totalSupply, tokenDesc, memo string, mintable bool, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
orgSymbolstringsymbol of the new token
wholeNamestringwhole name of the new token
totalSupplystringtotal supply of the new token
tokenDescstringdescription of the token
mintableboolwhether the token can be minted

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

3.2.4 Increase the total supply of a kind of token by its owner#

func (tc tokenClient) Mint(fromInfo keys.Info, passWd, coinsStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
coinsStrstringamount to mint, e.g. "1024.1024okt"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

3.2.5 Decrease the total supply of a kind of token by burning a specific amount of that from the owner#

func (tc tokenClient) Burn(fromInfo keys.Info, passWd, coinsStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
coinsStrstringamount to burn, e.g. "1024.1024okt"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

3.2.6 Modify the info of a specific token by its owner#

func (tc tokenClient) Edit(fromInfo keys.Info, passWd, symbol, description, wholeName, memo string, isDescEdit, isWholeNameEdit bool, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
symbolstringsymbol of the token to modify
descriptionstringnew description to change
wholeNamestringnew whole name to change
isDescEditboolwhether to modify the token description by this transaction
isWholeNameEditboolwhether to modify the token whole name by this transaction

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4 Staking module#

All staking functions are defined in the package staking under path exchain-go-sdk/module/staking. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Staking().Deposit(info, defaultPassWd, depositAmount, memo, accountNumber, sequence)

4.1 Query#

4.1.1 Get all the validators info#

func (sc stakingClient) QueryValidators() (vals []types.Validator, err error) 

Printed results:

// Validator slice
type Validator struct {
    OperatorAddress         sdk.ValAddress
    ConsPubKey              crypto.PubKey
    Jailed                  bool
    Status                  sdk.BondStatus
    Tokens                  sdk.Int
    DelegatorShares         sdk.Dec
    Description             Description
    UnbondingHeight         int64
    UnbondingCompletionTime time.Time
    Commission              Commission
    MinSelfDelegation       sdk.Dec
}

4.1.2 Get the info of a specific validator#

func (sc stakingClient) QueryValidator(valAddrStr string) (val types.Validator, err error)

Enter parameters:

NameTypeMark
valAddrStrstringvalidator address in bech32

Printed results:

// Validator
type Validator struct {
    OperatorAddress         sdk.ValAddress
    ConsPubKey              crypto.PubKey
    Jailed                  bool
    Status                  sdk.BondStatus
    Tokens                  sdk.Int
    DelegatorShares         sdk.Dec
    Description             Description
    UnbondingHeight         int64
    UnbondingCompletionTime time.Time
    Commission              Commission
    MinSelfDelegation       sdk.Dec
}

4.1.3 Get the detail info of a delegator#

func (sc stakingClient) QueryDelegator(delAddrStr string) (delResp types.DelegatorResponse, err error) 

Enter parameters:

NameTypeMark
delAddrStrstringdelegator address in bech32

Printed results:

// DelegatorResponse
type DelegatorResponse struct {
    DelegatorAddress     sdk.AccAddress
    ValidatorAddresses   []sdk.ValAddress
    Shares               sdk.Dec
    Tokens               sdk.Dec
    UnbondedTokens       sdk.Dec
    CompletionTime       time.Time
    IsProxy              bool
    TotalDelegatedTokens sdk.Dec
    ProxyAddress         sdk.AccAddress
}

4.2 Transaction#

4.2.1 Create a new validator#

func (sc stakingClient) CreateValidator(fromInfo keys.Info, passWd, pubkeyStr, moniker, identity, website, details, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
pubkeyStrstringbech32 encoded pubkey of the validator
monikerstringvalidator's name
identitystringvalidator's identity
websitestringvalidator's website
detailsstringvalidator's details

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.2 Edit the description on a validator by the owner#

func (sc stakingClient) EditValidator(fromInfo keys.Info, passWd, moniker, identity, website, details, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
monikerstringvalidator's new name to change
identitystringvalidator's new identity to change
websitestringvalidator's new website to change
detailsstringvalidator's new details to change

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.3 Deregister the validator and withdraw the min-self-delegation#

func (sc stakingClient) DestroyValidator(fromInfo keys.Info, passWd string, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.4 Deposit an amount of okt to delegator account#

func (sc stakingClient) Deposit(fromInfo keys.Info, passWd, coinsStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
coinsStrstringamount to deposit, e.g. "1024.1024okt"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.5 Withdraw an amount of okt and the corresponding shares from all validators#

func (sc stakingClient) Withdraw(fromInfo keys.Info, passWd, coinsStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
coinsStrstringamount to withdraw, e.g. "1024.1024okt"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.6 Add shares to some specific validators#

func (sc stakingClient) AddShares(fromInfo keys.Info, passWd string, valAddrsStr []string, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
valAddrsStr[]stringset of target validators' addresses in bech32

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.7 Register the identity of proxy#

func (sc stakingClient) RegisterProxy(fromInfo keys.Info, passWd, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.8 Deregister the identity of proxy#

func (sc stakingClient) UnregisterProxy(fromInfo keys.Info, passWd, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.9 Bind the staking tokens to a proxy#

func (sc stakingClient) BindProxy(fromInfo keys.Info, passWd, proxyAddrStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
proxyAddrStrstringproxy's address in bech32

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

4.2.10 Unbind the staking tokens from a proxy#

func (sc stakingClient) UnbindProxy(fromInfo keys.Info, passWd, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

5 Distribution module#

All distribution functions are defined in the package distribution under path exchain-go-sdk/module/distribution. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Distribution().WithdrawRewards(info, defaultPassWd, valAddrStr, memo, accountNumber, sequence)

5.1 Transaction#

5.1.1 Change the withdraw address of validator to receive rewards#

func (dc distrClient) SetWithdrawAddr(fromInfo keys.Info, passWd, withdrawAddrStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
withdrawAddrStrstringaccount address in bech32 to receive the rewards of validator

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

5.1.2 Withdraw the rewards of validator by the owner#

func (dc distrClient) WithdrawRewards(fromInfo keys.Info, passWd, valAddrStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
valAddrStrstringtarget validator's address in bech32

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

6 Slashing module#

All slashing functions are defined in the package slashing under path exchain-go-sdk/module/slashing. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Slashing().Unjail(info, defaultPassWd, memo, accountNumber, sequence)

6.1 Transaction#

6.1.1 Unjail the own validator which was jailed by slashing#

func (sc slashingClient) Unjail(fromInfo keys.Info, passWd, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7 Dex module#

All dex functions are defined in the package dex under path exchain-go-sdk/module/dex. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Dex().RegisterDexOperator(info, defaultPassWd, "", website, memo, accountNumber, sequence)

7.1 Query#

7.1.1 Get token pair info#

func (dc dexClient) QueryProducts(ownerAddr string, page, perPage int) (tokenPairs []types.TokenPair, err error)

Enter parameters:

NameTypeMark
ownerAddrstringowner account address in bech32 of a token pair. If it's set empty, all token pairs' info will be returned
pageintpage number
perPageintitems number per page

Printed results:

// TokenPair slice
type TokenPair struct {
    BaseAssetSymbol  string
    QuoteAssetSymbol string
    InitPrice        sdk.Dec
    MaxPriceDigit    int64
    MaxQuantityDigit int64
    MinQuantity      sdk.Dec
    ID               uint64
    Delisting        bool
    Owner            sdk.AccAddress
    Deposits         sdk.SysCoin
    BlockHeight      int64
}

7.2 Transaction#

7.2.1 Register a dex operator#

func (dc dexClient) RegisterDexOperator(fromInfo keys.Info, passWd, handleFeeAddrStr, website, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
handleFeeAddrStrstringaccount address in bech32 to receive fees of tokenpair's matched order
websitestringa valid http link to describe DEXOperator which ends with "operator.json" defined in KIP-{xxx},and its length should be less than 1024

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7.2.2 Edit the dex operator#

func (dc dexClient) EditDexOperator(fromInfo keys.Info, passWd, handleFeeAddrStr, website, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
handleFeeAddrStrstringnew account address in bech32 to receive fees of tokenpair's matched order to change
websitestringa new valid http link to describe DEXOperator which ends with "operator.json" defined in KIP-{xxx} to change

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7.2.3 List a trading pair on dex#

func (dc dexClient) List(fromInfo keys.Info, passWd, baseAsset, quoteAsset, initPriceStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
baseAssetstringtoken symbol as base asset
quoteAssetstringtoken symbol as quote asset
initPriceStrstringinitial price of the trading pair on dex

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7.2.4 Deposit okt to a specific product#

func (dc dexClient) Deposit(fromInfo keys.Info, passWd, product, amountStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
productstringthe name of target token pair
amountStrstringamount of okt to deposit to the product

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7.2.5 Withdraw okt from a specific product#

func (dc dexClient) Withdraw(fromInfo keys.Info, passWd, product, amountStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
productstringthe name of target token pair
amountStrstringamount of okt to withdraw from the product

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7.2.6 Change the owner of a product#

func (dc dexClient) TransferOwnership(fromInfo keys.Info, passWd, product, toAddrStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
productstringthe name of target token pair
toAddrStrstringaccount address in bech32 to transfer the ownership to

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

7.2.7 Confirm the transfer-ownership of a product#

func (dc dexClient) ConfirmOwnership(fromInfo keys.Info, passWd, product, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
productstringthe name of target token pair to confirm

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

8 Order module#

All order functions are defined in the package order under path exchain-go-sdk/module/order. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Order().QueryDepthBook(productName)

8.1 Query#

8.1.1 Get the current depth book info of a specific product#

func (oc orderClient) QueryDepthBook(product string) (depthBook types.BookRes, err error)

Enter parameters:

NameTypeMark
productstringthe name of target token pair

Printed results:

// BookRes
type BookRes struct {
    Asks []BookResItem
    Bids []BookResItem
}

// BookResItem - field of BookRes
type BookResItem struct {
    Price    string
    Quantity string
}

8.1.2 Get the detail info of an order by its order ID#

func (oc orderClient) QueryOrderDetail(orderID string) (orderDetail types.OrderDetail, err error)

Enter parameters:

NameTypeMark
orderIDstringtarget order ID

Printed results:

// Order
type Order struct {
    TxHash            string
    OrderID           string
    Sender            sdk.AccAddress
    Product           string
    Side              string
    Price             sdk.Dec
    Quantity          sdk.Dec
    Status            int64
    FilledAvgPrice    sdk.Dec
    RemainQuantity    sdk.Dec
    RemainLocked      sdk.Dec
    Timestamp         int64
    OrderExpireBlocks int64
    FeePerBlock       sdk.SysCoin
    ExtraInfo         string
}

8.2 Transaction#

8.2.1 Place orders with some detail info#

func (oc orderClient) NewOrders(fromInfo keys.Info, passWd, products, sides, prices, quantities, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
productsstringtarget products in order
sidesstringthe sides of each order in order. Side is the choice between "BUY" and "SELL"
pricesstringthe prices in order
quantitiesstringthe quantities in order

for example:

_, _ = cli.Order().NewOrders(info, defaultPassWd, "usdk_okt,eth_okt,btc_okt", "SELL,BUY,SELL", "2,3,4", "1024.1024,50.001,50.001", memo, accAccountNumber, accSequenceNumber)

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

Note: The order IDs will be returned in TxResponse's Log. It's recommended to use order utils function to filter the order IDs out at 1.3.1.

8.2.2 Cancel orders by orderIDs#

func (oc orderClient) CancelOrders(fromInfo keys.Info, passWd, orderIDs, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
orderIDsstringthe set of order IDs to cancel the orders

for example:

_, _ = cli.Order().CancelOrders(info, defaultPassWd, "ID0000002032-1,ID0000002032-2", memo, accAccountNumber, accSequenceNumber)

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

9 Backend module#

All order functions are defined in the package backend under path exchain-go-sdk/module/backend. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Backend().QueryCandles("usdk_okt", 60, 10)

9.1 Query#

9.1.1 Get the candles data of a specific product#

func (bc backendClient) QueryCandles(product string, granularity, size int) (candles [][]string, err error)

Enter parameters:

NameTypeMark
productstringthe name of target token pair
granularityintseconds in unit, [60/180/300/900/1800/3600/7200/14400/21600/43200/86400/604800]
sizeintthe limited number of items, 1000 at most

Printed results:

// candles data
[][]string

9.1.2 Get all tickers' data#

func (bc backendClient) QueryTickers(product string, count ...int) (tickers []types.Ticker, err error) 

Enter parameters:

NameTypeMark
productstringthe name of target token pair
countintticker count (default 10)

Printed results:

// ticker slice
type Ticker struct {
    Symbol           string
    Product          string
    Timestamp        int64
    Open             float64
    Close            float64
    High             float64
    Low              float64
    Price            float64
    Volume           float64
    Change           float64
    ChangePercentage string
}

9.1.3 Get the specific product's record of recent transactions#

func (bc backendClient) QueryRecentTxRecord(product string, start, end, page, perPage int) (record []types.MatchResult, err error) 

Enter parameters:

NameTypeMark
productstringthe name of target token pair
startintfilter txs by start timestamp
endintfilter txs by end timestamp
pageintpage number
perPageintitem's number per page

Printed results:

// MatchResult slice
type MatchResult struct {
    Timestamp   int64
    BlockHeight int64
    Product     string
    Price       float64
    Quantity    float64
}

9.1.4 Get the open orders of a specific account#

func (bc backendClient) QueryOpenOrders(addrStr, product, side string, start, end, page, perPage int) (orders []types.Order,err error)

Enter parameters:

NameTypeMark
addrStrstringtarget account address in bech32
productstringthe name of target token pair
sidestring"BUY" or "SELL"
startintfilter txs by start timestamp
endintfilter txs by end timestamp
pageintpage number
perPageintitem's number per page

Printed results:

// Order slice
type Order struct {
    TxHash         string
    OrderID        string
    Sender         string
    Product        string
    Side           string
    Price          string
    Quantity       string
    Status         int64
    FilledAvgPrice string
    RemainQuantity string
    Timestamp      int64
}

9.1.5 Get the closed orders of a specific account#

func (bc backendClient) QueryClosedOrders(addrStr, product, side string, start, end, page, perPage int) (orders []types.Order,err error)

Enter parameters:

NameTypeMark
addrStrstringtarget account address in bech32
productstringthe name of target token pair
sidestring"BUY" or "SELL"
startintfilter txs by start timestamp
endintfilter txs by end timestamp
pageintpage number
perPageintitem's number per page

Printed results:

// Order slice
type Order struct {
    TxHash         string
    OrderID        string
    Sender         string
    Product        string
    Side           string
    Price          string
    Quantity       string
    Status         int64
    FilledAvgPrice string
    RemainQuantity string
    Timestamp      int64
}

9.1.6 Get the deals info of a specific account#

func (bc backendClient) QueryDeals(addrStr, product, side string, start, end, page, perPage int) (deals []types.Deal, err error)

Enter parameters:

NameTypeMark
addrStrstringtarget account address in bech32
productstringthe name of target token pair
sidestring"BUY" or "SELL"
startintfilter txs by start timestamp
endintfilter txs by end timestamp
pageintpage number
perPageintitem's number per page

Printed results:

// Deal slice
type Deal struct {
    Timestamp   int64
    BlockHeight int64
    OrderID     string
    Sender      string
    Product     string
    Side        string
    Price       float64
    Quantity    float64
    Fee         string
    FeeReceiver string
}

9.1.7 Get the transactions of a specific account#

func (bc backendClient) QueryTransactions(addrStr string, typeCode, start, end, page, perPage int) (transactions []types.Transaction, err error)

Enter parameters:

NameTypeMark
addrStrstringtarget account address in bech32
typeCodestringfilter txs by txType, 1:Transfer 2:NewOrder 3:CancelOrder
sidestring"BUY" or "SELL"
startintfilter txs by start timestamp
endintfilter txs by end timestamp
pageintpage number
perPageintitem's number per page

Printed results:

// Transaction slice
type Transaction struct {
    TxHash    string
    Type      int64
    Address   string
    Symbol    string
    Side      int64
    Quantity  string
    Fee       string
    Timestamp int64
}

10 Ammswap module#

All ammswap functions are defined in the package ammswap under path exchain-go-sdk/module/ammswap. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.AmmSwap().QuerySwapTokenPairs()

10.1 Query#

10.1.1 Get all the swap token pairs#

func (ac ammswapClient) QuerySwapTokenPairs() (exchanges []types.SwapTokenPair, err error)

Printed results:

// SwapTokenPair slice
type SwapTokenPair struct {
    QuotePooledCoin sdk.SysCoin
    BasePooledCoin  sdk.SysCoin
    PoolTokenName   string
}

10.1.2 Get a specific swap token pair#

func (ac ammswapClient) QuerySwapTokenPair(token string) (exchange types.SwapTokenPair, err error)

Enter parameters:

NameTypeMark
tokenstringthe name of target swap token pair

Printed results:

// swap token pair info
type SwapTokenPair struct {
    QuotePooledCoin sdk.SysCoin
    BasePooledCoin  sdk.SysCoin
    PoolTokenName   string
}

10.1.3 Get how much token would get from a swap pool#

func (ac ammswapClient) QueryBuyAmount(tokenToSellStr, tokenDenomToBuy string) (amount sdk.Dec, err error)

Enter parameters:

NameTypeMark
tokenToSellStrstringthe amount of a given token to sell
tokenDenomToBuystringtarget token name to buy

Printed results:

// amount of target token to buy
sdk.Dec

10.2 Transaction#

10.2.1 Create a token pair in swap module#

CreateExchange(fromInfo keys.Info, passWd, baseToken, quoteToken, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
baseTokenstringthe base token name required to create an AMM swap pair
quoteTokenstringthe quote token name required to create an AMM swap pair

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

10.2.2 Add the number of liquidity of a token pair#

func (ac ammswapClient) AddLiquidity(fromInfo keys.Info, passWd, minLiquidity, maxBaseAmount, quoteAmount, deadlineDuration, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
minLiquiditystringminimum number of sender will mint if total pool token supply is greater than 0
maxBaseAmountstringmaximum number of base amount deposited. deposits max amount if total pool token supply is 0
quoteAmountstringthe number of quote amount to add liquidity
deadlineDurationduration after which this transaction can no longer be executed such as "300ms", "1.5h" or "2h45m". valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

10.2.3 Remove the number of liquidity of a token pair#

func (ac ammswapClient) RemoveLiquidity(fromInfo keys.Info, passWd, liquidity, minBaseAmount, minQuoteAmount, deadlineDuration, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
liquiditystringnumber of liquidity to burn
minBaseAmountstringminimum number of base amount withdrawn
minQuoteAmountstringminimum number of quote amount withdrawn
deadlineDurationduration after which this transaction can no longer be executed such as "300ms", "1.5h" or "2h45m". valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

10.2.4 Swap the number of specific token with another type of token#

func (ac ammswapClient) TokenSwap(fromInfo keys.Info, passWd, soldTokenAmount, minBoughtTokenAmount, recipient, deadlineDuration, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
soldTokenAmountstringamount of token expected to sell
minBoughtTokenAmountstringminimum amount of token expected to buy
recipientstringaccount address in bech32 to receive the amount bought
deadlineDurationduration after which this transaction can no longer be executed such as "300ms", "1.5h" or "2h45m". valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h"

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

11 Farm module#

All farm functions are defined in the package farm under path exchain-go-sdk/module/farm. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Farm().QueryPools()

11.1 Query#

11.1.1 Get all farm pools info#

func (fc farmClient) QueryPools() (farmPools []types.FarmPool, err error) 

Printed results:

// FarmPool slice
type FarmPool struct {
    Owner                   sdk.AccAddress
    Name                    string
    MinLockAmount           sdk.SysCoin
    DepositAmount           sdk.SysCoin
    TotalValueLocked        sdk.SysCoin
    YieldedTokenInfos       YieldedTokenInfos
    TotalAccumulatedRewards sdk.SysCoins
}

11.1.2 Get the farm pool info by its pool name#

func (fc farmClient) QueryPool(poolName string) (farmPool types.FarmPool, err error) 

Enter parameters:

NameTypeMark
poolNamestringpool name

Printed results:

// pool info
type FarmPool struct {
    Owner                   sdk.AccAddress
    Name                    string
    MinLockAmount           sdk.SysCoin
    DepositAmount           sdk.SysCoin
    TotalValueLocked        sdk.SysCoin
    YieldedTokenInfos       YieldedTokenInfos
    TotalAccumulatedRewards sdk.SysCoins
}

11.1.3 Get the name of pools that an account has locked coins in#

func (fc farmClient) QueryAccount(accAddrStr string) (poolNames []string, err error) 

Enter parameters:

NameTypeMark
accAddrStrstringtarget account address in bech32

Printed results:

// pool names that the target account has locked coins in
[]string

11.1.4 Get all addresses of accounts that have locked coins in a pool#

func (fc farmClient) QueryAccountsLockedTo(poolName string) (accAddrs []sdk.AccAddress, err error) 

Enter parameters:

NameTypeMark
poolNamestringpool name

Printed results:

// address accounts
[]sdk.AccAddress

11.1.5 Get the locked info of an account in a specific pool#

func (fc farmClient) QueryLockInfo(poolName, accAddrStr string) (lockInfo types.LockInfo, err error) 

Enter parameters:

NameTypeMark
poolNamestringpool name
accAddrStrstringtarget account address in bech32

Printed results:

// locked info
type LockInfo struct {
    Owner            sdk.AccAddress
    PoolName         string
    Amount           sdk.SysCoin
    StartBlockHeight int64
    ReferencePeriod  uint64
}

11.2 Transaction#

11.2.1 Create a farm pool#

func (fc farmClient) CreatePool(fromInfo keys.Info, passWd, poolName, minLockAmountStr, yieldToken, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
poolNamestringpool name
minLockAmountStrstringminimum amount of token to lock in this pool
yieldTokenstringthe symbol of token as yield

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

11.2.2 Destroy a farm pool#

func (fc farmClient) DestroyPool(fromInfo keys.Info, passWd, poolName, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
poolNamestringpool name to destroy

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

11.2.3 Provide a number of yield tokens into a pool#

func (fc farmClient) Provide(fromInfo keys.Info, passWd, poolName, amountStr, yieldPerBlockStr string, startHeightToYield int64, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
poolNamestringpool name
amountStrstringamount of yield token to provide to the target farm pool
yieldPerBlockStrstringamount of yield token to release per block
startHeightToYieldint64the height to start to release yield token

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

11.2.4 Lock a number of tokens for yield farming#

func (fc farmClient) Lock(fromInfo keys.Info, passWd, poolName, amountStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
poolNamestringpool name
amountStrstringamount of token to lock to the target farm pool

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

11.2.5 Unlock a number of tokens from the farm pool and claims the current yield#

func (fc farmClient) Unlock(fromInfo keys.Info, passWd, poolName, amountStr, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
poolNamestringpool name
amountStrstringamount of token to unlock from the target farm pool

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

11.2.6 Claim yield farming rewards#

func (fc farmClient) Claim(fromInfo keys.Info, passWd, poolName, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
poolNamestringpool name

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12 Governance module#

All governance functions are defined in the package governance under path exchain-go-sdk/module/governance. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Governance().SubmitTextProposal(info, defaultPassWd, "text_proposal.json", memo, accAccountNumber, accSequenceNumber)

12.1 Query#

12.1.1 Get all proposals#

func (gc govClient) QueryProposals(depositorAddrStr, voterAddrStr, status string, numLimit uint64) (proposals []types.Proposal, err error)

Enter parameters:

NameTypeMark
depositorAddrStrstringfilter by proposals deposited on by depositor. defaults to all proposals by ""
voterAddrStrstringfilter by proposals voted on by voted. defaults to all proposals by ""
statusstringfilter by proposals' status: DepositPeriod/VotingPeriod/Passed/Rejected. defaults to all proposals by ""
numLimituint64limit to latest [numLimit] proposals. defaults to all proposals by 0

Printed results:

// Proposal slice
type Proposal struct {
    Content          
    ProposalID       uint64
    Status           ProposalStatus
    FinalTallyResult TallyResult
    SubmitTime       time.Time
    DepositEndTime   time.Time
    TotalDeposit     sdk.SysCoins
    VotingStartTime  time.Time
    VotingEndTime    time.Time
}

12.2 Transaction#

12.2.1 Submit the text proposal#

func (gc govClient) SubmitTextProposal(fromInfo keys.Info, passWd, proposalPath, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
proposalPathstringthe path pf proposal file

text proposal file template:

{
  "title": "text proposal",
  "description": "description of text proposal",
  "proposalType": "Text",
  "deposit": "100okt"
}

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12.2.2 Submit the proposal to change the params#

func (gc govClient) SubmitParamsChangeProposal(fromInfo keys.Info, passWd, proposalPath, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
proposalPathstringthe path pf proposal file

text proposal file template:

{
  "title": "Param Change Proposal",
  "description": "param change proposal description",
  "changes": [
    {
      "subspace": "staking",
      "key": "MaxValsToAddShares",
      "value": 5
    }
  ],
  "deposit": [
    {
      "denom": "okt",
      "amount": "100"
    }
  ],
  "height": "16910"
}

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12.2.3 Submit the proposal to delist a token pair from dex#

func (gc govClient) SubmitDelistProposal(fromInfo keys.Info, passWd, proposalPath, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
proposalPathstringthe path pf proposal file

text proposal file template:

{
  "title": "Delist Proposal",
  "description": "delist proposal description",
  "base_asset": "btc",
  "quote_asset": "okt",
  "deposit": [
    {
      "denom": "okt",
      "amount": "100"
    }
  ]
}

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12.2.4 Submit the proposal to spend the tokens from the community pool#

func (gc govClient) SubmitCommunityPoolSpendProposal(fromInfo keys.Info, passWd, proposalPath, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error)

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
proposalPathstringthe path pf proposal file

text proposal file template:

{
  "title": "Community Pool Spend Proposal",
  "description": "community pool spend description",
  "recipient": "ex1hcngft7gfkhn8z8fnlajzh7agyt0az0v6ztmme",
  "amount": [
    {
      "denom": "okt",
      "amount": "10.24"
    }
  ],
  "deposit": [
    {
      "denom": "okt",
      "amount": "100"
    }
  ]
}

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12.2.5 Submit the proposal to manage the white list member#

func (gc govClient) SubmitManageWhiteListProposal(fromInfo keys.Info, passWd, proposalPath, memo string, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
proposalPathstringthe path pf proposal file

text proposal file template:

{
  "title": "Manage White List Proposal",
  "description": "manage white list description",
  "pool_name": "pool1",
  "is_added": true,
  "deposit": [
    {
      "denom": "okt",
      "amount": "100"
    }
  ]
}

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12.2.6 Increase the deposit amount on a specific proposal#

func (gc govClient) Deposit(fromInfo keys.Info, passWd, depositCoinsStr, memo string, proposalID, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
depositCoinsStrstringamount to deposit to the proposal
proposalIDuint64target proposal ID

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

12.2.7 Vote for an active proposal#

func (gc govClient) Vote(fromInfo keys.Info, passWd, voteOption, memo string, proposalID, accNum, seqNum uint64) (resp sdk.TxResponse, err error) 

Enter parameters:

NameTypeMark
fromInfokeys.Infosender's key info
passWdstringsender's password
memostringmemo to note
accNumuint64account number of sender's account on chain
seqNumuint64sequence number of sender's account on chain
voteOptionstringoption to vote: yes/no/no_with_veto/abstain
proposalIDuint64target proposal ID

Printed results:

// Transaction response containing relevant tx data and metadata
type TxResponse struct {
    Height    int64
    TxHash    string
    Codespace string
    Code      uint32
    Data      string
    RawLog    string
    Logs      ABCIMessageLogs
    Info      string
    GasWanted int64
    GasUsed   int64
    Tx        Tx
    Timestamp string
}

13 Tendermint module#

All tendermint functions are defined in the package tendermint under path exchain-go-sdk/module/tendermint. They can be invoked by the way like:

import "github.com/okx/exchain-go-sdk"

config, _ := gosdk.NewClientConfig(rpcURL, chainID, gosdk.BroadcastBlock, "0.02okt", 200000, "")
cli := gosdk.NewClient(config)
_, _ = cli.Tendermint().QueryBlock(1024)

13.1 Query#

13.1.1 Get the block info of a specific height#

func (tc tendermintClient) QueryBlock(height int64) (pBlock *types.Block, err error) 

Enter parameters:

NameTypeMark
heightint64target block height. get the latest block with height 0 input

Printed results:

// block info
type Block struct {
    mtx        sync.Mutex
    Header
    Data
    Evidence   EvidenceData
    LastCommit *Commit
}

13.1.2 Get the abci result of the block on a specific height#

func (tc tendermintClient) QueryBlockResults(height int64) (pBlockResults *types.ResultBlockResults, err error)

Enter parameters:

NameTypeMark
heightint64target block height. get the latest block with height 0 input

Printed results:

// abci result info of block
type ResultBlockResults struct {
    Height                int64
    TxsResults            []*abci.ResponseDeliverTx
    BeginBlockEvents      []abci.Event
    EndBlockEvents        []abci.Event
    ValidatorUpdates      []abci.ValidatorUpdate
    ConsensusParamUpdates *abci.ConsensusParams
}

13.1.3 Get the commit info of the block on a specific height#

func (tc tendermintClient) QueryCommitResult(height int64) (pCommitResult *types.ResultCommit, err error)

Enter parameters:

NameTypeMark
heightint64target block height. get the latest block with height 0 input

Printed results:

// commit info of block
type ResultCommit struct {
    types.SignedHeader
    CanonicalCommit    bool
}

// types.SignedHeader - field in ResultCommit
type SignedHeader struct {
    *Header
    Commit *Commit
}

13.1.4 Get the validators info on a specific height#

func (tc tendermintClient) QueryValidatorsResult(height int64) (pValsResult *types.ResultValidators, err error) 

Enter parameters:

NameTypeMark
heightint64target block height. get the latest block with height 0 input

Printed results:

// validators info
type ResultValidators struct {
    BlockHeight int64
    Validators  []*types.Validator
    Count       int
    Total       int
}

13.1.5 Get the detail info of a tx with its tx hash#

func (tc tendermintClient) QueryTxResult(hashHexStr string, prove bool) (pResultTx *types.ResultTx, err error) 

Enter parameters:

NameTypeMark
hashHexStrstringtx hash in hex string
proveboolwhether to verify proofs for responses

Printed results:

// tx result
type ResultTx struct {
    Hash     bytes.HexBytes
    Height   int64
    Index    uint32
    TxResult abci.ResponseDeliverTx
    Tx       types.Tx
    Proof    types.TxProof
}

13.1.5 Get the detail info of a tx with its tx hash#

func (tc tendermintClient) QueryTxResult(hashHexStr string, prove bool) (pResultTx *types.ResultTx, err error) 

Enter parameters:

NameTypeMark
hashHexStrstringtx hash in hex string
proveboolwhether to verify proofs for responses

Printed results:

// tx result
type ResultTx struct {
    Hash     bytes.HexBytes
    Height   int64
    Index    uint32
    TxResult abci.ResponseDeliverTx
    Tx       types.Tx
    Proof    types.TxProof
}

13.1.6 Get txs result by a group of specific searching string#

func (tc tendermintClient) QueryTxsByEvents(eventsStr string, page, limit int) (pResultTxSearch *types.ResultTxSearch, err error)

Enter parameters:

NameTypeMark
eventsStrstringlist of transaction events in the form of {eventType}.{eventAttribute}={value}
pageinta specific page of paginated results
limitintnumber of transactions results per page returned

Printed results:

// Result of searching for txs
type ResultTxSearch struct {
    Txs        []*ResultTx
    TotalCount int
}

// ResultTx - field in ResultTxSearch
type ResultTx struct {
    Hash     bytes.HexBytes
    Height   int64
    Index    uint32
    TxResult abci.ResponseDeliverTx
    Tx       types.Tx
    Proof    types.TxProof
}