ChainMaker Nodejs SDK 接口说明
概述
SDK是业务模块与长安链交互的桥梁,支持双向TLS认证,提供安全可靠的加密通信信道。
提供的接口,覆盖合约管理、链配置管理、证书管理、多签收集、各类查询操作、事件订阅、数据归档等场景,满足了不同的业务场景需要。
约定概念
- Node(节点):代表一个链节点的基本信息,包括:节点地址、连接数、是否启用- TLS认证等信息
- ChainClient(链客户端):所有客户端对链节点的操作接口都来自- ChainClient
- 压缩证书:可以为 - ChainClient开启证书压缩功能,开启后可以减小交易包大小,提升处理性能
1 用户合约接口
1.1 创建合约待签名payload生成
类名
- userContractMgr 
参数说明
类型:k-v Object对象
- contractName: 合约名(string) 
- contractVersion: 版本号(string) 
- runtimeType: 合约运行环境(number) 
- contractFilePath: 合约二进制文件路径(string) 
- params: 合约初始化参数,(k-v Object对象) 
	createContractCreatePayload({ contractName, contractVersion, runtimeType, contractFilePath, params })
1.2 升级合约待签名payload生成
类名
- userContractMgr 
参数说明
类型:k-v Object对象
- contractName: 合约名(string) 
- contractVersion: 版本号(string) 
- runtimeType: 合约运行环境(number) 
- contractFilePath: 合约二进制文件路径(string) 
- params: 合约升级参数,(k-v Object对象) 
	createContractUpgradePayload({ contractName, contractVersion, runtimeType, contractFilePath, params })
1.3 冻结合约payload生成
类名
- userContractMgr 
参数说明
类型:k-v Object对象
- contractName: 合约名(string) 
	createContractFreezePayload({ contractName })
1.4 解冻合约payload生成
类名
- userContractMgr 
参数说明
类型:k-v Object对象
- contractName: 合约名(string) 
	createContractUnfreezePayload({ contractName })
1.5 吊销合约payload生成
类名
- userContractMgr 
参数说明
类型:k-v Object对象
- contractName: 合约名(string) 
	createContractRevokePayload({ contractName })
1.6 合约管理获取Payload签名
类名
- userContractMgr 
参数说明
- payload: 待签名payload 
- userInfoList: 需要签名的用户列表(array[class UserInfo]) 
	signContractManagePayload(payload, userInfoList)
1.7 合约管理Payload签名收集&合并
类名
- userContractMgr 
参数说明
- signedPayloadBytesArray: 已签名payload列表(array[payloadBytes]) 
	mergeContractManageSignedPayload(signedPayloadBytesArray)
1.8 发送合约管理请求(创建、更新、冻结、解冻、吊销)
类名
- userContractMgr 
参数说明
- mergedPayload: 多签结果 
	async sendContractManageRequest(mergedPayload)
1.9 合约调用
类名
- callUserContract 
参数说明
类型:k-v Object对象
- contractName: 合约名称(string) 
- method: 合约方法(string) 
- params: 合约参数(k-v Object对象) 
	async invokeUserContract({ contractName, method, params })
1.10 合约查询接口调用
类名
- callUserContract 
参数说明
类型:k-v Object对象
- contractName: 合约名称(string) 
- method: 合约方法(string) 
- params: 合约参数(k-v Object对象) 
	async queryContract({ contractName, method, params })
1.11 构造待发送交易体
类名
- callUserContract 
参数说明
- contractName: 合约名称(string) 
- method: 合约方法(string) 
- params: 合约参数(k-v Object对象) 
	getTxRequest(contractName, method, params)
1.12 发送已构造好的交易体
类名
- callUserContract 
参数说明
- request: 已构造好的交易体 
- txId: getTxRequest方法的返回值 
	async sendTxRequest(request, txId)
2 系统合约接口
2.1 根据交易Id查询交易
类名
- callSystemContract 
参数说明
- txId: 交易ID(string) 
  async getTxByTxId(txId)
2.2 根据区块高度查询区块
类名
- callSystemContract 
参数说明
- blockHeight: 区块高度,若为-1,将返回最新区块(number) 
- withRWSet: 是否返回读写集(boolean) 
  async getBlockByHeight(blockHeight, withRWSet)
2.3 根据区块哈希查询区块
类名
- callSystemContract 
参数说明
- blockHash: 区块哈希(string) 
- withRWSet: 是否返回读写集(boolean) 
  async getBlockByHash(blockHash, withRWSet)
2.4 根据交易Id查询区块
类名
- callSystemContract 
参数说明
- txId: 交易ID(string) 
- withRWSet: 是否返回读写集(boolean) 
  async getBlockByTxId(txId, withRWSet)
2.5 查询最新的配置块
类名
- callSystemContract 
参数说明
- withRWSet: 是否返回读写集(boolean) 
  async getLastConfigBlock(withRWSet)
2.6 查询节点加入的链信息
类名
- callSystemContract 
参数说明
- nodeAddr: 节点地址,如127.0.0.1(string) 
  async getNodeChainList(nodeAddr)
2.7 查询链信息
类名
- callSystemContract 
参数说明
- 包括:当前链最新高度,链节点信息 
  async getChainInfo()
2.8 根据交易Id获取区块高度
类名
- callSystemContract 
参数说明
- txId: 交易ID(string) 
  async getBlockHeightByTxId(txId)
2.9 根据区块Hash获取区块高度
类名
- callSystemContract 
参数说明
- blockHash: 区块哈希(string) 
  async getBlockHeightByHash(blockHash)
2.10 查询当前最新区块高度
类名
- callSystemContract 
参数说明
- 返回当前最新区块高度 
  async getCurrentBlockHeight()
2.11 根据区块高度查询区块头
类名
- callSystemContract 
参数说明
- blockHeight: 区块高度(number) 
  async getBlockHeaderByHeight(blockHeight)
2.12 查询最新区块
类名
- callSystemContract 
参数说明
- withRWSet: 是否返回读写集(boolean) 
  async getLastBlock(withRWSet)
2.13 根据区块高度查询完整区块
类名
- callSystemContract 
参数说明
- blockHeight: 区块高度(number) 
  async getFullBlockByHeight(blockHeight)
3 链配置接口
3.1 查询最新链配置
类名
- chainConfig 
  async getChainConfig()
3.2 根据指定区块高度查询最近链配置
类名
- chainConfig 
参数说明
- blockHeight: 区块高度(number) 
  async getChainConfigByBlockHeight(blockHeight)
3.3 查询最新链配置序号Sequence
类名
- chainConfig 
  async getChainConfigSequence()
3.4 链配置更新获取Payload签名
类名
- chainConfig 
参数说明
类型:k-v Object对象
- payload: 待签名payload 
- userInfo: 需要签名的用户(class UserInfo) 
  signChainConfigPayload(payload, userInfo)
3.5 链配置更新Payload签名收集&合并
类名
- chainConfig 
参数说明
- signedPayloadBytesArray: 签名之后的payload bytes数组(Array[payloadBytes]) 
  mergeChainConfigSignedPayload(signedPayloadBytesArray)
3.6 发送链配置更新请求
类名
- chainConfig 
参数说明
- signPayloadBytes: 签名之后的payload bytes 
  async sendChainConfigUpdateRequest(signPayloadBytes)
3.7 更新Block模块待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- txTimestampVerify: 是否需要开启交易时间戳校验(boolean) 
- (以下参数,若无需修改,请置为-1) 
- txTimeout: 交易时间戳的过期时间(秒),其值范围为 - [600, +∞)(number)
- blockTxCapacity: 区块中最大交易数,其值范围为 - (0, +∞](number)
- blockSize: 区块最大限制,单位MB,其值范围为 - (0, +∞](number)
- blockInterval: 出块间隔,单位:ms,其值范围为 - [10, +∞](number)
  async createChainConfigBlockUpdatePayload({txTimestampVerify, txTimeout = -1, blockTxCapacity = -1, blockSize = -1, blockInterval = -1, userInfoList})
3.8 更新Core模块待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- txSchedulerTimeout: 交易调度器从交易池拿到交易后, 进行调度的时间,其值范围为 - [0, 60],若无需修改,请置为-1(number)
- txSchedulerValidateTimeout: 交易调度器从区块中拿到交易后, 进行验证的超时时间,其值范围为 - [0, 60],若无需修改,请置为-1(number)
  async ceateChainConfigCoreUpdatePayload({txSchedulerTimeout = -1, txSchedulerValidateTimeout = -1,  userInfoList,})
3.9 添加信任组织根证书待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- orgId: 组织Id(string) 
- root: 根证书(string) 
  async createChainConfigTrustRootAddPayload({ orgId, root })
3.10 更新信任组织根证书待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- orgId: 组织Id(string) 
- root: 根证书(string) 
  async createChainConfigTrustRootUpdatePayload({ orgId, root })
3.11 删除信任组织根证书待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- orgId: 组织Id(string) 
  async createChainConfigTrustRootDeletePayload({ orgId })
3.12 添加权限配置待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- permissionResourceName: 权限名(string) 
- rule: 权限内容(string) 
- orgList: 组织列表(Array[string]) 
- roleList: 权限列表(Array[string]) 
  async createChainConfigPermissionAddPayload({ permissionResourceName, rule,  orgList = [], roleList = [] })
3.13 更新权限配置待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- permissionResourceName: 权限名(string) 
- rule: 权限内容(string) 
- orgList: 组织列表(Array[string]) 
- roleList: 权限列表(Array[string]) 
  async createChainConfigPermissionUpdatePayload({ permissionResourceName, rule,  orgList, roleList })
3.14 删除权限配置待签名payload生成
类名
- chainConfig 
参数说明
类型:k-v Object对象
- permissionResourceName: 权限名(string) 
  async createChainConfigPermissionDeletePayload({ permissionResourceName })
3.15 添加共识节点地址待签名payload生成
类名
- chainConfig 
参数说明
- orgId: 节点组织Id(string) 
- nodeIds: 节点Id数组(Array[string]) 
  async createChainConfigConsensusNodeIdAddPayload(orgId, nodeIds)
3.16 更新共识节点地址待签名payload生成
类名
- chainConfig 
参数说明
- orgId: 节点组织Id(string) 
- nodeId: 旧节点Id(string) 
- newNodeId: 新节点Id(string) 
  async createChainConfigConsensusNodeIdUpdatePayload(orgId, nodeId, newNodeId)
3.17 删除共识节点地址待签名payload生成
类名
- chainConfig 
参数说明
- orgId: 节点组织Id(string) 
- nodeId: 节点Id(string) 
  async createChainConfigConsensusNodeIdDeletePayload(orgId, nodeId)
3.18 添加共识节点待签名payload生成
类名
- chainConfig 
参数说明
- orgId: 节点组织Id(string) 
- nodeIds: 节点Id数组(Array[string]) 
  async createChainConfigConsensusNodeOrgAddPayload(orgId, nodeIds)
3.19 更新共识节点待签名payload生成
类名
- chainConfig 
参数说明
- orgId: 节点组织Id(string) 
- nodeIds: 节点Id数组(Array[string]) 
  async createChainConfigConsensusNodeOrgUpdatePayload(orgId, nodeIds)
3.20 删除共识节点待签名payload生成
类名
- chainConfig 
参数说明
- orgId: 节点组织Id(string) 
  async createChainConfigConsensusNodeOrgDeletePayload(orgId)
3.21 添加共识扩展字段待签名payload生成
类名
- chainConfig 
参数说明
- kvs: 字段key、value对(k-v Object对象) 
  async createChainConfigConsensusExtAddPayload(kvs)
3.22 添加共识扩展字段待签名payload生成
类名
- chainConfig 
参数说明
- kvs: 字段key、value对(k-v Object对象) 
  async createChainConfigConsensusExtUpdatePayload(kvs)
3.23 添加共识扩展字段待签名payload生成
类名
- chainConfig 
参数说明
- keys: 字段key数组(Array[string]) 
  async createChainConfigConsensusExtDeletePayload(keys)
4 证书管理接口
4.1 用户证书添加
类名
- certMgr 
参数说明
- 在response.ContractResult.Result字段中返回成功添加的certHash 
  async addCert()
4.2 用户证书删除
类名
- certMgr 
参数说明
- certHashes: 证书Hash列表(Array[string]) 
  async deleteCert(certHashes)
4.3 用户证书查询
类名
- certMgr 
参数说明
- certHashes: 证书Hash列表(Array[string]) 
  async queryCert(certHashes)
4.4 获取用户证书哈希
类名
- certMgr 
参数说明
  async getCertHash()
4.5 生成证书管理操作Payload(三合一接口)
类名
- certMgr 
参数说明
- method: CERTS_FROZEN(证书冻结)/CERTS_UNFROZEN(证书解冻)/CERTS_REVOCATION(证书吊销) 
- params: 证书管理操作参数 
  async createCertManagePayload(method, params)
4.6 生成证书冻结操作Payload
类名
- certMgr 
参数说明
- certs: 证书列表(Array[string]) 
  async createCertManageFrozenPayload(certs)
4.7 生成证书解冻操作Payload
类名
- certMgr 
参数说明
- certs: 证书列表(Array[string]) 
  async createCertManageUnfrozenPayload(certs)
4.8 生成证书吊销操作Payload
类名
- certMgr 
参数说明
- certCrl: 吊销证书的crl(string) 
  async createCertManageRevocationPayload(certCrl)
4.9 待签payload签名
类名
- certMgr 
参数说明
- payload: 待签名payload 
  signCertManagePayload(payload)
4.10 证书管理Payload签名收集&合并
类名
- certMgr 
参数说明
- signedPayloadBytesArray: 签名之后的payload bytes数组(Array[payloadBytes]) 
  mergeCertManageSignedPayload(signedPayloadBytesArray)
4.11 发送证书管理请求(证书冻结、解冻、吊销)
类名
- certMgr 
参数说明
- payloadBytes: 签名之后的payload bytes 
  async sendCertManageRequest(payloadBytes)
5 消息订阅接口
5.1 区块订阅
类名
- subscribe 
参数说明
- startBlock: 订阅起始区块高度,若为-1,表示订阅实时最新区块(number) 
- endBlock: 订阅结束区块高度,若为-1,表示订阅实时最新区块(number) 
- withRwSet: 是否返回读写集(boolean) 
- callBack: 回调函数,第一个参数是监听到的的block区块,第二个参数是错误信息 
  subscribeBlock(startBlock, endBlock, withRwSet, callBack)
5.2 交易订阅
类名
- subscribe 
参数说明
- startBlock: 订阅起始区块高度,若为-1,表示订阅实时最新区块(number) 
- endBlock: 订阅结束区块高度,若为-1,表示订阅实时最新区块(number) 
- txType: 订阅交易类型,若为common.TxType(-1),表示订阅所有交易类型(number) 
- txIds: 订阅txId列表,若为空(null),表示订阅所有txId(Array[string]) 
- callBack: 回调函数,第一个参数是监听到的交易,第二个参数是错误信息 
  subscribeTx(startBlock, endBlock, txType, txIds, callBack)
5.3 合约事件订阅
类名
- subscribe 
参数说明
- topic: 订阅的主题(string) 
- contractName: 智能合约名称(string) 
- callBack: 回调函数,第一个参数是监听到的合约事件,第二个参数是错误信息 
  subscribeContractEvent(topic, contractName, callBack)
5.4 多合一订阅
类名
- subscribe 
参数说明
- txType: 订阅交易类型,目前已支持:区块消息订阅(common.TxType_SUBSCRIBE_BLOCK_INFO)、交易消息订阅(common.TxType_SUBSCRIBE_TX_INFO)、合约事件订阅(common.TxType.CONTRACT_EVENT_INFO) 
- payloadBytes: 消息订阅参数payload 
- callBack: 回调函数,第一个参数是监听到的事件返回,第二个参数是错误信息 
  subscribe(payloadBytes, txType, callBack)
6 证书压缩
开启证书压缩可以减小交易包大小,提升处理性能
6.1 启用压缩证书功能
类名
- certCompression 
参数说明
  async enableCertHash()
6.2 停用压缩证书功能
类名
- certCompression 
参数说明
  async disableCertHash()
7 工具类
7.1 将EasyCodec编码解码成map
类名
- easyCodec 
	easyCodecItemToParamsMap(easyCodecObj)
8 数据归档
8.1 获取已归档区块高度
类名
- callSystemContract 
参数说明
  async getArchivedBlockHeight()
8.2 构造数据归档区块Payload
类名
- archive 
参数说明
- targetBlockHeight: 目标区块高度(number) 
  createArchiveBlockPayload(targetBlockHeight)
8.3 构造归档归档数据恢复Payload
类名
- archive 
参数说明
- fullBlock: 完整区块的bytes 
  createRestoreBlockPayload(fullBlock)
8.4 获取归档操作Payload签名
类名
- archive 
参数说明
- payloadBytes: 待签名payloadBytes 
  signArchivePayload(payloadBytes)
8.5 发送归档请求
类名
- archive 
参数说明
- mergeSignedPayloadBytes: 签名之后的payloadBytes 
  async sendArchiveBlockRequest(mergeSignedPayloadBytes)
8.6 归档数据恢复
类名
- archive 
参数说明
- fullBlock: 完整区块的bytes 
  async restoreBlock(fullBlock)
8.7 根据交易Id查询已归档交易
类名
- archive 
参数说明
- txId: 交易Id(string) 
  async getArchivedTxByTxId(txId)
8.8 根据区块高度查询已归档区块
类名
- archive 
参数说明
- blockHeight: 区块高度(number) 
- withRWSet: 是否返回读写集(boolean) 
  async getArchivedBlockByHeight(blockHeight, withRWSet)
8.9 根据区块高度查询已归档完整区块(包含:区块数据、读写集、合约事件日志)
类名
- archive 
参数说明
- blockHeight: 区块高度(number) 
  async getArchivedFullBlockByHeight(blockHeight)
8.10 根据区块哈希查询已归档区块
类名
- archive 
参数说明
- hash: 区块哈希(string) 
- withRWSet: 是否返回读写集(boolean) 
  async getArchivedBlockByHash(hash, withRWSet)
8.11 根据交易Id查询已归档区块
类名
- archive 
参数说明
- txId: 交易Id(string) 
- withRWSet: 是否返回读写集(boolean) 
  async getArchivedBlockByTxId(txId, withRWSet)
9 系统类接口
9.1 SDK停止接口
关闭连接池连接,释放资源
	stop()
10 类构造函数
10.1 UserContract
参数说明
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
	constructor(chainID, userInfo, node)
10.2 CallUserContract
参数说明
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
	constructor(chainID, userInfo, node)
10.3 CallSystemContract
参数说明
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
	constructor(chainID, userInfo, node)
10.4 ChainConfig
参数说明
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
	constructor(chainID, userInfo, node)
10.5 CertMgr
参数说明
- chainConfig: ChainConfig类(class ChainConfig) 
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
	constructor(chainConfig, chainID, userInfo, node)
10.6 Subscribe
参数说明
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
	constructor(chainID, userInfo, node)
10.7 EasyCodec
	constructor()
10.8 Archive
参数说明
- chainID: chainId(string) 
- userInfo: 用户类(calss UserInfo) 
- node: 节点类(class node) 
- callSystemContract: 系统合约调用类(class callSystemContract) 
数据库参数,类型:k-v Object对象
- type: 数据库类型,目前只支持mysql,默认为mysql,无需设置 
- dbHost: 数据库地址 
- dbPort: 数据库端口 
- dbUsername: 数据库用户名 
- dbPassword: 数据库密码 
	constructor(chainID, userInfo, node, callSystemContract, { type = 'mysql', dbHost, dbPort, dbUsername, dbPassword })
10.9 UserInfo
参数说明
- orgID: 组织ID 
- userSignKeyPath: 用户私钥路径 
- userSignCertPath: 用户证书路径 
	constructor(orgID, userSignKeyPath, userSignCertPath)
10.10 Node
参数说明
- requestTimeout: 延时,单位ms,默认3000 
节点配置参数nodeConfigArray,类型:k-v Object数组(Array[Object])
- nodeAddr: 节点地址,ip+端口(string) 
- tlsEnable: 是否开启tls(boolean) 
- options: 类型k-v Object(pem: 根ca证书Buffer, clientKey: 客户端私钥Buffer, clientCert: 客户端证书Buffer, ssl-target-name-override: 节点域名,对应证书中的sans字段) 
	constructor(nodeConfigArray, requestTimeout)
10.11 Sdk
参数说明
- chainID: chainId(string) 
- orgID: 组织ID 
- userSignKeyPath: 用户私钥路径 
- userSignCertPath: 用户证书路径 
- nodeConfigArray: 参考10.6nodeConfigArray 
- timeout: 延时,单位ms 
- archiveConfig: 参考10.8数据库参数 
	constructor(chainID, orgID, userSignKeyPath, userSignCertPath, nodeConfigArray, timeout, archiveConfig = {})