区块链服务 BCS-SDK接口

时间:2024-07-01 09:12:15

SDK接口

表1 ContractStub合约信息&状态数据库访问接口

接口

说明

String funcName()

功能:获取智能合约请求中指定的智能合约函数名称

入参:无

返回值:智能合约函数名称

byte[][] parameters()

功能: 获取请求参数

入参:无

返回值:用户执行智能合约逻辑时传入的多个参数,每个参数以[]byte表示

String chainId()

功能:获取智能合约所在链ID

入参:无

返回值:链ID

String contractName()

功能:获取智能合约名称

入参:无

返回值:智能合约名称

byte[] getKv(String key) throws ContractException

功能:获取状态数据库中某个key对应的value;

入参:某个键值对的key信息,只支持string类型,不可为空

返回值:value值,目前只支持[]byte类型;当key不存在时,value为null

抛出异常:当网络出错,消息超时等,抛出异常

void putKv(String key, byte[] value) throws ContractException

功能:写状态数据库操作,此接口只是将key、value形成写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key/value写入到状态数据库中

入参:要写入的键值对,要求key != "",并且value != null

抛出异常:当网络出错,消息超时等,抛出异常

void delKv(String key) throws ContractException

功能:删除状态数据库中的key及其对应的value,此接口只是将待删除的key放入写集,打包到交易中,只有当交易排序、出块、并校验通过之后,才会将key删除

入参:要删除的key,要求key != ""

抛出异常:当网络出错,消息超时等,抛出异常

Iterator getIterator(String startKey, String endKey) throws ContractException

功能:查询状态数据库中,按字典序,以startKey开头,以endKey结尾的所有状态数据,结果以迭代器的形式呈现;注意,查询范围是左闭右开的,[startKey, endKey)

例如:startKey="11",endKey="14",所有key都是整数的话,则查询的结果中,key值包括:"11","12","13",不包括"14"

入参:startKey是待查询状态数据的按字典序的起始key,startKey != "",endKey是待查询的状态数据的按字典序的结束key,endKey!= "";

返回值:Iterator是查询结果的迭代器,可以通过此迭代器,按顺序读取查询结果

抛出异常:当网络出错,消息超时等,抛出异常

HistoryIterator getKeyHistoryIterator(String key) throws ContractException

功能:查询一个key对应的所有历史的value

例如:一个key的value曾经为1,2,3,当前value为4,则返回的迭代器结果中按顺序包含了1,2,3,4

入参:key是待查询历史value值的key信息,key != ""

返回值:HistoryIterator是按顺序包含了历史value结果的迭代器结构体变量

抛出异常:当网络出错,消息超时等,抛出异常

void saveComIndex(String indexName, String[] attributes, String objectKey) throws ContractException

功能:为objectKey保存索引信息,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库

例如:存储key/value信息,key="zhangsan",value={height=175, sex="male"},如果以sex="male"作为查询条件,查询所有的key/value,

则需要反序列化所有的value,性能损耗较大,因此,为当前key/value建立一个sex相关的索引:indexName="sex",attributes=[]string{"male"},objectKey="zhangsan,

入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != ""

抛出异常:当网络出错,消息超时等,抛出异常

Iterator getKvByComIndex(String indexName, String[] attributes) throws ContractException

功能:通过索引信息,查找满足某种查询条件的key/value,key/value以迭代器的形式输出

入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息

返回值:满足索引条件的key/value的迭代器变量

抛出异常:当网络出错,消息超时等,抛出异常

void delComIndexOneRow(String indexName, String[] attributes, String objectKey) throws ContractException

功能:删除objectKey的某个索引,indexName_attributes_objectKey构成索引信息,注意,此处只是形成索引信息的写集,只有当含有此写集的交易经过排序、出块,并校验通过后,才会写入状态数据库

入参:indexName 索引标记,indexName != "",attributes需要当做索引的属性,至少包含一个属性信息,objectKey 待索引的key值,objectKey != ""

抛出异常:当网络出错,消息超时等,抛出异常

表2 Iterator迭代器接口

接口

说明

boolean next() throws ContractException

功能:检查迭代器中是否还有下一个key/value

入参:无

返回值:bool值,true代表还有下一个值

抛出异常:当网络出错,消息超时等,抛出异常

String key() throws ContractException

功能:从迭代器中获取key

入参:无

返回值:key值

抛出异常:当网络出错,消息超时等,抛出异常

byte[] value() throws ContractException

功能:从迭代器中获取value

入参:无

返回值:value值类型为字节数组

抛出异常:当网络出错,消息超时等,抛出异常

void close()

功能:使用完迭代器之后,需要关闭迭代器

入参:无

抛出异常:当网络出错,消息超时等,抛出异常

表3 HistoryIterator查询某个key历史value信息的迭代器接口

接口

说明

long blockNum();

功能:获取当前迭代位置(某笔交易)的 BlockNum

入参:无

int txNum();

功能:获取当前迭代位置(某笔交易)的 TxNum

入参:无

byte[] txHash();

功能:获取当前迭代位置((某笔交易))的hash

入参:无

boolean isDeleted();

功能:被查询的key,当前是否已经在状态数据库中被删除

入参:无

long timestamp();

功能:返回当前迭代位置(某笔交易)的时间戳

入参:无

support.huaweicloud.com/devg-bcs/bcs_devg_01_066.html