合约 API 列表

最近更新时间:2026-04-21 14:13:02

我的收藏
ChainMaker Go 语言版本智能合约有丰富的 API 接口,供用户在撰写智能合约的时候与链进行交互,代码实现详情请参见 API 接口代码实现
从逻辑方面划分,可将 API 划分为以下类型:

交易信息提取

接口
说明
Sender() (string, error)
获取交易发起者地址,如果是上层合约,则是上层合约地址。在创建/升级合约中,返回的是系统合约地址,如果要获取用户地址,需要用 Origin 方法
Origin() (string, error)
获取合约原始发起者地址约创建者角色
GetCreatorOrgId() (string, error)
获取合约创建者所属组织 ID
GetCreatorRole() (string, error)
获取合约创建者角色
GetCreatorPk() (string, error)
获取合约创建者公钥
GetSenderOrgId() (string, error)
获取交易 ID
GetSenderRole() (string, error)
获取交易发起者角色
GetSenderPk() (string, error)
获取交易发起者公钥
GetTxId() (string, error)
获取交易 ID
GetTxInfo(txId string) protogo.Response
获取交易信息
GetTxTimeStamp() (string, error)
获取当前交易时间戳
GetBlockHeight() (int, error)
获取当前区块高度

账本交互

接口
说明
GetState(key string, field string) (string, error)
获取合约账户信息。该接口可从链上获取类别 “key” 下属性名为 “field” 的状态信息。
GetStateWithExists(key, field string) (string, bool, error)
获取合约账户信息。该接口可从链上获取类别 “key” 下属性名为 “field” 的状态信息,并返回是否存在。
GetStateByte(key, field string) ([]byte, error)
获取合约账户信息。该接口可从链上批量获取类别 “key” 下属性名为 “field” 的状态信息(字节数组)。
GetStateFromKey(key string) ([]byte, error)
获取合约账户信息。该接口可以从链上获取类别为 key 的状态信息。
GetStateFromKeyWithExists(key string) (string, bool, error)
获取合约账户信息。该接口可以从链上获取类别为 key 的状态信息,并返回是否存在。
GetStateFromKeyByte(key string) ([]byte, error)
获取合约账户信息。该接口可以从链上获取类别为 key 的状态信息(字节数组)。
GetBatchState(batchKeys []*vmPb.BatchKey) ([]*vmPb.BatchKey, error)
获取合约账户信息。该接口可从链上批量获取类别 “key” 下属性名为 “field” 的状态信息。
PutState(key string, field string, value string) error
写入合约账户信息。该接口可把类别 “key” 下属性名为 “field” 的状态更新到链上。更新成功返回0,失败则返回1。
PutStateByte(key, field string, value []byte) error
写入合约账户信息。该接口可把类别 “key” 下属性名为 “field” 的状态更新到链上(字节数组)。更新成功返回0,失败则返回1。
PutStateFromKey(key string, value string) error
写入合约账户信息。
PutStateFromKeyByte(key string, value []byte) error
写入合约账户信息(字节数组)。
DelState(key string, field string) error
删除合约账户信息。该接口可把类别 “key” 下属性名为 “field” 的状态从链上删除。
DelStateFromKey(key string) error
删除合约账户信息。
CallContract(contractName, method string, args map[string][]byte) protogo.Response
跨合约调用。

参数处理

接口
说明
GetArgs() map[string][]byte
该接口将解析出的参数返还给用户。

其他辅助类

接口
说明
Log(message string)
该接口可记录事件日志。
EmitEvent(topic string, data []string)
发送合约事件
NewIterator(startKey string, limitKey string) (ResultSetKV, error)
新建 key 范围迭代器,key 前闭后开,即:startKey <= dbkey < limitKey
NewIteratorWithField(key string, startField string, limitField string) (ResultSetKV, error)
新建 field 范围迭代器,key 需相同,field 前闭后开,即:key = dbdbkey and startField <= dbfield < limitField
NewIteratorPrefixWithKey(key string) (ResultSetKV, error)
新建指定 key 前缀匹配迭代器,key 需前缀一致,即 dbkey.startWith(key)
NewIteratorPrefixWithKeyField(key string, field string) (ResultSetKV, error)
新建指定 field 前缀匹配迭代器,key 需相同,field 前缀一致,即 dbkey = key and dbfield.startWith(field)
NewHistoryKvIterForKey(key, field string) (KeyHistoryKvIter, error)
新建指定 field 历史前缀匹配迭代器,key 需相同,field 前缀一致,即dbkey = key and dbfield.startWith(field)