从逻辑方面划分,可将 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) |