ChainMaker Go (TinyGo) 语言版本智能合约有丰富的 API 接口,供用户在撰写智能合约的时候与链进行交互,代码实现详情可参见 API 接口代码实现。
从逻辑方面划分,可将 API 划分为以下类型:
接口 |
说明 |
GetCreatorOrgId() (string, ResultCode) |
获取合约创建者所属组织 ID |
GetCreatorRole() (string, ResultCode) |
获取合约创建者角色 |
GetCreatorPk() (string, ResultCode) |
获取合约创建者公钥 |
GetSenderOrgId() (string, ResultCode) |
获取交易发起者所属组织 ID |
GetSenderRole() (string, ResultCode) |
获取交易发起者角色 |
GetTxId() (string, ResultCode) |
获取交易 ID |
GetSenderPk() (string, ResultCode) |
获取交易发起者公钥 |
GetBlockHeight() (string, ResultCode) |
获取当前区块高度 |
接口 |
说明 |
GetState(key string, field string) (string, ResultCode) |
获取合约账户信息。该接口可从链上获取类别 “key” 下属性名为 “field” 的状态信息。 |
GetStateFromKey(key string) ([]byte, ResultCode) |
获取合约账户信息。该接口可以从链上获取类别为 key 的状态信息 |
PutState(key string, field string, value string) ResultCode |
写入合约账户信息。该接口可把类别 “key” 下属性名为 “filed” 的状态更新到链上。更新成功返回 0,失败则返回 1。 |
PutStateFromKey(key string, value string) ResultCode |
写入合约账户信息。 |
DeleteState(key string, field string) ResultCode |
删除合约账户信息。该接口可把类别 “key” 下属性名为 “name” 的状态从链上删除。 |
CallContract(contractName string, method string, param map[string]string) ([]byte, ResultCode) |
跨合约调用。 |
接口 |
说明 |
Args() []*EasyCodecItem{} |
该接口调用 getArgsMap() 接口,把 json 格式的数据反序列化,并将解析出的数据返还给用户。 |
Arg(key string) (string, ResultCode) |
该接口可返回属性名为 “key” 的参数的属性值。 |
接口 |
说明 |
SuccessResult(msg string) |
该接口可记录用户操作成功的信息,并将操作结果记录到链上。 |
ErrorResult(msg string) |
该接口可记录用户操作失败的信息,并将操作结果记录到链上。 |
LogMessage(msg string) |
该接口可记录事件日志。查看方式为在链配置的 log.yml 中,开启 vm:debug 即可看到类似:gasm log>> + msg |
EmitEvent(topic string, data ...string) ResultCode |
发送合约事件 |
NewIterator(startKey string, limitKey string) (ResultSetKV, ResultCode) |
新建 key 范围迭代器,key 前闭后开,即:startKey <= dbkey < limitKey |
NewIteratorWithField(key string, startField string, limitField string) (ResultSetKV, ResultCode) |
新建 field 范围迭代器,key 需相同,field 前闭后开,即:key = dbdbkey and startField <= dbfield < limitField |
NewIteratorPrefixWithKey(key string) (ResultSetKV, ResultCode) |
新建指定 key 前缀匹配迭代器,key 需前缀一致,即 dbkey.startWith(key) |
NewIteratorPrefixWithKeyField(key string, field string) (ResultSetKV, ResultCode) |
新建指定 field 前缀匹配迭代器,key 需相同,field 前缀一致,即 dbkey = key and dbfield.startWith(field) |