Documentation ¶
Overview ¶
Package client implements NEO-specific JSON-RPC 2.0 client. This package is currently in alpha and is subject to change.
Client ¶
After creating a client instance with or without a ClientConfig you can interact with the NEO blockchain by its exposed methods.
Some of the methods also allow to pass a verbose bool. This will return a more pretty printed response from the server instead of a raw hex string.
TODO:
Add missing methods to client. Allow client to connect using client cert. More in-depth examples.
Supported methods
getapplicationlog getbestblockhash getblock getblockcount getblockhash getblockheader getblocksysfee getconnectioncount getcontractstate getnep17balances getnep17transfers getpeers getrawmempool getrawtransaction getstorage gettransactionheight getunclaimedgas getvalidators getversion invoke invokefunction invokescript sendrawtransaction submitblock validateaddress
Unsupported methods
claimgas dumpprivkey getbalance getmetricblocktimestamp getnewaddress getwalletheight importprivkey listaddress listplugins sendfrom sendmany sendtoaddress
Example ¶
package main import ( "context" "fmt" "os" "github.com/nspcc-dev/neo-go/pkg/encoding/address" "github.com/nspcc-dev/neo-go/pkg/rpc/client" ) func main() { endpoint := "http://seed5.bridgeprotocol.io:10332" opts := client.Options{} c, err := client.New(context.TODO(), endpoint, opts) if err != nil { fmt.Println(err) os.Exit(1) } if err := c.Ping(); err != nil { fmt.Println(err) os.Exit(1) } addr, err := address.StringToUint160("ATySFJAbLW7QHsZGHScLhxq6EyNBxx3eFP") if err != nil { fmt.Println(err) os.Exit(1) } resp, err := c.GetNEP17Balances(addr) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println(resp.Address) fmt.Println(resp.Balances) }
Output:
Index ¶
- type Client
- func (c *Client) AddNetworkFee(tx *transaction.Transaction, extraFee int64, accs ...*wallet.Account) error
- func (c *Client) CalculateValidUntilBlock() (uint32, error)
- func (c *Client) CreateNEP17MultiTransferTx(acc *wallet.Account, gas int64, recipients ...TransferTarget) (*transaction.Transaction, error)
- func (c *Client) CreateNEP17TransferTx(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, ...) (*transaction.Transaction, error)
- func (c *Client) CreateTxFromScript(script []byte, acc *wallet.Account, sysFee, netFee int64, ...) (*transaction.Transaction, error)
- func (c *Client) GetApplicationLog(hash util.Uint256, trig *trigger.Type) (*result.ApplicationLog, error)
- func (c *Client) GetBestBlockHash() (util.Uint256, error)
- func (c *Client) GetBlockByHash(hash util.Uint256) (*block.Block, error)
- func (c *Client) GetBlockByHashVerbose(hash util.Uint256) (*result.Block, error)
- func (c *Client) GetBlockByIndex(index uint32) (*block.Block, error)
- func (c *Client) GetBlockByIndexVerbose(index uint32) (*result.Block, error)
- func (c *Client) GetBlockCount() (uint32, error)
- func (c *Client) GetBlockHash(index uint32) (util.Uint256, error)
- func (c *Client) GetBlockHeader(hash util.Uint256) (*block.Header, error)
- func (c *Client) GetBlockHeaderVerbose(hash util.Uint256) (*result.Header, error)
- func (c *Client) GetBlockSysFee(index uint32) (fixedn.Fixed8, error)
- func (c *Client) GetCommittee() (keys.PublicKeys, error)
- func (c *Client) GetConnectionCount() (int, error)
- func (c *Client) GetContractStateByAddressOrName(addressOrName string) (*state.Contract, error)
- func (c *Client) GetContractStateByHash(hash util.Uint160) (*state.Contract, error)
- func (c *Client) GetContractStateByID(id int32) (*state.Contract, error)
- func (c *Client) GetExecFeeFactor() (int64, error)
- func (c *Client) GetFeePerByte() (int64, error)
- func (c *Client) GetMaxBlockSize() (int64, error)
- func (c *Client) GetMaxTransactionsPerBlock() (int64, error)
- func (c *Client) GetNEP17Balances(address util.Uint160) (*result.NEP17Balances, error)
- func (c *Client) GetNEP17Transfers(address string, start, stop *uint32, limit, page *int) (*result.NEP17Transfers, error)
- func (c *Client) GetNativeContractHash(name string) (util.Uint160, error)
- func (c *Client) GetNetwork() netmode.Magic
- func (c *Client) GetNextBlockValidators() ([]result.Validator, error)
- func (c *Client) GetPeers() (*result.GetPeers, error)
- func (c *Client) GetRawMemPool() ([]util.Uint256, error)
- func (c *Client) GetRawTransaction(hash util.Uint256) (*transaction.Transaction, error)
- func (c *Client) GetRawTransactionVerbose(hash util.Uint256) (*result.TransactionOutputRaw, error)
- func (c *Client) GetStorageByHash(hash util.Uint160, key []byte) ([]byte, error)
- func (c *Client) GetStorageByID(id int32, key []byte) ([]byte, error)
- func (c *Client) GetTransactionHeight(hash util.Uint256) (uint32, error)
- func (c *Client) GetUnclaimedGas(address string) (result.UnclaimedGas, error)
- func (c *Client) GetVersion() (*result.Version, error)
- func (c *Client) Init() error
- func (c *Client) InvokeContractVerify(contract util.Uint160, params []smartcontract.Parameter, ...) (*result.Invoke, error)
- func (c *Client) InvokeFunction(contract util.Uint160, operation string, params []smartcontract.Parameter, ...) (*result.Invoke, error)
- func (c *Client) InvokeScript(script []byte, signers []transaction.Signer) (*result.Invoke, error)
- func (c *Client) IsBlocked(hash util.Uint160) (bool, error)
- func (c *Client) MultiTransferNEP17(acc *wallet.Account, gas int64, recipients ...TransferTarget) (util.Uint256, error)
- func (c *Client) NEP17BalanceOf(tokenHash, acc util.Uint160) (int64, error)
- func (c *Client) NEP17Decimals(tokenHash util.Uint160) (int64, error)
- func (c *Client) NEP17Symbol(tokenHash util.Uint160) (string, error)
- func (c *Client) NEP17TokenInfo(tokenHash util.Uint160) (*wallet.Token, error)
- func (c *Client) NEP17TotalSupply(tokenHash util.Uint160) (int64, error)
- func (c *Client) Ping() error
- func (c *Client) SendRawTransaction(rawTX *transaction.Transaction) (util.Uint256, error)
- func (c *Client) SignAndPushInvocationTx(script []byte, acc *wallet.Account, sysfee int64, netfee fixedn.Fixed8, ...) (util.Uint256, error)
- func (c *Client) StateRootInHeader() bool
- func (c *Client) SubmitBlock(b block.Block) (util.Uint256, error)
- func (c *Client) TransferNEP17(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, ...) (util.Uint256, error)
- func (c *Client) ValidateAddress(address string) error
- type Notification
- type Options
- type TransferTarget
- type WSClient
- func (c *WSClient) Close()
- func (c *WSClient) SubscribeForExecutionNotifications(contract *util.Uint160, name *string) (string, error)
- func (c *WSClient) SubscribeForNewBlocks(primary *int) (string, error)
- func (c *WSClient) SubscribeForNewTransactions(sender *util.Uint160, signer *util.Uint160) (string, error)
- func (c *WSClient) SubscribeForTransactionExecutions(state *string) (string, error)
- func (c *WSClient) Unsubscribe(id string) error
- func (c *WSClient) UnsubscribeAll() error
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client represents the middleman for executing JSON RPC calls to remote NEO RPC nodes.
func New ¶
New returns a new Client ready to use. You should call Init method to initialize network magic the client is operating on.
func (*Client) AddNetworkFee ¶ added in v0.90.0
func (c *Client) AddNetworkFee(tx *transaction.Transaction, extraFee int64, accs ...*wallet.Account) error
AddNetworkFee adds network fee for each witness script and optional extra network fee to transaction. `accs` is an array signer's accounts.
func (*Client) CalculateValidUntilBlock ¶ added in v0.90.0
CalculateValidUntilBlock calculates ValidUntilBlock field for tx as current blockchain height + number of validators. Number of validators is the length of blockchain validators list got from GetNextBlockValidators() method. Validators count is being cached and updated every 100 blocks.
func (*Client) CreateNEP17MultiTransferTx ¶ added in v0.92.0
func (c *Client) CreateNEP17MultiTransferTx(acc *wallet.Account, gas int64, recipients ...TransferTarget) (*transaction.Transaction, error)
CreateNEP17MultiTransferTx creates an invocation transaction for performing NEP17 transfers from a single sender to multiple recipients.
func (*Client) CreateNEP17TransferTx ¶ added in v0.92.0
func (c *Client) CreateNEP17TransferTx(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, gas int64) (*transaction.Transaction, error)
CreateNEP17TransferTx creates an invocation transaction for the 'transfer' method of a given contract (token) to move specified amount of NEP17 assets (in FixedN format using contract's number of decimals) to given account and returns it. The returned transaction is not signed.
func (*Client) CreateTxFromScript ¶ added in v0.91.0
func (c *Client) CreateTxFromScript(script []byte, acc *wallet.Account, sysFee, netFee int64, cosigners ...transaction.Signer) (*transaction.Transaction, error)
CreateTxFromScript creates transaction and properly sets cosigners and NetworkFee. If sysFee <= 0, it is determined via result of `invokescript` RPC. You should initialize network magic with Init before calling CreateTxFromScript.
func (*Client) GetApplicationLog ¶
func (c *Client) GetApplicationLog(hash util.Uint256, trig *trigger.Type) (*result.ApplicationLog, error)
GetApplicationLog returns the contract log based on the specified txid.
func (*Client) GetBestBlockHash ¶
GetBestBlockHash returns the hash of the tallest block in the main chain.
func (*Client) GetBlockByHash ¶
GetBlockByHash returns a block by its hash. You should initialize network magic with Init before calling GetBlockByHash.
func (*Client) GetBlockByHashVerbose ¶
GetBlockByHashVerbose returns a block wrapper with additional metadata by its hash. You should initialize network magic with Init before calling GetBlockByHashVerbose.
func (*Client) GetBlockByIndex ¶
GetBlockByIndex returns a block by its height. You should initialize network magic with Init before calling GetBlockByIndex.
func (*Client) GetBlockByIndexVerbose ¶
GetBlockByIndexVerbose returns a block wrapper with additional metadata by its height. You should initialize network magic with Init before calling GetBlockByIndexVerbose. NOTE: to get transaction.ID and transaction.Size, use t.Hash() and io.GetVarSize(t) respectively.
func (*Client) GetBlockCount ¶
GetBlockCount returns the number of blocks in the main chain.
func (*Client) GetBlockHash ¶
GetBlockHash returns the hash value of the corresponding block, based on the specified index.
func (*Client) GetBlockHeader ¶
GetBlockHeader returns the corresponding block header information from serialized hex string according to the specified script hash. You should initialize network magic // with Init before calling GetBlockHeader.
func (*Client) GetBlockHeaderVerbose ¶
GetBlockHeaderVerbose returns the corresponding block header information from Json format string according to the specified script hash.
func (*Client) GetBlockSysFee ¶
GetBlockSysFee returns the system fees of the block, based on the specified index.
func (*Client) GetCommittee ¶ added in v0.92.0
func (c *Client) GetCommittee() (keys.PublicKeys, error)
GetCommittee returns the current public keys of NEO nodes in committee.
func (*Client) GetConnectionCount ¶
GetConnectionCount returns the current number of connections for the node.
func (*Client) GetContractStateByAddressOrName ¶ added in v0.92.0
GetContractStateByAddressOrName queries contract information, according to the contract address or name.
func (*Client) GetContractStateByHash ¶ added in v0.92.0
GetContractStateByHash queries contract information, according to the contract script hash.
func (*Client) GetContractStateByID ¶ added in v0.92.0
GetContractStateByID queries contract information, according to the contract ID.
func (*Client) GetExecFeeFactor ¶ added in v0.92.0
GetExecFeeFactor invokes `getExecFeeFactor` method on a native Policy contract.
func (*Client) GetFeePerByte ¶ added in v0.90.0
GetFeePerByte invokes `getFeePerByte` method on a native Policy contract.
func (*Client) GetMaxBlockSize ¶ added in v0.90.0
GetMaxBlockSize invokes `getMaxBlockSize` method on a native Policy contract.
func (*Client) GetMaxTransactionsPerBlock ¶ added in v0.90.0
GetMaxTransactionsPerBlock invokes `getMaxTransactionsPerBlock` method on a native Policy contract.
func (*Client) GetNEP17Balances ¶ added in v0.92.0
GetNEP17Balances is a wrapper for getnep17balances RPC.
func (*Client) GetNEP17Transfers ¶ added in v0.92.0
func (c *Client) GetNEP17Transfers(address string, start, stop *uint32, limit, page *int) (*result.NEP17Transfers, error)
GetNEP17Transfers is a wrapper for getnep17transfers RPC. Address parameter is mandatory, while all the others are optional. Start and stop parameters are supported since neo-go 0.77.0 and limit and page since neo-go 0.78.0. These parameters are positional in the JSON-RPC call, you can't specify limit and not specify start/stop for example.
func (*Client) GetNativeContractHash ¶ added in v0.92.0
GetNativeContractHash returns native contract hash by its name.
func (*Client) GetNetwork ¶ added in v0.92.0
GetNetwork returns the network magic of the RPC node client connected to.
func (*Client) GetNextBlockValidators ¶ added in v0.92.0
GetNextBlockValidators returns the current NEO consensus nodes information and voting status.
func (*Client) GetPeers ¶
GetPeers returns the list of nodes that the node is currently connected/disconnected from.
func (*Client) GetRawMemPool ¶
GetRawMemPool returns the list of unconfirmed transactions in memory.
func (*Client) GetRawTransaction ¶
func (c *Client) GetRawTransaction(hash util.Uint256) (*transaction.Transaction, error)
GetRawTransaction returns a transaction by hash. You should initialize network magic with Init before calling GetRawTransaction.
func (*Client) GetRawTransactionVerbose ¶
GetRawTransactionVerbose returns a transaction wrapper with additional metadata by transaction's hash. You should initialize network magic with Init before calling GetRawTransactionVerbose. NOTE: to get transaction.ID and transaction.Size, use t.Hash() and io.GetVarSize(t) respectively.
func (*Client) GetStorageByHash ¶ added in v0.90.0
GetStorageByHash returns the stored value, according to the contract script hash and the stored key.
func (*Client) GetStorageByID ¶ added in v0.90.0
GetStorageByID returns the stored value, according to the contract ID and the stored key.
func (*Client) GetTransactionHeight ¶
GetTransactionHeight returns the block index in which the transaction is found.
func (*Client) GetUnclaimedGas ¶ added in v0.90.0
func (c *Client) GetUnclaimedGas(address string) (result.UnclaimedGas, error)
GetUnclaimedGas returns unclaimed GAS amount for the specified address.
func (*Client) GetVersion ¶
GetVersion returns the version information about the queried node.
func (*Client) Init ¶ added in v0.92.0
Init sets magic of the network client connected to and native NEO and GAS contracts scripthashes. This method should be called before any transaction-, header- or block-related requests in order to deserialize responses properly.
func (*Client) InvokeContractVerify ¶ added in v0.92.0
func (c *Client) InvokeContractVerify(contract util.Uint160, params []smartcontract.Parameter, signers []transaction.Signer, witnesses ...transaction.Witness) (*result.Invoke, error)
InvokeContractVerify returns the results after calling `verify` method of the smart contract with the given parameters under verification trigger type. NOTE: this is test invoke and will not affect the blockchain.
func (*Client) InvokeFunction ¶
func (c *Client) InvokeFunction(contract util.Uint160, operation string, params []smartcontract.Parameter, signers []transaction.Signer) (*result.Invoke, error)
InvokeFunction returns the results after calling the smart contract scripthash with the given operation and parameters. NOTE: this is test invoke and will not affect the blockchain.
func (*Client) InvokeScript ¶
InvokeScript returns the result of the given script after running it true the VM. NOTE: This is a test invoke and will not affect the blockchain.
func (*Client) IsBlocked ¶ added in v0.92.0
IsBlocked invokes `isBlocked` method on native Policy contract.
func (*Client) MultiTransferNEP17 ¶ added in v0.92.0
func (c *Client) MultiTransferNEP17(acc *wallet.Account, gas int64, recipients ...TransferTarget) (util.Uint256, error)
MultiTransferNEP17 is similar to TransferNEP17, buf allows to have multiple recipients.
func (*Client) NEP17BalanceOf ¶ added in v0.92.0
NEP17BalanceOf invokes `balanceOf` NEP17 method on a specified contract.
func (*Client) NEP17Decimals ¶ added in v0.92.0
NEP17Decimals invokes `decimals` NEP17 method on a specified contract.
func (*Client) NEP17Symbol ¶ added in v0.92.0
NEP17Symbol invokes `symbol` NEP17 method on a specified contract.
func (*Client) NEP17TokenInfo ¶ added in v0.92.0
NEP17TokenInfo returns full NEP17 token info.
func (*Client) NEP17TotalSupply ¶ added in v0.92.0
NEP17TotalSupply invokes `totalSupply` NEP17 method on a specified contract.
func (*Client) Ping ¶
Ping attempts to create a connection to the endpoint. and returns an error if there is one.
func (*Client) SendRawTransaction ¶
func (c *Client) SendRawTransaction(rawTX *transaction.Transaction) (util.Uint256, error)
SendRawTransaction broadcasts a transaction over the NEO network. The given hex string needs to be signed with a keypair. When the result of the response object is true, the TX has successfully been broadcasted to the network.
func (*Client) SignAndPushInvocationTx ¶
func (c *Client) SignAndPushInvocationTx(script []byte, acc *wallet.Account, sysfee int64, netfee fixedn.Fixed8, cosigners []transaction.Signer) (util.Uint256, error)
SignAndPushInvocationTx signs and pushes given script as an invocation transaction using given wif to sign it and spending the amount of gas specified. It returns a hash of the invocation transaction and an error.
func (*Client) StateRootInHeader ¶ added in v0.92.0
StateRootInHeader returns true if state root is contained in block header.
func (*Client) SubmitBlock ¶
SubmitBlock broadcasts a raw block over the NEO network.
func (*Client) TransferNEP17 ¶ added in v0.92.0
func (c *Client) TransferNEP17(acc *wallet.Account, to util.Uint160, token util.Uint160, amount int64, gas int64) (util.Uint256, error)
TransferNEP17 creates an invocation transaction that invokes 'transfer' method on a given token to move specified amount of NEP17 assets (in FixedN format using contract's number of decimals) to given account and sends it to the network returning just a hash of it.
func (*Client) ValidateAddress ¶
ValidateAddress verifies that the address is a correct NEO address.
type Notification ¶ added in v0.75.0
Notification represents server-generated notification for client subscriptions. Value can be one of block.Block, result.ApplicationLog, result.NotificationEvent or transaction.Transaction based on Type.
type Options ¶
type Options struct { // Cert is a client-side certificate, it doesn't work at the moment along // with the other two options below. Cert string Key string CACert string DialTimeout time.Duration RequestTimeout time.Duration }
Options defines options for the RPC client. All values are optional. If any duration is not specified a default of 4 seconds will be used.
type TransferTarget ¶ added in v0.91.0
TransferTarget represents target address and token amount for transfer.
type WSClient ¶ added in v0.75.0
type WSClient struct { Client // Notifications is a channel that is used to send events received from // server. Client's code is supposed to be reading from this channel if // it wants to use subscription mechanism, failing to do so will cause // WSClient to block even regular requests. This channel is not buffered. // In case of protocol error or upon connection closure this channel will // be closed, so make sure to handle this. Notifications chan Notification // contains filtered or unexported fields }
WSClient is a websocket-enabled RPC client that can be used with appropriate servers. It's supposed to be faster than Client because it has persistent connection to the server and at the same time is exposes some functionality that is only provided via websockets (like event subscription mechanism).
func NewWS ¶ added in v0.75.0
NewWS returns a new WSClient ready to use (with established websocket connection). You need to use websocket URL for it like `ws://1.2.3.4/ws`. You should call Init method to initialize network magic the client is operating on.
func (*WSClient) Close ¶ added in v0.75.0
func (c *WSClient) Close()
Close closes connection to the remote side rendering this client instance unusable.
func (*WSClient) SubscribeForExecutionNotifications ¶ added in v0.75.0
func (c *WSClient) SubscribeForExecutionNotifications(contract *util.Uint160, name *string) (string, error)
SubscribeForExecutionNotifications adds subscription for notifications generated during transaction execution to this instance of client. It can be filtered by contract's hash (that emits notifications), nil value puts no such restrictions.
func (*WSClient) SubscribeForNewBlocks ¶ added in v0.75.0
SubscribeForNewBlocks adds subscription for new block events to this instance of client. It can filtered by primary consensus node index, nil value doesn't add any filters.
func (*WSClient) SubscribeForNewTransactions ¶ added in v0.75.0
func (c *WSClient) SubscribeForNewTransactions(sender *util.Uint160, signer *util.Uint160) (string, error)
SubscribeForNewTransactions adds subscription for new transaction events to this instance of client. It can be filtered by sender and/or signer, nil value is treated as missing filter.
func (*WSClient) SubscribeForTransactionExecutions ¶ added in v0.75.0
SubscribeForTransactionExecutions adds subscription for application execution results generated during transaction execution to this instance of client. Can be filtered by state (HALT/FAULT) to check for successful or failing transactions, nil value means no filtering.
func (*WSClient) Unsubscribe ¶ added in v0.75.0
Unsubscribe removes subscription for given event stream.
func (*WSClient) UnsubscribeAll ¶ added in v0.75.0
UnsubscribeAll removes all active subscriptions of current client.