有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
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)