1 Star 1 Fork 0

NineLightY/chainmake-sdk-go

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
sdk_system_contract.go 20.42 KB
一键复制 编辑 原始数据 按行查看 历史
NineLightY 提交于 2022-07-27 17:18 +08:00 . init
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
/*
Copyright (C) BABEC. All rights reserved.
Copyright (C) THL A29 Limited, a Tencent company. All rights reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chainmaker_sdk_go
import (
"encoding/json"
"errors"
"fmt"
"strconv"
"chainmaker.org/chainmaker/pb-go/v2/common"
"chainmaker.org/chainmaker/pb-go/v2/discovery"
"chainmaker.org/chainmaker/pb-go/v2/store"
"chainmaker.org/chainmaker/pb-go/v2/syscontract"
"gitee.com/jsharkc/chainmake-sdk-go/utils"
"github.com/gogo/protobuf/proto"
)
func (cc *ChainClient) GetTxByTxId(txId string) (*common.TransactionInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[txId:%s]",
syscontract.ChainQueryFunction_GET_TX_BY_TX_ID, txId)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_TX_BY_TX_ID.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractTxId,
Value: []byte(txId),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
transactionInfo := &common.TransactionInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, transactionInfo); err != nil {
return nil, fmt.Errorf("GetTxByTxId unmarshal transaction info payload failed, %s", err)
}
return transactionInfo, nil
}
func (cc *ChainClient) GetTxWithRWSetByTxId(txId string) (*common.TransactionInfoWithRWSet, error) {
cc.logger.Debugf("[SDK] begin GetTxWithRWSetByTxId, [method:%s]/[txId:%s]",
syscontract.ChainQueryFunction_GET_TX_BY_TX_ID, txId)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_TX_BY_TX_ID.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractTxId,
Value: []byte(txId),
},
{
Key: utils.KeyBlockContractWithRWSet,
Value: []byte("true"),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
tx := &common.TransactionInfoWithRWSet{}
if err = proto.Unmarshal(resp.ContractResult.Result, tx); err != nil {
return nil, fmt.Errorf("GetTxWithRWSetByTxId unmarshal failed, %s", err)
}
return tx, nil
}
func (cc *ChainClient) GetBlockByHeight(blockHeight uint64, withRWSet bool) (*common.BlockInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[blockHeight:%d]/[withRWSet:%t]",
syscontract.ChainQueryFunction_GET_BLOCK_BY_HEIGHT, blockHeight, withRWSet)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_BLOCK_BY_HEIGHT.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractBlockHeight,
Value: []byte(strconv.FormatUint(blockHeight, 10)),
},
{
Key: utils.KeyBlockContractWithRWSet,
Value: []byte(strconv.FormatBool(withRWSet)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockInfo := &common.BlockInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, blockInfo); err != nil {
return nil, fmt.Errorf("GetBlockByHeight unmarshal block info payload failed, %s", err)
}
return blockInfo, nil
}
func (cc *ChainClient) GetBlockByHash(blockHash string, withRWSet bool) (*common.BlockInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[blockHash:%s]/[withRWSet:%t]",
syscontract.ChainQueryFunction_GET_BLOCK_BY_HASH, blockHash, withRWSet)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_BLOCK_BY_HASH.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractBlockHash,
Value: []byte(blockHash),
},
{
Key: utils.KeyBlockContractWithRWSet,
Value: []byte(strconv.FormatBool(withRWSet)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockInfo := &common.BlockInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, blockInfo); err != nil {
return nil, fmt.Errorf("GetBlockByHash unmarshal block info payload failed, %s", err)
}
return blockInfo, nil
}
func (cc *ChainClient) GetBlockByTxId(txId string, withRWSet bool) (*common.BlockInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[txId:%s]/[withRWSet:%t]",
syscontract.ChainQueryFunction_GET_BLOCK_BY_TX_ID, txId, withRWSet)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_BLOCK_BY_TX_ID.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractTxId,
Value: []byte(txId),
},
{
Key: utils.KeyBlockContractWithRWSet,
Value: []byte(strconv.FormatBool(withRWSet)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockInfo := &common.BlockInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, blockInfo); err != nil {
return nil, fmt.Errorf("GetBlockByTxId unmarshal block info payload failed, %s", err)
}
return blockInfo, nil
}
func (cc *ChainClient) GetLastConfigBlock(withRWSet bool) (*common.BlockInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[withRWSet:%t]",
syscontract.ChainQueryFunction_GET_LAST_CONFIG_BLOCK, withRWSet)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_LAST_CONFIG_BLOCK.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractWithRWSet,
Value: []byte(strconv.FormatBool(withRWSet)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockInfo := &common.BlockInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, blockInfo); err != nil {
return nil, fmt.Errorf("GetBlockByTxId unmarshal block info payload failed, %s", err)
}
return blockInfo, nil
}
func (cc *ChainClient) GetChainInfo() (*discovery.ChainInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]", syscontract.ChainQueryFunction_GET_CHAIN_INFO)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_CHAIN_INFO.String(), []*common.KeyValuePair{}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
chainInfo := &discovery.ChainInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, chainInfo); err != nil {
return nil, fmt.Errorf("GetChainInfo unmarshal chain info payload failed, %s", err)
}
return chainInfo, nil
}
func (cc *ChainClient) GetNodeChainList() (*discovery.ChainList, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]",
syscontract.ChainQueryFunction_GET_NODE_CHAIN_LIST)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_NODE_CHAIN_LIST.String(), []*common.KeyValuePair{}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
chainList := &discovery.ChainList{}
if err = proto.Unmarshal(resp.ContractResult.Result, chainList); err != nil {
return nil, fmt.Errorf("GetNodeChainList unmarshal chain list payload failed, %s", err)
}
return chainList, nil
}
func (cc *ChainClient) GetFullBlockByHeight(blockHeight uint64) (*store.BlockWithRWSet, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[blockHeight:%d]",
syscontract.ChainQueryFunction_GET_FULL_BLOCK_BY_HEIGHT, blockHeight)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_FULL_BLOCK_BY_HEIGHT.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractBlockHeight,
Value: []byte(strconv.FormatUint(blockHeight, 10)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
if utils.IsArchived(resp.Code) {
return nil, errors.New(resp.Code.String())
}
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
fullBlockInfo := &store.BlockWithRWSet{}
if err = proto.Unmarshal(resp.ContractResult.Result, fullBlockInfo); err != nil {
return nil, fmt.Errorf("GetFullBlockByHeight unmarshal block info payload failed, %s", err)
}
return fullBlockInfo, nil
}
func (cc *ChainClient) GetArchivedBlockHeight() (uint64, error) {
return cc.getBlockHeight("", "")
}
func (cc *ChainClient) GetBlockHeightByTxId(txId string) (uint64, error) {
return cc.getBlockHeight(txId, "")
}
func (cc *ChainClient) GetBlockHeightByHash(blockHash string) (uint64, error) {
return cc.getBlockHeight("", blockHash)
}
func (cc *ChainClient) getBlockHeight(txId, blockHash string) (uint64, error) {
var (
txType = common.TxType_QUERY_CONTRACT
contractName = syscontract.SystemContract_CHAIN_QUERY.String()
method string
pairs []*common.KeyValuePair
)
if txId != "" {
method = syscontract.ChainQueryFunction_GET_BLOCK_HEIGHT_BY_TX_ID.String()
pairs = []*common.KeyValuePair{
{
Key: utils.KeyBlockContractTxId,
Value: []byte(txId),
},
}
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[txId:%s]", method, txId)
} else if blockHash != "" {
method = syscontract.ChainQueryFunction_GET_BLOCK_HEIGHT_BY_HASH.String()
pairs = []*common.KeyValuePair{
{
Key: utils.KeyBlockContractBlockHash,
Value: []byte(blockHash),
},
}
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[blockHash:%s]", method, blockHash)
} else {
method = syscontract.ChainQueryFunction_GET_ARCHIVED_BLOCK_HEIGHT.String()
pairs = []*common.KeyValuePair{}
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]", method)
}
payload := cc.CreatePayload("", txType, contractName, method, pairs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return 0, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return 0, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockHeight, err := strconv.ParseUint(string(resp.ContractResult.Result), 10, 64)
if err != nil {
return 0, fmt.Errorf("%s, parse block height failed, %s", payload.TxType, err)
}
return blockHeight, nil
}
func (cc *ChainClient) GetLastBlock(withRWSet bool) (*common.BlockInfo, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[withRWSet:%t]",
syscontract.ChainQueryFunction_GET_LAST_BLOCK, withRWSet)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_LAST_BLOCK.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractWithRWSet,
Value: []byte(strconv.FormatBool(withRWSet)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockInfo := &common.BlockInfo{}
if err = proto.Unmarshal(resp.ContractResult.Result, blockInfo); err != nil {
return nil, fmt.Errorf("GetLastBlock unmarshal block info payload failed, %s", err)
}
return blockInfo, nil
}
func (cc *ChainClient) GetCurrentBlockHeight() (uint64, error) {
block, err := cc.GetLastBlock(false)
if err != nil {
return 0, err
}
return block.Block.Header.BlockHeight, nil
}
func (cc *ChainClient) GetBlockHeaderByHeight(blockHeight uint64) (*common.BlockHeader, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[blockHeight:%d]",
syscontract.ChainQueryFunction_GET_BLOCK_HEADER_BY_HEIGHT, blockHeight)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_BLOCK_HEADER_BY_HEIGHT.String(), []*common.KeyValuePair{
{
Key: utils.KeyBlockContractBlockHeight,
Value: []byte(strconv.FormatUint(blockHeight, 10)),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
blockHeader := &common.BlockHeader{}
if err = proto.Unmarshal(resp.ContractResult.Result, blockHeader); err != nil {
return nil, fmt.Errorf("GetBlockHeaderByHeight unmarshal block header payload failed, %s", err)
}
return blockHeader, nil
}
func (cc *ChainClient) InvokeSystemContract(contractName, method, txId string, kvs []*common.KeyValuePair,
timeout int64, withSyncResult bool) (*common.TxResponse, error) {
cc.logger.Debugf("[SDK] begin to INVOKE system contract, [contractName:%s]/[method:%s]/[txId:%s]/[params:%+v]",
contractName, method, txId, kvs)
payload := cc.CreatePayload(txId, common.TxType_INVOKE_CONTRACT, contractName, method, kvs, defaultSeq, nil)
return cc.sendContractRequest(payload, nil, timeout, withSyncResult)
}
func (cc *ChainClient) QuerySystemContract(contractName, method string, kvs []*common.KeyValuePair,
timeout int64) (*common.TxResponse, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [contractName:%s]/[method:%s]/[params:%+v]",
contractName, method, kvs)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, contractName, method, kvs, defaultSeq, nil)
resp, err := cc.proposalRequestWithTimeout(payload, nil, timeout)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
return resp, nil
}
func (cc *ChainClient) GetMerklePathByTxId(txId string) ([]byte, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]/[txId:%s]",
syscontract.ChainQueryFunction_GET_MERKLE_PATH_BY_TX_ID, txId)
kvs := []*common.KeyValuePair{
{
Key: utils.KeyBlockContractTxId,
Value: []byte(txId),
},
}
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CHAIN_QUERY.String(),
syscontract.ChainQueryFunction_GET_MERKLE_PATH_BY_TX_ID.String(), kvs, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
return resp.ContractResult.Result, nil
}
func (cc *ChainClient) createNativeContractAccessPayload(method string,
accessContractList []string) (*common.Payload, error) {
val, err := json.Marshal(accessContractList)
if err != nil {
return nil, err
}
kvs := []*common.KeyValuePair{
{
Key: syscontract.ContractAccess_NATIVE_CONTRACT_NAME.String(),
Value: val,
},
}
return cc.CreatePayload("", common.TxType_INVOKE_CONTRACT, syscontract.SystemContract_CONTRACT_MANAGE.String(),
method, kvs, defaultSeq, nil), nil
}
func (cc *ChainClient) CreateNativeContractAccessGrantPayload(grantContractList []string) (*common.Payload, error) {
return cc.createNativeContractAccessPayload(syscontract.ContractManageFunction_GRANT_CONTRACT_ACCESS.String(),
grantContractList)
}
func (cc *ChainClient) CreateNativeContractAccessRevokePayload(revokeContractList []string) (*common.Payload, error) {
return cc.createNativeContractAccessPayload(syscontract.ContractManageFunction_REVOKE_CONTRACT_ACCESS.String(),
revokeContractList)
}
func (cc *ChainClient) GetContractInfo(contractName string) (*common.Contract, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]",
syscontract.ContractQueryFunction_GET_CONTRACT_INFO)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CONTRACT_MANAGE.String(),
syscontract.ContractQueryFunction_GET_CONTRACT_INFO.String(), []*common.KeyValuePair{
{
Key: syscontract.GetContractInfo_CONTRACT_NAME.String(),
Value: []byte(contractName),
},
}, defaultSeq, nil,
)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
contract := &common.Contract{}
if err = json.Unmarshal(resp.ContractResult.Result, contract); err != nil {
return nil, fmt.Errorf("GetContractInfo unmarshal failed, %s", err)
}
return contract, nil
}
func (cc *ChainClient) GetContractList() ([]*common.Contract, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]",
syscontract.ContractQueryFunction_GET_CONTRACT_LIST)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CONTRACT_MANAGE.String(),
syscontract.ContractQueryFunction_GET_CONTRACT_LIST.String(), nil, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
var contracts []*common.Contract
if err = json.Unmarshal(resp.ContractResult.Result, &contracts); err != nil {
return nil, fmt.Errorf("GetContractList unmarshal failed, %s", err)
}
return contracts, nil
}
func (cc *ChainClient) GetDisabledNativeContractList() ([]string, error) {
cc.logger.Debugf("[SDK] begin to QUERY system contract, [method:%s]",
syscontract.ContractQueryFunction_GET_DISABLED_CONTRACT_LIST)
payload := cc.CreatePayload("", common.TxType_QUERY_CONTRACT, syscontract.SystemContract_CONTRACT_MANAGE.String(),
syscontract.ContractQueryFunction_GET_DISABLED_CONTRACT_LIST.String(), nil, defaultSeq, nil)
resp, err := cc.proposalRequest(payload, nil)
if err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
if err = utils.CheckProposalRequestResp(resp, true); err != nil {
return nil, fmt.Errorf(errStringFormat, payload.TxType, err)
}
var contractNames []string
if err = json.Unmarshal(resp.ContractResult.Result, &contractNames); err != nil {
return nil, fmt.Errorf("GetDisabledNativeContractList unmarshal failed, %s", err)
}
return contractNames, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jsharkc/chainmake-sdk-go.git
git@gitee.com:jsharkc/chainmake-sdk-go.git
jsharkc
chainmake-sdk-go
chainmake-sdk-go
cc4b8672c46d

搜索帮助