rpcx

package module
v1.28.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 18, 2023 License: Apache-2.0 Imports: 34 Imported by: 1

README

Go Bitxhub Client

build codecov Go Report Card

This SDK enables Go developers to build solutions that interact with BitXHub.

Getting started

Obtain the client SDK packages for BitXHub.

go get github.com/meshplus/go-bitxhub-client

You're good to go, happy coding! Check out the examples for usage demonstrations.

Documentation

SDK documentation can be viewed at GoDoc.

Examples
  • RPC Test: Basic example that uses SDK to query and execute transaction.
  • Block Test: Basic example that uses SDK to query blocks.
  • Contract Test: Basic example that uses SDK to deploy and invoke contract.
  • Subscribe Test: An example that uses SDK to subscribe the block event.
  • Sync Test: An example that uses SDK to sync the merkle wrapper.

Client SDK

You should start BitXHub before using SDK.

Running the test

Obtain the client SDK packages for BitXHub.

git clone https://github.com/meshplus/go-bitxhub-client.git
# In the BitXHub SDK Go directory
cd go-bitxhub-client/

# make depend
go mod tidy

# Running test
make test
Contributing

See CONTRIBUTING.md.

License

Apache-2.0

Documentation

Index

Constants

View Source
const (
	GetBlocksTimeout = 10 * time.Second
	GetBlockTimeout  = 10 * time.Second
)
View Source
const (
	GetTransactionTimeout    = 10 * time.Second
	SendTransactionTimeout   = 10 * time.Second
	SendMultiSignsTimeout    = 10 * time.Second
	GetReceiptTimeout        = 2 * time.Second
	GetAccountBalanceTimeout = 2 * time.Second
	GetTPSTimeout            = 2 * time.Second
	GetChainIDTimeout        = 2 * time.Second
	CheckPierTimeout         = 100 * time.Second

	ACCOUNT_KEY = "account"
)
View Source
const (
	GetInfoTimeout = 2 * time.Second
)

Variables

View Source
var (
	// error type which can be fixed by retrying
	ErrRecoverable = errors.New("recoverable error")

	// error type which tx format is invalid to send
	ErrReconstruct = errors.New("invalid tx format error")

	// set ibtp and normal nonce at the same time
	ErrIllegalNonceSet = fmt.Errorf("%w: can't set ibtp nonce and normal nonce at the same time", ErrReconstruct)

	// signature for tx is invalid
	ErrSignTx = fmt.Errorf("%w: sign for transaction invalid", ErrReconstruct)

	// network problem received from grpc
	ErrBrokenNetwork = fmt.Errorf("%w: grpc broker error", ErrRecoverable)
)

Functions

func Bool

func Bool(b bool) *pb.Arg

func Bytes

func Bytes(content []byte) *pb.Arg

func CheckReceipt

func CheckReceipt(receipt *pb.Receipt) bool

func Float32 added in v1.28.0

func Float32(f float32) *pb.Arg

func Float64 added in v1.28.0

func Float64(f float64) *pb.Arg

func Int32

func Int32(i int32) *pb.Arg

func Int64

func Int64(i int64) *pb.Arg

func String

func String(content string) *pb.Arg

func Uint32

func Uint32(i uint32) *pb.Arg

func Uint64

func Uint64(i uint64) *pb.Arg

func WithAPIAddrs

func WithAPIAddrs(addrs []string) func(*IPFSClient)

WithAPIAddrs returns ipfs client e.g []string{"http://localhost:5001"}

Types

type Account added in v1.28.0

type Account struct {
	Type          string     `json:"type"`
	Balance       *big.Int   `json:"balance"`
	ContractCount uint64     `json:"contract_count"`
	CodeHash      types.Hash `json:"code_hash"`
}

type ChainClient

type ChainClient struct {
	// contains filtered or unexported fields
}

func New

func New(opts ...Option) (*ChainClient, error)

func NewWithNoGlobalPool added in v1.28.0

func NewWithNoGlobalPool(opts ...Option) (*ChainClient, error)

func (*ChainClient) CheckMasterPier

func (cli *ChainClient) CheckMasterPier(address string) (*pb.Response, error)

func (*ChainClient) DeployContract

func (cli *ChainClient) DeployContract(contract []byte, opts *TransactOpts) (contractAddr *types.Address, err error)

DeployContract let client deploy the wasm contract into BitXHub.

func (*ChainClient) GenerateContractTx

func (cli *ChainClient) GenerateContractTx(vmType pb.TransactionData_VMType, address *types.Address, method string, args ...*pb.Arg) (*pb.BxhTransaction, error)

func (*ChainClient) GenerateIBTPTx

func (cli *ChainClient) GenerateIBTPTx(ibtp *pb.IBTP) (*pb.BxhTransaction, error)

func (*ChainClient) GetAccountBalance

func (cli *ChainClient) GetAccountBalance(address string) (*pb.Response, error)

func (*ChainClient) GetBlock

func (cli *ChainClient) GetBlock(value string, blockType pb.GetBlockRequest_Type, fullTx bool) (*pb.Block, error)

func (*ChainClient) GetBlockHeader

func (cli *ChainClient) GetBlockHeader(ctx context.Context, begin, end uint64, ch chan<- *pb.BlockHeader) error

func (*ChainClient) GetBlocks

func (cli *ChainClient) GetBlocks(start uint64, end uint64, fullTx bool) (*pb.GetBlocksResponse, error)

func (*ChainClient) GetChainID added in v1.28.0

func (cli *ChainClient) GetChainID() (uint64, error)

func (*ChainClient) GetChainMeta

func (cli *ChainClient) GetChainMeta() (*pb.ChainMeta, error)

func (*ChainClient) GetChainStatus

func (cli *ChainClient) GetChainStatus() (*pb.Response, error)

func (*ChainClient) GetInterchainTxWrappers

func (cli *ChainClient) GetInterchainTxWrappers(ctx context.Context, pid string, begin, end uint64, ch chan<- *pb.InterchainTxWrappers) error

func (*ChainClient) GetMultiSigns

func (cli *ChainClient) GetMultiSigns(content string, typ pb.GetSignsRequest_Type) (*pb.SignResponse, error)

func (*ChainClient) GetNetworkMeta

func (cli *ChainClient) GetNetworkMeta() (*pb.Response, error)

func (*ChainClient) GetPendingNonceByAccount

func (cli *ChainClient) GetPendingNonceByAccount(account string) (uint64, error)

func (*ChainClient) GetReceipt

func (cli *ChainClient) GetReceipt(hash string) (*pb.Receipt, error)

GetReceipts get receipts by tx hashes

func (*ChainClient) GetTPS

func (cli *ChainClient) GetTPS(begin, end uint64) (uint64, error)

func (*ChainClient) GetTransaction

func (cli *ChainClient) GetTransaction(hash string) (*pb.GetTransactionResponse, error)

func (*ChainClient) GetTransactionByBlockHashAndIndex added in v1.28.0

func (cli *ChainClient) GetTransactionByBlockHashAndIndex(blockHash string, index uint64) (*pb.GetTransactionResponse, error)

func (*ChainClient) GetTransactionByBlockNumberAndIndex added in v1.28.0

func (cli *ChainClient) GetTransactionByBlockNumberAndIndex(blockNum uint64, index uint64) (*pb.GetTransactionResponse, error)

func (*ChainClient) GetTssSigns added in v1.28.0

func (cli *ChainClient) GetTssSigns(content string, typ pb.GetSignsRequest_Type, extra []byte) (*pb.SignResponse, error)

func (*ChainClient) GetValidators

func (cli *ChainClient) GetValidators() (*pb.Response, error)

func (*ChainClient) HeartBeat

func (cli *ChainClient) HeartBeat(address string, index string) (*pb.Response, error)

func (*ChainClient) IPFSGet

func (cli *ChainClient) IPFSGet(path string) (*pb.Response, error)

IPFSGet gets from ipfs args@path e.g. /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

func (*ChainClient) IPFSGetToLocal

func (cli *ChainClient) IPFSGetToLocal(path string, localfPath string) (*pb.Response, error)

IPFSGetToLocal gets from ipfs and saves to local file path args@path e.g. /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme args@localPath e.g. /tmp/readme

func (*ChainClient) IPFSPutFromLocal

func (cli *ChainClient) IPFSPutFromLocal(localfPath string) (*pb.Response, error)

IPFSPutFromLocal puts local file to ipfs args@localPath e.g. /tmp/eg.json returns cid of file stored on ipfs

func (*ChainClient) InvokeBVMContract

func (cli *ChainClient) InvokeBVMContract(address *types.Address, method string, opts *TransactOpts, args ...*pb.Arg) (*pb.Receipt, error)

func (*ChainClient) InvokeContract

func (cli *ChainClient) InvokeContract(vmType pb.TransactionData_VMType, address *types.Address, method string,
	opts *TransactOpts, args ...*pb.Arg) (*pb.Receipt, error)

InvokeContract let client invoke the wasm contract with specific method.

func (*ChainClient) InvokeXVMContract

func (cli *ChainClient) InvokeXVMContract(address *types.Address, method string, opts *TransactOpts, args ...*pb.Arg) (*pb.Receipt, error)

func (*ChainClient) SendRawTransaction added in v1.28.0

func (cli *ChainClient) SendRawTransaction(tx *pb.BxhTransaction) (string, error)

SendRawTransaction send signed transaction

func (*ChainClient) SendRawTransactionWithReceipt added in v1.28.0

func (cli *ChainClient) SendRawTransactionWithReceipt(tx *pb.BxhTransaction) (*pb.Receipt, error)

SendRawTransactionWithReceipt send signed transaction with receipt

func (*ChainClient) SendTransaction

func (cli *ChainClient) SendTransaction(tx *pb.BxhTransaction, opts *TransactOpts) (string, error)

func (*ChainClient) SendTransactionWithReceipt

func (cli *ChainClient) SendTransactionWithReceipt(tx *pb.BxhTransaction, opts *TransactOpts) (*pb.Receipt, error)

func (*ChainClient) SendTransactions added in v1.28.0

func (cli *ChainClient) SendTransactions(txs *pb.MultiTransaction) (*pb.MultiTransactionHash, error)

func (*ChainClient) SendView

func (cli *ChainClient) SendView(tx *pb.BxhTransaction) (*pb.Receipt, error)

func (*ChainClient) SetCtxMetadata added in v1.28.0

func (cli *ChainClient) SetCtxMetadata(ctx context.Context) (context.Context, error)

func (*ChainClient) SetMasterPier

func (cli *ChainClient) SetMasterPier(address string, index string, timeout int64) (*pb.Response, error)

func (*ChainClient) SetPrivateKey

func (cli *ChainClient) SetPrivateKey(key crypto.PrivateKey)

func (*ChainClient) Stop

func (cli *ChainClient) Stop() error

func (*ChainClient) Subscribe

func (cli *ChainClient) Subscribe(ctx context.Context, typ pb.SubscriptionRequest_Type, extra []byte) (<-chan interface{}, error)

func (*ChainClient) SubscribeAudit added in v1.28.0

func (cli *ChainClient) SubscribeAudit(ctx context.Context, typ pb.AuditSubscriptionRequest_Type, blockHeight uint64, extra []byte) (<-chan interface{}, error)

type Client

type Client interface {
	//Close all connections between BitXHub and the client.
	Stop() error

	//Reset ecdsa key.
	SetPrivateKey(crypto.PrivateKey)

	//Send a readonly transaction to BitXHub. If the transaction is writable,
	// this transaction will not be executed and error wil be returned.
	SendView(tx *pb.BxhTransaction) (*pb.Receipt, error)

	//Send a signed transaction to BitXHub. If the signature is illegal,
	//the transaction hash will be obtained but the transaction receipt is illegal.
	SendTransaction(tx *pb.BxhTransaction, opts *TransactOpts) (string, error)

	SendTransactions(txs *pb.MultiTransaction) (*pb.MultiTransactionHash, error)

	SendRawTransaction(tx *pb.BxhTransaction) (string, error)

	//Send transaction to BitXHub and get the receipt.
	SendTransactionWithReceipt(tx *pb.BxhTransaction, opts *TransactOpts) (*pb.Receipt, error)

	SendRawTransactionWithReceipt(tx *pb.BxhTransaction) (*pb.Receipt, error)

	//Get the receipt by transaction hash,
	//the status of the receipt is a sign of whether the transaction is successful.
	GetReceipt(hash string) (*pb.Receipt, error)

	//Get transaction from BitXHub by transaction hash.
	GetTransaction(hash string) (*pb.GetTransactionResponse, error)

	GetTransactionByBlockHashAndIndex(blockHash string, index uint64) (*pb.GetTransactionResponse, error)

	GetTransactionByBlockNumberAndIndex(blockNum uint64, index uint64) (*pb.GetTransactionResponse, error)

	//Get the current blockchain situation of BitXHub.
	GetChainMeta() (*pb.ChainMeta, error)

	//Get blocks of the specified block height range.
	GetBlocks(start uint64, end uint64, fullTx bool) (*pb.GetBlocksResponse, error)

	//Obtain block information from BitXHub.
	//The block header contains the basic information of the block,
	//and the block body contains all the transactions packaged.
	GetBlock(value string, blockType pb.GetBlockRequest_Type, fullTx bool) (*pb.Block, error)

	//Get the status of the blockchain from BitXHub, normal or abnormal.
	GetChainStatus() (*pb.Response, error)

	//Get the validators from BitXHub.
	GetValidators() (*pb.Response, error)

	//Get the current network situation of BitXHub.
	GetNetworkMeta() (*pb.Response, error)

	//Get account balance from BitXHub by address.
	GetAccountBalance(address string) (*pb.Response, error)

	//Get the missing block header from BitXHub.
	GetBlockHeader(ctx context.Context, begin, end uint64, ch chan<- *pb.BlockHeader) error

	//Get the missing block header from BitXHub.
	GetInterchainTxWrappers(ctx context.Context, pid string, begin, end uint64, ch chan<- *pb.InterchainTxWrappers) error

	//Subscribe to event notifications from BitXHub.
	Subscribe(context.Context, pb.SubscriptionRequest_Type, []byte) (<-chan interface{}, error)

	//SubscribeAudit to event notifications from BitXHub with permission.
	SubscribeAudit(context.Context, pb.AuditSubscriptionRequest_Type, uint64, []byte) (<-chan interface{}, error)

	//Deploy the contract, the contract address will be returned when the deployment is successful.
	DeployContract(contract []byte, opts *TransactOpts) (contractAddr *types.Address, err error)

	//GenerateContractTx generates signed transaction to invoke contract
	GenerateContractTx(vmType pb.TransactionData_VMType, address *types.Address, method string, args ...*pb.Arg) (*pb.BxhTransaction, error)

	// GenerateIBTPTx generates interchain tx with ibtp specified
	GenerateIBTPTx(ibtp *pb.IBTP) (*pb.BxhTransaction, error)

	//Call the contract according to the contract type, contract address,
	//contract method, and contract method parameters
	InvokeContract(vmType pb.TransactionData_VMType, address *types.Address, method string, opts *TransactOpts, args ...*pb.Arg) (*pb.Receipt, error)

	//Invoke the BVM contract, BVM is BitXHub's blot contract.
	InvokeBVMContract(address *types.Address, method string, opts *TransactOpts, args ...*pb.Arg) (*pb.Receipt, error)

	//Invoke the XVM contract, XVM is WebAssembly contract.
	InvokeXVMContract(address *types.Address, method string, opts *TransactOpts, args ...*pb.Arg) (*pb.Receipt, error)

	// Get BitXHub's signatures specified by id and type.
	GetMultiSigns(id string, typ pb.GetSignsRequest_Type) (*pb.SignResponse, error)

	// Get BitXHub's tss signatures specified by id and type.
	GetTssSigns(id string, typ pb.GetSignsRequest_Type, extra []byte) (*pb.SignResponse, error)

	// Get BitXHub TPS during block [begin, end]
	GetTPS(begin, end uint64) (uint64, error)

	// GetPendingNonceByAccount returns the latest nonce of an account in the pending status,
	// and it should be the nonce for next transaction
	GetPendingNonceByAccount(account string) (uint64, error)

	// IPFSPutFromLocal puts local file to ipfs network
	IPFSPutFromLocal(localfPath string) (*pb.Response, error)

	// IPFSGet gets from ipfs network
	IPFSGet(path string) (*pb.Response, error)

	// IPFSGetToLocal gets from ipfs and saves to local file path
	IPFSGetToLocal(path string, localfPath string) (*pb.Response, error)
	//Check whethe there is a master pier connect to the BitXHub.
	CheckMasterPier(address string) (*pb.Response, error)

	//Set the master pier connect to the BitXHub.
	SetMasterPier(address string, index string, timeout int64) (*pb.Response, error)

	//Update the master pier status
	HeartBeat(address string, index string) (*pb.Response, error)

	// GetChainID get BitXHub Chain ID
	GetChainID() (uint64, error)
}

type ConnectionPool

type ConnectionPool struct {
	// contains filtered or unexported fields
}

func NewPool

func NewPool(config *config) (*ConnectionPool, error)

init a connection

func (*ConnectionPool) Close

func (pool *ConnectionPool) Close() error

type IPFSClient

type IPFSClient struct {
	// contains filtered or unexported fields
}

IPFSClient .

func NewIPFSClient

func NewIPFSClient(options ...func(*IPFSClient)) (*IPFSClient, error)

NewIPFSClient .

func (*IPFSClient) AddAPIShell

func (ipfsClient *IPFSClient) AddAPIShell(addr string)

AddAPIShell add ipfs api address

func (*IPFSClient) Get

func (ipfsClient *IPFSClient) Get(path string) ([]byte, error)

Get gets from ipfs args@path e.g. /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme returns content of file

func (*IPFSClient) GetToLocal

func (ipfsClient *IPFSClient) GetToLocal(path string, localfPath string) error

GetToLocal gets from ipfs and saves to local file path args@path e.g. /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme args@localPath e.g. /tmp/readme

func (*IPFSClient) PutFromLocal

func (ipfsClient *IPFSClient) PutFromLocal(localfPath string) ([]byte, error)

PutFromLocal puts local file to ipfs args@localPath e.g. /tmp/eg.json returns cid of file stored on ipfs

func (*IPFSClient) RmAPIAddr

func (ipfsClient *IPFSClient) RmAPIAddr(addr string)

RmAPIAddr rm ipfs api address

type IPFSResponse

type IPFSResponse struct {
	Name string `json:"Name"`
	Hash string `json:"Hash"`
	Size string `json:"Size"`
}

IPFSResponse describes ipfs add response

type Interchain

type Interchain struct {
	ID                   string            `json:"id"`
	InterchainCounter    map[string]uint64 `json:"interchain_counter,omitempty"`
	ReceiptCounter       map[string]uint64 `json:"receipt_counter,omitempty"`
	SourceReceiptCounter map[string]uint64 `json:"source_receipt_counter,omitempty"`
}

type Logger

type Logger interface {
	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
	Printf(format string, args ...interface{})
	Warningf(format string, args ...interface{})
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
	Panicf(format string, args ...interface{})

	Debug(args ...interface{})
	Info(args ...interface{})
	Print(args ...interface{})
	Warning(args ...interface{})
	Error(args ...interface{})
	Fatal(args ...interface{})
	Panic(args ...interface{})

	Debugln(args ...interface{})
	Infoln(args ...interface{})
	Println(args ...interface{})
	Warningln(args ...interface{})
	Errorln(args ...interface{})
	Fatalln(args ...interface{})
	Panicln(args ...interface{})
}

The FieldLogger interface generalizes the Entry and logger types

type NodeInfo

type NodeInfo struct {
	Addr       string
	EnableTLS  bool
	CertPath   string
	CommonName string
	AccessCert string
	AccessKey  string
}

type Option

type Option func(*config)

func WithIPFSInfo

func WithIPFSInfo(addrs []string) Option

func WithLogger

func WithLogger(logger Logger) Option

func WithNodesInfo

func WithNodesInfo(nodesInfo ...*NodeInfo) Option

func WithPoolSize added in v1.28.0

func WithPoolSize(size int) Option

func WithPrivateKey

func WithPrivateKey(key crypto.PrivateKey) Option

func WithTimeoutLimit

func WithTimeoutLimit(limit time.Duration) Option

type SubscriptionType

type SubscriptionType int
const (
	SubscribeNewBlock SubscriptionType = iota
)

type TransactOpts

type TransactOpts struct {
	From    string
	Nonce   uint64
	PrivKey crypto.PrivateKey
}

Directories

Path Synopsis
Package mock_client is a generated GoMock package.
Package mock_client is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL