
# 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();    | 功能：返回当前迭代位置（某笔交易）的时间戳 入参：无       |
   
