合约 API 列表

最近更新时间:2022-10-17 15:06:57

我的收藏
ChainMaker Go (TinyGo) 语言版本智能合约有丰富的 API 接口,供用户在撰写智能合约的时候与链进行交互,代码实现详情可以参考API 接口代码实现
注意
当前在 v2.2.1 版本的长安链网络中,仅支持通过 TBaaS 控制台对存量 TinyGo 合约进行升级,不再支持 TinyGo 合约创建。
新用户请使用 Go(DockerGo)进行智能合约开发, Go(TinyGo)仅供老用户进行智能合约升级。
从逻辑方面划分,可将 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][]byte) ([]byte, ResultCode)
跨合约调用。

参数处理

接口
说明
Args() []*EasyCodecItem{}
该接口调用 getArgsMap() 接口,把 json 格式的数据反序列化,并将解析出的数据返还给用户。
Arg(key string) ([]byte, ResultCode)
该接口可返回属性名为 “key” 的参数的属性值(输出格式为[]byte)。
ArgString(key string) (string, ResultCode)
该接口可返回属性名为 “key” 的参数的属性值(输出格式为String)。

其他辅助类

接口
说明
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)