forked from TrueCloudLab/neoneo-go
rpc/client: add a set of GetBlock methods
They differ in input and output types (and data), thus four methods are added.
This commit is contained in:
parent
685e34d83c
commit
f01766131b
2 changed files with 58 additions and 18 deletions
|
@ -19,6 +19,7 @@ TODO:
|
||||||
Supported methods
|
Supported methods
|
||||||
|
|
||||||
getaccountstate
|
getaccountstate
|
||||||
|
getblock
|
||||||
getclaimable
|
getclaimable
|
||||||
getunspents
|
getunspents
|
||||||
invoke
|
invoke
|
||||||
|
@ -34,7 +35,6 @@ Unsupported methods
|
||||||
getassetstate
|
getassetstate
|
||||||
getbalance
|
getbalance
|
||||||
getbestblockhash
|
getbestblockhash
|
||||||
getblock
|
|
||||||
getblockcount
|
getblockcount
|
||||||
getblockhash
|
getblockhash
|
||||||
getblockheader
|
getblockheader
|
||||||
|
|
|
@ -4,8 +4,10 @@ import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core"
|
"github.com/nspcc-dev/neo-go/pkg/core"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/block"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpc/request"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/request"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
||||||
|
@ -14,23 +16,6 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getBlock returns a block by its hash or index/height. If verbose is true
|
|
||||||
// the response will contain a pretty Block object instead of the raw hex string.
|
|
||||||
// missing output wrapper at the moment, thus commented out
|
|
||||||
// func (c *Client) getBlock(indexOrHash interface{}, verbose bool) (*response, error) {
|
|
||||||
// var (
|
|
||||||
// params = request.NewRawParams(indexOrHash)
|
|
||||||
// resp = &response{}
|
|
||||||
// )
|
|
||||||
// if verbose {
|
|
||||||
// params = request.NewRawParams(indexOrHash, 1)
|
|
||||||
// }
|
|
||||||
// if err := c.performRequest("getblock", params, resp); err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
// return resp, nil
|
|
||||||
// }
|
|
||||||
|
|
||||||
// GetAccountState returns detailed information about a NEO account.
|
// GetAccountState returns detailed information about a NEO account.
|
||||||
func (c *Client) GetAccountState(address string) (*result.AccountState, error) {
|
func (c *Client) GetAccountState(address string) (*result.AccountState, error) {
|
||||||
var (
|
var (
|
||||||
|
@ -43,6 +28,61 @@ func (c *Client) GetAccountState(address string) (*result.AccountState, error) {
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBlockByIndex returns a block by its height.
|
||||||
|
func (c *Client) GetBlockByIndex(index uint32) (*block.Block, error) {
|
||||||
|
return c.getBlock(request.NewRawParams(index))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBlockByHash returns a block by its hash.
|
||||||
|
func (c *Client) GetBlockByHash(hash util.Uint256) (*block.Block, error) {
|
||||||
|
return c.getBlock(request.NewRawParams(hash.StringLE()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) getBlock(params request.RawParams) (*block.Block, error) {
|
||||||
|
var (
|
||||||
|
resp string
|
||||||
|
err error
|
||||||
|
b *block.Block
|
||||||
|
)
|
||||||
|
if err = c.performRequest("getblock", params, &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
blockBytes, err := hex.DecodeString(resp)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := io.NewBinReaderFromBuf(blockBytes)
|
||||||
|
b = new(block.Block)
|
||||||
|
b.DecodeBinary(r)
|
||||||
|
if r.Err != nil {
|
||||||
|
return nil, r.Err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBlockByIndexVerbose returns a block wrapper with additional metadata by
|
||||||
|
// its height.
|
||||||
|
func (c *Client) GetBlockByIndexVerbose(index uint32) (*result.Block, error) {
|
||||||
|
return c.getBlockVerbose(request.NewRawParams(index, 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBlockByHashVerbose returns a block wrapper with additional metadata by
|
||||||
|
// its hash.
|
||||||
|
func (c *Client) GetBlockByHashVerbose(hash util.Uint256) (*result.Block, error) {
|
||||||
|
return c.getBlockVerbose(request.NewRawParams(hash.StringLE(), 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) getBlockVerbose(params request.RawParams) (*result.Block, error) {
|
||||||
|
var (
|
||||||
|
resp = &result.Block{}
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if err = c.performRequest("getblock", params, &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetClaimable returns tx outputs which can be claimed.
|
// GetClaimable returns tx outputs which can be claimed.
|
||||||
func (c *Client) GetClaimable(address string) (*result.ClaimableInfo, error) {
|
func (c *Client) GetClaimable(address string) (*result.ClaimableInfo, error) {
|
||||||
params := request.NewRawParams(address)
|
params := request.NewRawParams(address)
|
||||||
|
|
Loading…
Reference in a new issue