Some checks failed
Docs Deploy / build_and_deploy (push) Has been cancelled
Generate Docs / cli (push) Has been cancelled
Generate Config Doc / cli (push) Has been cancelled
Go formatting / go-formatting (push) Has been cancelled
Check links / markdown-link-check (push) Has been cancelled
Integration / pre-test (push) Has been cancelled
Integration / test on (push) Has been cancelled
Integration / status (push) Has been cancelled
Lint / Lint Go code (push) Has been cancelled
Test / test (ubuntu-latest) (push) Has been cancelled
155 lines
6 KiB
Go
155 lines
6 KiB
Go
package cosmosclient
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cometbft/cometbft/libs/bytes"
|
|
rpcclient "github.com/cometbft/cometbft/rpc/client"
|
|
ctypes "github.com/cometbft/cometbft/rpc/core/types"
|
|
"github.com/cometbft/cometbft/types"
|
|
|
|
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/errors"
|
|
)
|
|
|
|
// rpcWrapper is a rpclient.Client but with more contextualized errors.
|
|
// Useful because the original implementation may return JSON errors when the
|
|
// requested node is busy, which is confusing for the user. With rpcWrapper,
|
|
// the error is prefixed with 'error while requesting node xxx: JSON error'.
|
|
type rpcWrapper struct {
|
|
rpcclient.Client
|
|
nodeAddress string
|
|
}
|
|
|
|
func rpcError(node string, err error) error {
|
|
return errors.Wrapf(err, "error while requesting node '%s'", node)
|
|
}
|
|
|
|
func (rpc rpcWrapper) ABCIInfo(ctx context.Context) (*ctypes.ResultABCIInfo, error) {
|
|
res, err := rpc.Client.ABCIInfo(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) ABCIQuery(ctx context.Context, path string, data bytes.HexBytes) (*ctypes.ResultABCIQuery, error) {
|
|
res, err := rpc.Client.ABCIQuery(ctx, path, data)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) ABCIQueryWithOptions(ctx context.Context, path string, data bytes.HexBytes, opts rpcclient.ABCIQueryOptions) (*ctypes.ResultABCIQuery, error) {
|
|
res, err := rpc.Client.ABCIQueryWithOptions(ctx, path, data, opts)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BroadcastTxCommit(ctx context.Context, tx types.Tx) (*ctypes.ResultBroadcastTxCommit, error) {
|
|
res, err := rpc.Client.BroadcastTxCommit(ctx, tx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BroadcastTxAsync(ctx context.Context, tx types.Tx) (*ctypes.ResultBroadcastTx, error) {
|
|
res, err := rpc.Client.BroadcastTxAsync(ctx, tx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BroadcastTxSync(ctx context.Context, tx types.Tx) (*ctypes.ResultBroadcastTx, error) {
|
|
res, err := rpc.Client.BroadcastTxSync(ctx, tx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) GenesisChunked(ctx context.Context, n uint) (*ctypes.ResultGenesisChunk, error) {
|
|
res, err := rpc.Client.GenesisChunked(ctx, n)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BlockchainInfo(ctx context.Context, minHeight int64, maxHeight int64) (*ctypes.ResultBlockchainInfo, error) {
|
|
res, err := rpc.Client.BlockchainInfo(ctx, minHeight, maxHeight)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) NetInfo(ctx context.Context) (*ctypes.ResultNetInfo, error) {
|
|
res, err := rpc.Client.NetInfo(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) DumpConsensusState(ctx context.Context) (*ctypes.ResultDumpConsensusState, error) {
|
|
res, err := rpc.Client.DumpConsensusState(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) ConsensusState(ctx context.Context) (*ctypes.ResultConsensusState, error) {
|
|
res, err := rpc.Client.ConsensusState(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) ConsensusParams(ctx context.Context, height *int64) (*ctypes.ResultConsensusParams, error) {
|
|
res, err := rpc.Client.ConsensusParams(ctx, height)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) Health(ctx context.Context) (*ctypes.ResultHealth, error) {
|
|
res, err := rpc.Client.Health(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) Block(ctx context.Context, height *int64) (*ctypes.ResultBlock, error) {
|
|
res, err := rpc.Client.Block(ctx, height)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BlockByHash(ctx context.Context, hash []byte) (*ctypes.ResultBlock, error) {
|
|
res, err := rpc.Client.BlockByHash(ctx, hash)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BlockResults(ctx context.Context, height *int64) (*ctypes.ResultBlockResults, error) {
|
|
res, err := rpc.Client.BlockResults(ctx, height)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) Commit(ctx context.Context, height *int64) (*ctypes.ResultCommit, error) {
|
|
res, err := rpc.Client.Commit(ctx, height)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) Validators(ctx context.Context, height *int64, page *int, perPage *int) (*ctypes.ResultValidators, error) {
|
|
res, err := rpc.Client.Validators(ctx, height, page, perPage)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) Tx(ctx context.Context, hash []byte, prove bool) (*ctypes.ResultTx, error) {
|
|
res, err := rpc.Client.Tx(ctx, hash, prove)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) TxSearch(ctx context.Context, query string, prove bool, page *int, perPage *int, orderBy string) (*ctypes.ResultTxSearch, error) {
|
|
res, err := rpc.Client.TxSearch(ctx, query, prove, page, perPage, orderBy)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BlockSearch(ctx context.Context, query string, page *int, perPage *int, orderBy string) (*ctypes.ResultBlockSearch, error) {
|
|
res, err := rpc.Client.BlockSearch(ctx, query, page, perPage, orderBy)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) Status(ctx context.Context) (*ctypes.ResultStatus, error) {
|
|
res, err := rpc.Client.Status(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) BroadcastEvidence(ctx context.Context, e types.Evidence) (*ctypes.ResultBroadcastEvidence, error) {
|
|
res, err := rpc.Client.BroadcastEvidence(ctx, e)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) UnconfirmedTxs(ctx context.Context, limit *int) (*ctypes.ResultUnconfirmedTxs, error) {
|
|
res, err := rpc.Client.UnconfirmedTxs(ctx, limit)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) NumUnconfirmedTxs(ctx context.Context) (*ctypes.ResultUnconfirmedTxs, error) {
|
|
res, err := rpc.Client.NumUnconfirmedTxs(ctx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|
|
|
|
func (rpc rpcWrapper) CheckTx(ctx context.Context, tx types.Tx) (*ctypes.ResultCheckTx, error) {
|
|
res, err := rpc.Client.CheckTx(ctx, tx)
|
|
return res, rpcError(rpc.nodeAddress, err)
|
|
}
|