
# SDK接口
合约SDK提供如下API接口，可以在合约文件中进行调用。这些API按照功能可以划分为：
表1**stub接口** 
| 接口                        | 说明                    |
|:---|:---|
| FuncName() string         | 获取智能合约请求中指定的智能合约函数名称。 |
| Parameters() \[\]\[\]byte | 获取请求参数。               |
| ChainID() string          | 获取智能合约所在链ID。          |
| ContractName() string     | 获取智能合约名称。             |
| TxTimestamp() time.Time   | 获取本次交易的时间戳。           |
   
表2**ContractStub接口** 
| 接口                                                                                 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|
| GetKV(key string) (\[\]byte, error)                                                | 功能：获取状态数据库中某个key对应的value。 入参：某个键值对的key信息，不可为空。 返回值：返回\[\]byte类型的value值；当key不存在时，value为nil。 error：当网络出错，状态数据库出错，返回error信息。                                                                                                               |
| PutKV(key string, value \[\]byte) error                                            | 功能：写状态数据库操作，将key、value形成写集，打包到交易中，当交易排序、出块、并校验通过之后，将key/value写入到状态数据库中。入参：要写入的键值对要求key != ""，并且value != nil。 error：入参错误。                                                                                                                                                                                                                                             |
| PutKVCommon(key string, value interface{}) error                                   | 功能：写状态数据库操作，与PutKV功能相同；与PutKV接口的不同之处在于 value不是\[\]byte类型，而是一个实现了Marshal(v interface{}) (\[\]byte, error)接口的数据，接口内部，会将value通过Marshal接口序列化，然后再形成写集。 入参：要写入的键值对，要求key != ""，并且value实现了Marshal接口，可以序列化为\[\]byte。 error：入参错误。                                                                           |
| DelKV(key string) error                                                            | 功能：删除状态数据库中的key及其对应的value，此接口只是将待删除的key放入写集，打包到交易中，当交易排序、出块、并校验通过之后，将key删除。 入参：要删除的key要求key != ""。 error：入参错误。                                                                                                                                                                                         |
| GetIterator(startKey, endKey string) (Iterator, error)                             | 功能：查询状态数据库中，按字典序，以startKey开头，以endKey结尾的所有状态数据，结果以迭代器的形式呈现；查询范围是左闭右开的，\[startKey, endKey)。 入参：startKey是待查询状态数据的按字典序的起始key，startKey != ""，endKey是待查询的状态数据的按字典序的结束key，endKey!= ""。 返回值：Iterator是查询结果的迭代器，可以通过此迭代器，按顺序读取查询结果。 error：入参或网络错误。 |
| GetKeyHistoryIterator(key string) (HistoryIterator, error)                         | 功能：查询一个key对应的所有历史的value 入参：key是待查询历史value值的key信息，key != ""。 返回值：HistoryIterator是按顺序返回包含历史value结果的迭代器结构体变量。 error：入参或网络错误。                                                                                                              |
| SaveComIndex(indexName string, attributes \[\]string, objectKey string) error      | 功能：为objectKey保存索引信息，indexName_attributes_objectKey构成索引信息，注意，此处只是形成索引信息的写集，只有当含有此写集的交易经过排序、出块，并校验通过后，才会写入状态数据库。 入参：indexName 索引标记，indexName != ""，attributes需要当做索引的属性，至少包含一个属性信息，objectKey 待索引的key值，objectKey != ""。 error：入参错误。                                                                      |
| GetKVByComIndex(indexName string, attributes \[\]string) (Iterator, error)         | 功能：通过索引信息，查找满足某种查询条件的key/value，key/value以迭代器的形式输出。 入参：indexName 索引标记，indexName != ""，attributes需要当做索引的属性，至少包含一个属性信息 返回值：满足索引条件的key/value的迭代器变量。 error：入参或网络错误。                                                                          |
| DelComIndexOneRow(indexName string, attributes \[\]string, objectKey string) error | 功能：删除objectKey的某个索引，indexName_attributes_objectKey构成索引信息，注意，此处只是形成索引信息的写集，只有当含有此写集的交易经过排序、出块，并校验通过后，才会写入状态数据库。 入参：indexName 索引标记，indexName != ""，attributes需要当做索引的属性，至少包含一个属性信息，objectKey 待索引的key值，objectKey != ""。 error：入参错误。                                                                      |
| SplitComKey(comKey string) (string, \[\]string, error)                             | 功能：将查询到的复合键分离为objectkey和对应的attributes。 返回值：objectkey，和attributes字符串数组。                                                                                                                                                                                                                                                                                                 |
| GetKVByPartialComKey(objectType string, attributes \[\]string) (Iterator, error)   | 功能：部分复合键查询。 返回值：Iterator包含查询返回信息，支持迭代获取。                                                                                                                                                                                                                                                                                                                                |
   
表3**HistoryIterator迭代器接口** 
| 接口                        | 说明                                |
|:---|:---|
| Version() (uint64, int32) | 获取当前迭代位置（某笔交易）的 BlockNum 和 TxNum。 |
| TxHash() \[\]byte         | 获取当前迭代位置（某笔交易）的hash。              |
| IsDeleted() bool          | 被查询的key，当前是否已经在状态数据库中被删除。         |
| Timestamp() uint64        | 返回当前迭代位置（某笔交易）的时间戳。               |
   
