# ChainMaker Nodejs SDK 鎺ュ彛璇存槑

## 姒傝堪

`SDK`鏄笟鍔℃ā鍧椾笌闀垮畨閾句氦浜掔殑妗ユ锛屾敮鎸佸弻鍚慲TLS`璁よ瘉锛屾彁渚涘畨鍏ㄥ彲闈犵殑鍔犲瘑閫氫俊淇¢亾銆�

鎻愪緵鐨勬帴鍙o紝瑕嗙洊鍚堢害绠$悊銆侀摼閰嶇疆绠$悊銆佽瘉涔︾鐞嗐€佸绛炬敹闆嗐€佸悇绫绘煡璇㈡搷浣溿€佷簨浠惰闃呫€佹暟鎹綊妗g瓑鍦烘櫙锛屾弧瓒充簡涓嶅悓鐨勪笟鍔″満鏅渶瑕併€�

## 绾﹀畾姒傚康

- **`Node`锛堣妭鐐癸級**锛氫唬琛ㄤ竴涓摼鑺傜偣鐨勫熀鏈俊鎭紝鍖呮嫭锛氳妭鐐瑰湴鍧€銆佽繛鎺ユ暟銆佹槸鍚﹀惎鐢╜TLS`璁よ瘉绛変俊鎭�
- **`ChainClient`锛堥摼瀹㈡埛绔級**锛氭墍鏈夊鎴风瀵归摼鑺傜偣鐨勬搷浣滄帴鍙i兘鏉ヨ嚜`ChainClient`
- **鍘嬬缉璇佷功**锛氬彲浠ヤ负`ChainClient`寮€鍚瘉涔﹀帇缂╁姛鑳斤紝寮€鍚悗鍙互鍑忓皬浜ゆ槗鍖呭ぇ灏忥紝鎻愬崌澶勭悊鎬ц兘
## 1 鐢ㄦ埛鍚堢害鎺ュ彛
### 1.1 鍒涘缓鍚堢害寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚�(string)
  - contractVersion: 鐗堟湰鍙�(string)
  - runtimeType: 鍚堢害杩愯鐜(number)
  - contractFilePath: 鍚堢害浜岃繘鍒舵枃浠惰矾寰�(string)
  - params: 鍚堢害鍒濆鍖栧弬鏁帮紝(k-v Object瀵硅薄)
```javascript
	createContractCreatePayload({ contractName, contractVersion, runtimeType, contractFilePath, params })
```

### 1.2 鍗囩骇鍚堢害寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚�(string)
  - contractVersion: 鐗堟湰鍙�(string)
  - runtimeType: 鍚堢害杩愯鐜(number)
  - contractFilePath: 鍚堢害浜岃繘鍒舵枃浠惰矾寰�(string)
  - params: 鍚堢害鍗囩骇鍙傛暟锛�(k-v Object瀵硅薄)
```javascript
	createContractUpgradePayload({ contractName, contractVersion, runtimeType, contractFilePath, params })
```

### 1.3 鍐荤粨鍚堢害payload鐢熸垚
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚�(string)
```javascript
	createContractFreezePayload({ contractName })
```

### 1.4 瑙e喕鍚堢害payload鐢熸垚
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚�(string)
```javascript
	createContractUnfreezePayload({ contractName })
```

### 1.5 鍚婇攢鍚堢害payload鐢熸垚
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚�(string)
```javascript
	createContractRevokePayload({ contractName })
```

### 1.6 鍚堢害绠$悊鑾峰彇Payload绛惧悕
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**
  - payload: 寰呯鍚峱ayload
  - userInfoList: 闇€瑕佺鍚嶇殑鐢ㄦ埛鍒楄〃锛坅rray[class UserInfo]锛�
```javascript
	signContractManagePayload(payload, userInfoList)
```

### 1.7 鍚堢害绠$悊Payload绛惧悕鏀堕泦&鍚堝苟
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**
  - signedPayloadBytesArray: 宸茬鍚峱ayload鍒楄〃(array[payloadBytes])
```javascript
	mergeContractManageSignedPayload(signedPayloadBytesArray)
```

### 1.8 鍙戦€佸悎绾︾鐞嗚姹傦紙鍒涘缓銆佹洿鏂般€佸喕缁撱€佽В鍐汇€佸悐閿€锛�
**绫诲悕**
  - userContractMgr

**鍙傛暟璇存槑**
  - mergedPayload: 澶氱缁撴灉
  - withSyncResult: 鏄惁鍚屾鑾峰彇缁撴灉锛坆oolean锛�
```javascript
	async sendContractManageRequest(mergedPayload, withSyncResult)
```

### 1.9 鍚堢害璋冪敤
**绫诲悕**
  - callUserContract

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚嶇О(string)
  - method: 鍚堢害鏂规硶(string)
  - params: 鍚堢害鍙傛暟(k-v Object瀵硅薄)
  - withSyncResult: 鏄惁鍚屾鑾峰彇缁撴灉锛坆oolean锛�
```javascript
	async invokeUserContract({ contractName, method, params, withSyncResult })
```

### 1.10 鍚堢害鏌ヨ鎺ュ彛璋冪敤
**绫诲悕**
  - callUserContract

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - contractName: 鍚堢害鍚嶇О(string)
  - method: 鍚堢害鏂规硶(string)
  - params: 鍚堢害鍙傛暟(k-v Object瀵硅薄)
```javascript
	async queryContract({ contractName, method, params })
```

### 1.11 鏋勯€犲緟鍙戦€佷氦鏄撲綋
**绫诲悕**
  - callUserContract

**鍙傛暟璇存槑**
  - contractName: 鍚堢害鍚嶇О(string)
  - method: 鍚堢害鏂规硶(string)
  - params: 鍚堢害鍙傛暟(k-v Object瀵硅薄)
```javascript
	getTxRequest(contractName, method, params)
```

### 1.12 鍙戦€佸凡鏋勯€犲ソ鐨勪氦鏄撲綋
**绫诲悕**
  - callUserContract

**鍙傛暟璇存槑**
  - request: 宸叉瀯閫犲ソ鐨勪氦鏄撲綋
  - txId: getTxRequest鏂规硶鐨勮繑鍥炲€�
  - withSyncResult: 鏄惁鍚屾鑾峰彇缁撴灉(boolean)
```javascript
	async sendTxRequest(request, txId, withSyncResult)
```

## 2 绯荤粺鍚堢害鎺ュ彛
### 2.1 鏍规嵁浜ゆ槗Id鏌ヨ浜ゆ槗
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - txId: 浜ゆ槗ID(string)
```javascript
  async getTxByTxId(txId)
```

### 2.2 鏍规嵁鍖哄潡楂樺害鏌ヨ鍖哄潡
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - blockHeight: 鍖哄潡楂樺害,鑻ヤ负-1锛屽皢杩斿洖鏈€鏂板尯鍧�(number)
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getBlockByHeight(blockHeight, withRWSet)
```

### 2.3 鏍规嵁鍖哄潡鍝堝笇鏌ヨ鍖哄潡
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - blockHash: 鍖哄潡鍝堝笇(string)
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getBlockByHash(blockHash, withRWSet)
```

### 2.4 鏍规嵁浜ゆ槗Id鏌ヨ鍖哄潡
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - txId: 浜ゆ槗ID(string)
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getBlockByTxId(txId, withRWSet)
```

### 2.5 鏌ヨ鏈€鏂扮殑閰嶇疆鍧�
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getLastConfigBlock(withRWSet)
```

### 2.6 鏌ヨ鑺傜偣鍔犲叆鐨勯摼淇℃伅
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - nodeAddr: 鑺傜偣鍦板潃,濡�127.0.0.1(string)
```javascript
  async getNodeChainList(nodeAddr)
```

### 2.7 鏌ヨ閾句俊鎭�
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - 鍖呮嫭锛氬綋鍓嶉摼鏈€鏂伴珮搴︼紝閾捐妭鐐逛俊鎭�
```javascript
  async getChainInfo()
```

### 2.8 鏍规嵁浜ゆ槗Id鑾峰彇鍖哄潡楂樺害
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - txId: 浜ゆ槗ID(string)
```javascript
  async getBlockHeightByTxId(txId)
```

### 2.9 鏍规嵁鍖哄潡Hash鑾峰彇鍖哄潡楂樺害
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - blockHash: 鍖哄潡鍝堝笇(string)
```javascript
  async getBlockHeightByHash(blockHash)
```

### 2.10 鏌ヨ褰撳墠鏈€鏂板尯鍧楅珮搴�
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - 杩斿洖褰撳墠鏈€鏂板尯鍧楅珮搴�
```javascript
  async getCurrentBlockHeight()
```

### 2.11 鏍规嵁鍖哄潡楂樺害鏌ヨ鍖哄潡澶�
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - blockHeight: 鍖哄潡楂樺害(number)
```javascript
  async getBlockHeaderByHeight(blockHeight)
```

### 2.12 鏌ヨ鏈€鏂板尯鍧�
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getLastBlock(withRWSet)
```

### 2.13 鏍规嵁鍖哄潡楂樺害鏌ヨ瀹屾暣鍖哄潡
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
  - blockHeight: 鍖哄潡楂樺害(number)
```javascript
  async getFullBlockByHeight(blockHeight)
```

## 3 閾鹃厤缃帴鍙�
### 3.1 鏌ヨ鏈€鏂伴摼閰嶇疆
**绫诲悕**
  - chainConfig

```javascript
  async getChainConfig()
```

### 3.2 鏍规嵁鎸囧畾鍖哄潡楂樺害鏌ヨ鏈€杩戦摼閰嶇疆
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - blockHeight: 鍖哄潡楂樺害(number)
```javascript
  async getChainConfigByBlockHeight(blockHeight)
```

### 3.3 鏌ヨ鏈€鏂伴摼閰嶇疆搴忓彿Sequence
**绫诲悕**
  - chainConfig

```javascript
  async getChainConfigSequence()
```

### 3.4 閾鹃厤缃洿鏂拌幏鍙朠ayload绛惧悕
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - payload: 寰呯鍚峱ayload
  - userInfo: 闇€瑕佺鍚嶇殑鐢ㄦ埛锛坈lass UserInfo锛�
```javascript
  signChainConfigPayload(payload, userInfo)
```

### 3.5 閾鹃厤缃洿鏂癙ayload绛惧悕鏀堕泦&鍚堝苟
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - signedPayloadBytesArray: 绛惧悕涔嬪悗鐨刾ayload bytes鏁扮粍(Array[payloadBytes])
```javascript
  mergeChainConfigSignedPayload(signedPayloadBytesArray)
```

### 3.6 鍙戦€侀摼閰嶇疆鏇存柊璇锋眰
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - signPayloadBytes: 绛惧悕涔嬪悗鐨刾ayload bytes
```javascript
  async sendChainConfigUpdateRequest(signPayloadBytes)
```

### 3.7 鏇存柊Block妯″潡寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - txTimestampVerify: 鏄惁闇€瑕佸紑鍚氦鏄撴椂闂存埑鏍¢獙(boolean)
  - (浠ヤ笅鍙傛暟锛岃嫢鏃犻渶淇敼锛岃缃负-1)
  - txTimeout: 浜ゆ槗鏃堕棿鎴崇殑杩囨湡鏃堕棿(绉�)锛屽叾鍊艰寖鍥翠负`[600, +鈭�)(number)`
  - blockTxCapacity: 鍖哄潡涓渶澶т氦鏄撴暟锛屽叾鍊艰寖鍥翠负`(0, +鈭瀅(number)`
  - blockSize: 鍖哄潡鏈€澶ч檺鍒讹紝鍗曚綅MB锛屽叾鍊艰寖鍥翠负`(0, +鈭瀅(number)`
  - blockInterval: 鍑哄潡闂撮殧锛屽崟浣�:ms锛屽叾鍊艰寖鍥翠负`[10, +鈭瀅(number)`
```javascript
  async createChainConfigBlockUpdatePayload({txTimestampVerify, txTimeout = -1, blockTxCapacity = -1, blockSize = -1, blockInterval = -1, userInfoList})
```

### 3.8 鏇存柊Core妯″潡寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - txSchedulerTimeout: 浜ゆ槗璋冨害鍣ㄤ粠浜ゆ槗姹犳嬁鍒颁氦鏄撳悗, 杩涜璋冨害鐨勬椂闂达紝鍏跺€艰寖鍥翠负`[0, 60]`锛岃嫢鏃犻渶淇敼锛岃缃负-1(number)
  - txSchedulerValidateTimeout: 浜ゆ槗璋冨害鍣ㄤ粠鍖哄潡涓嬁鍒颁氦鏄撳悗, 杩涜楠岃瘉鐨勮秴鏃舵椂闂达紝鍏跺€艰寖鍥翠负`[0, 60]`锛岃嫢鏃犻渶淇敼锛岃缃负-1(number)
```javascript
  async ceateChainConfigCoreUpdatePayload({txSchedulerTimeout = -1, txSchedulerValidateTimeout = -1,  userInfoList,})
```

### 3.9 娣诲姞淇′换缁勭粐鏍硅瘉涔﹀緟绛惧悕payload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - orgId: 缁勭粐Id(string)
  - roots: 鏍硅瘉涔︽暟缁�(string)
```javascript
  async createChainConfigTrustRootAddPayload({ orgId, roots })
```

### 3.10 鏇存柊淇′换缁勭粐鏍硅瘉涔﹀緟绛惧悕payload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - orgId: 缁勭粐Id(string)
  - roots: 鏍硅瘉涔︽暟缁�(string)
```javascript
  async createChainConfigTrustRootUpdatePayload({ orgId, roots })
```

### 3.11 鍒犻櫎淇′换缁勭粐鏍硅瘉涔﹀緟绛惧悕payload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - orgId: 缁勭粐Id(string)
```javascript
  async createChainConfigTrustRootDeletePayload({ orgId })
```

### 3.12 娣诲姞鏉冮檺閰嶇疆寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - permissionResourceName: 鏉冮檺鍚�(string)
  - rule: 鏉冮檺鍐呭(string)
  - orgList: 缁勭粐鍒楄〃(Array[string])
  - roleList: 鏉冮檺鍒楄〃(Array[string])
```javascript
  async createChainConfigPermissionAddPayload({ permissionResourceName, rule,  orgList = [], roleList = [] })
```

### 3.13 鏇存柊鏉冮檺閰嶇疆寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - permissionResourceName: 鏉冮檺鍚�(string)
  - rule: 鏉冮檺鍐呭(string)
  - orgList: 缁勭粐鍒楄〃(Array[string])
  - roleList: 鏉冮檺鍒楄〃(Array[string])
```javascript
  async createChainConfigPermissionUpdatePayload({ permissionResourceName, rule,  orgList, roleList })
```

### 3.14 鍒犻櫎鏉冮檺閰嶇疆寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - permissionResourceName: 鏉冮檺鍚�(string)
```javascript
  async createChainConfigPermissionDeletePayload({ permissionResourceName })
```

### 3.15 娣诲姞鍏辫瘑鑺傜偣鍦板潃寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - orgId: 鑺傜偣缁勭粐Id(string)
  - nodeIds: 鑺傜偣Id鏁扮粍(Array[string])
```javascript
  async createChainConfigConsensusNodeIdAddPayload(orgId, nodeIds)
```

### 3.16 鏇存柊鍏辫瘑鑺傜偣鍦板潃寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - orgId: 鑺傜偣缁勭粐Id(string)
  - nodeId: 鏃ц妭鐐笽d(string)
  - newNodeId: 鏂拌妭鐐笽d(string)
```javascript
  async createChainConfigConsensusNodeIdUpdatePayload(orgId, nodeId, newNodeId)
```

### 3.17 鍒犻櫎鍏辫瘑鑺傜偣鍦板潃寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - orgId: 鑺傜偣缁勭粐Id(string)
  - nodeId: 鑺傜偣Id(string)
```javascript
  async createChainConfigConsensusNodeIdDeletePayload(orgId, nodeId)
```

### 3.18 娣诲姞鍏辫瘑鑺傜偣寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - orgId: 鑺傜偣缁勭粐Id(string)
  - nodeIds: 鑺傜偣Id鏁扮粍(Array[string])
```javascript
  async createChainConfigConsensusNodeOrgAddPayload(orgId, nodeIds)
```

### 3.19 鏇存柊鍏辫瘑鑺傜偣寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - orgId: 鑺傜偣缁勭粐Id(string)
  - nodeIds: 鑺傜偣Id鏁扮粍(Array[string])
```javascript
  async createChainConfigConsensusNodeOrgUpdatePayload(orgId, nodeIds)
```

### 3.20 鍒犻櫎鍏辫瘑鑺傜偣寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - orgId: 鑺傜偣缁勭粐Id(string)
```javascript
  async createChainConfigConsensusNodeOrgDeletePayload(orgId)
```

### 3.21 娣诲姞鍏辫瘑鎵╁睍瀛楁寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - kvs: 瀛楁key銆乿alue瀵�(k-v Object瀵硅薄)
```javascript
  async createChainConfigConsensusExtAddPayload(kvs)
```

### 3.22 娣诲姞鍏辫瘑鎵╁睍瀛楁寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - kvs: 瀛楁key銆乿alue瀵�(k-v Object瀵硅薄)
```javascript
  async createChainConfigConsensusExtUpdatePayload(kvs)
```

### 3.23 娣诲姞鍏辫瘑鎵╁睍瀛楁寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - keys: 瀛楁key鏁扮粍(Array[string])
```javascript
  async createChainConfigConsensusExtDeletePayload(keys)
```

### 3.24 娣诲姞淇′换鎴愬憳璇佷功寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**

  绫诲瀷锛歬-v Object瀵硅薄
  - trustMemberOrgId: 缁勭粐Id
  - trustMemberNodeId: 鑺傜偣Id
  - trustMemberRole: 鎴愬憳瑙掕壊
  - trustMemberInfo: 鎴愬憳淇℃伅鍐呭
```javascript
  async createChainConfigTrustMemberAddPayload({
    trustMemberOrgId,
    trustMemberNodeId,
    trustMemberRole,
    trustMemberInfo,
  })
```

### 3.25 鍒犻櫎淇′换鎴愬憳璇佷功寰呯鍚峱ayload鐢熸垚
**绫诲悕**
  - chainConfig

**鍙傛暟璇存槑**
  - trustMemberInfo: 鎴愬憳淇℃伅鍐呭
```javascript
  async createChainConfigTrustMemberDeletePayload(trustMemberInfo)
```

## 4 璇佷功绠$悊鎺ュ彛
### 4.1 鐢ㄦ埛璇佷功娣诲姞
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - 鍦╮esponse.ContractResult.Result瀛楁涓繑鍥炴垚鍔熸坊鍔犵殑certHash
```javascript
  async addCert()
```

### 4.2 鐢ㄦ埛璇佷功鍒犻櫎
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - certHashes: 璇佷功Hash鍒楄〃(Array[string])
```javascript
  async deleteCert(certHashes)
```

### 4.3 鐢ㄦ埛璇佷功鏌ヨ
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - certHashes: 璇佷功Hash鍒楄〃(Array[string])
```javascript
  async queryCert(certHashes)
```

### 4.4 鑾峰彇鐢ㄦ埛璇佷功鍝堝笇
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
```javascript
  async getCertHash()
```

### 4.5 鐢熸垚璇佷功绠$悊鎿嶄綔Payload锛堜笁鍚堜竴鎺ュ彛锛�
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - method: CERTS_FROZEN(璇佷功鍐荤粨)/CERTS_UNFROZEN(璇佷功瑙e喕)/CERTS_REVOCATION(璇佷功鍚婇攢)
  - params: 璇佷功绠$悊鎿嶄綔鍙傛暟
```javascript
  async createCertManagePayload(method, params)
```

### 4.6 鐢熸垚璇佷功鍐荤粨鎿嶄綔Payload
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - certs: 璇佷功鍒楄〃(Array[string])
```javascript
  async createCertManageFrozenPayload(certs)
```

### 4.7 鐢熸垚璇佷功瑙e喕鎿嶄綔Payload
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - certs: 璇佷功鍒楄〃(Array[string])
```javascript
  async createCertManageUnfrozenPayload(certs)
```

### 4.8 鐢熸垚璇佷功鍚婇攢鎿嶄綔Payload
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - certCrl: 鍚婇攢璇佷功鐨刢rl(string)
```javascript
  async createCertManageRevocationPayload(certCrl)
```

### 4.9 寰呯payload绛惧悕
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - payload: 寰呯鍚峱ayload
```javascript
  signCertManagePayload(payload)
```

### 4.10 璇佷功绠$悊Payload绛惧悕鏀堕泦&鍚堝苟
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - signedPayloadBytesArray: 绛惧悕涔嬪悗鐨刾ayload bytes鏁扮粍(Array[payloadBytes])
```javascript
  mergeCertManageSignedPayload(signedPayloadBytesArray)
```

### 4.11 鍙戦€佽瘉涔︾鐞嗚姹傦紙璇佷功鍐荤粨銆佽В鍐汇€佸悐閿€锛�
**绫诲悕**
  - certMgr

**鍙傛暟璇存槑**
  - payloadBytes: 绛惧悕涔嬪悗鐨刾ayload bytes
  - withSyncResult: 鏄惁鍚屾鑾峰彇缁撴灉
```javascript
  async sendCertManageRequest(payloadBytes, withSyncResult)
```

## 5 娑堟伅璁㈤槄鎺ュ彛
### 5.1 鍖哄潡璁㈤槄
**绫诲悕**
  - subscribe

**鍙傛暟璇存槑**
  - startBlock: 璁㈤槄璧峰鍖哄潡楂樺害锛岃嫢涓�-1锛岃〃绀鸿闃呭疄鏃舵渶鏂板尯鍧�(number)
  - endBlock: 璁㈤槄缁撴潫鍖哄潡楂樺害锛岃嫢涓�-1锛岃〃绀鸿闃呭疄鏃舵渶鏂板尯鍧�(number)
  - withRwSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
  - callBack: 鍥炶皟鍑芥暟锛岀涓€涓弬鏁版槸鐩戝惉鍒扮殑鐨刡lock鍖哄潡锛岀浜屼釜鍙傛暟鏄敊璇俊鎭�
```javascript
  subscribeBlock(startBlock, endBlock, withRwSet, callBack)
```

### 5.2 浜ゆ槗璁㈤槄
**绫诲悕**
  - subscribe

**鍙傛暟璇存槑**
  - startBlock: 璁㈤槄璧峰鍖哄潡楂樺害锛岃嫢涓�-1锛岃〃绀鸿闃呭疄鏃舵渶鏂板尯鍧�(number)
  - endBlock: 璁㈤槄缁撴潫鍖哄潡楂樺害锛岃嫢涓�-1锛岃〃绀鸿闃呭疄鏃舵渶鏂板尯鍧�(number)
  - txType: 璁㈤槄浜ゆ槗绫诲瀷,鑻ヤ负common.TxType(-1)锛岃〃绀鸿闃呮墍鏈変氦鏄撶被鍨�(number)
  - txIds: 璁㈤槄txId鍒楄〃锛岃嫢涓虹┖(null)锛岃〃绀鸿闃呮墍鏈塼xId(Array[string])
  - callBack: 鍥炶皟鍑芥暟锛岀涓€涓弬鏁版槸鐩戝惉鍒扮殑浜ゆ槗锛岀浜屼釜鍙傛暟鏄敊璇俊鎭�
```javascript
  subscribeTx(startBlock, endBlock, txType, txIds, callBack)
```

### 5.3 鍚堢害浜嬩欢璁㈤槄
**绫诲悕**
  - subscribe

**鍙傛暟璇存槑**
  - topic: 璁㈤槄鐨勪富棰�(string)
  - contractName: 鏅鸿兘鍚堢害鍚嶇О(string)
  - callBack: 鍥炶皟鍑芥暟锛岀涓€涓弬鏁版槸鐩戝惉鍒扮殑鍚堢害浜嬩欢锛岀浜屼釜鍙傛暟鏄敊璇俊鎭�
```javascript
  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: 鍥炶皟鍑芥暟锛岀涓€涓弬鏁版槸鐩戝惉鍒扮殑浜嬩欢杩斿洖锛岀浜屼釜鍙傛暟鏄敊璇俊鎭�
```javascript
  subscribe(payloadBytes, txType, callBack)
```

## 6 璇佷功鍘嬬缉
*寮€鍚瘉涔﹀帇缂╁彲浠ュ噺灏忎氦鏄撳寘澶у皬锛屾彁鍗囧鐞嗘€ц兘*
### 6.1 鍚敤鍘嬬缉璇佷功鍔熻兘
**绫诲悕**
  - certCompression

**鍙傛暟璇存槑**
```javascript
  async enableCertHash()
```

### 6.2 鍋滅敤鍘嬬缉璇佷功鍔熻兘
**绫诲悕**
  - certCompression

**鍙傛暟璇存槑**
```javascript
  async disableCertHash()
```

## 7 宸ュ叿绫�
### 7.1 灏咵asyCodec缂栫爜瑙g爜鎴恗ap
**绫诲悕**
  - easyCodec

```javascript
	easyCodecItemToParamsMap(easyCodecObj)
```

## 8 鏁版嵁褰掓。
### 8.1 鑾峰彇宸插綊妗e尯鍧楅珮搴�
**绫诲悕**
  - callSystemContract

**鍙傛暟璇存槑**
```javascript
  async getArchivedBlockHeight()
```

### 8.2 鏋勯€犳暟鎹綊妗e尯鍧桺ayload
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - targetBlockHeight: 鐩爣鍖哄潡楂樺害(number)
```javascript
  createArchiveBlockPayload(targetBlockHeight)
```

### 8.3 鏋勯€犲綊妗e綊妗f暟鎹仮澶峆ayload
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - fullBlock: 瀹屾暣鍖哄潡鐨刡ytes
```javascript
  createRestoreBlockPayload(fullBlock)
```

### 8.4 鑾峰彇褰掓。鎿嶄綔Payload绛惧悕
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - payloadBytes: 寰呯鍚峱ayloadBytes
```javascript
  signArchivePayload(payloadBytes)
```

### 8.5 鍙戦€佸綊妗h姹�
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - mergeSignedPayloadBytes: 绛惧悕涔嬪悗鐨刾ayloadBytes
```javascript
  async sendArchiveBlockRequest(mergeSignedPayloadBytes)
```

### 8.6 褰掓。鏁版嵁鎭㈠
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - fullBlock: 瀹屾暣鍖哄潡鐨刡ytes
```javascript
  async restoreBlock(fullBlock)
```

### 8.7 鏍规嵁浜ゆ槗Id鏌ヨ宸插綊妗d氦鏄�
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - txId: 浜ゆ槗Id(string)
```javascript
  async getArchivedTxByTxId(txId)
```

### 8.8 鏍规嵁鍖哄潡楂樺害鏌ヨ宸插綊妗e尯鍧�
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - blockHeight: 鍖哄潡楂樺害(number)
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getArchivedBlockByHeight(blockHeight, withRWSet)
```

### 8.9 鏍规嵁鍖哄潡楂樺害鏌ヨ宸插綊妗e畬鏁村尯鍧�(鍖呭惈锛氬尯鍧楁暟鎹€佽鍐欓泦銆佸悎绾︿簨浠舵棩蹇�)
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - blockHeight: 鍖哄潡楂樺害(number)
```javascript
  async getArchivedFullBlockByHeight(blockHeight)
```

### 8.10 鏍规嵁鍖哄潡鍝堝笇鏌ヨ宸插綊妗e尯鍧�
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - hash: 鍖哄潡鍝堝笇(string)
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getArchivedBlockByHash(hash, withRWSet)
```

### 8.11 鏍规嵁浜ゆ槗Id鏌ヨ宸插綊妗e尯鍧�
**绫诲悕**
  - archive

**鍙傛暟璇存槑**
  - txId: 浜ゆ槗Id(string)
  - withRWSet: 鏄惁杩斿洖璇诲啓闆�(boolean)
```javascript
  async getArchivedBlockByTxId(txId, withRWSet)
```

## 9 绯荤粺绫绘帴鍙�
### 9.1 SDK鍋滄鎺ュ彛
*鍏抽棴杩炴帴姹犺繛鎺ワ紝閲婃斁璧勬簮*
```javascript
	stop()
```

## 10 绫绘瀯閫犲嚱鏁�

### 10.1 UserContract

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)

```javascript
	constructor(chainID, userInfo, node)
```

### 10.2 CallUserContract

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)

```javascript
	constructor(chainID, userInfo, node)
```

### 10.3 CallSystemContract

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)

```javascript
	constructor(chainID, userInfo, node)
```

### 10.4 ChainConfig

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)

```javascript
	constructor(chainID, userInfo, node)
```

### 10.5 CertMgr

**鍙傛暟璇存槑**
  - chainConfig: ChainConfig绫�(class ChainConfig)
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)

```javascript
	constructor(chainConfig, chainID, userInfo, node)
```

### 10.6 Subscribe

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)

```javascript
	constructor(chainID, userInfo, node)
```

### 10.7 EasyCodec
```javascript
	constructor()
```

### 10.8 Archive

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - userInfo: 鐢ㄦ埛绫�(calss UserInfo)
  - node: 鑺傜偣绫�(class node)
  - callSystemContract: 绯荤粺鍚堢害璋冪敤绫�(class callSystemContract)

  鏁版嵁搴撳弬鏁帮紝绫诲瀷锛歬-v Object瀵硅薄
  - type: 鏁版嵁搴撶被鍨嬶紝鐩墠鍙敮鎸乵ysql锛岄粯璁や负mysql锛屾棤闇€璁剧疆
  - dbHost: 鏁版嵁搴撳湴鍧€
  - dbPort: 鏁版嵁搴撶鍙�
  - dbUsername: 鏁版嵁搴撶敤鎴峰悕
  - dbPassword: 鏁版嵁搴撳瘑鐮�
```javascript
	constructor(chainID, userInfo, node, callSystemContract, { type = 'mysql', dbHost, dbPort, dbUsername, dbPassword })
```

### 10.9 UserInfo

**鍙傛暟璇存槑**
  - orgID: 缁勭粐ID
  - userSignKeyPath: 鐢ㄦ埛绉侀挜璺緞
  - userSignCertPath: 鐢ㄦ埛璇佷功璺緞

```javascript
	constructor(orgID, userSignKeyPath, userSignCertPath)
```

### 10.10 Node

**鍙傛暟璇存槑**
  - requestTimeout: 寤舵椂锛屽崟浣峬s锛岄粯璁�3000

  鑺傜偣閰嶇疆鍙傛暟nodeConfigArray锛岀被鍨嬶細k-v Object鏁扮粍(Array[Object])
  - nodeAddr: 鑺傜偣鍦板潃锛宨p+绔彛(string)
  - tlsEnable: 鏄惁寮€鍚痶ls(boolean)
  - options: 绫诲瀷k-v Object(pem: 鏍筩a璇佷功Buffer, clientKey: 瀹㈡埛绔閽uffer, clientCert: 瀹㈡埛绔瘉涔uffer, hostName: 鑺傜偣鍩熷悕锛屽搴旇瘉涔︿腑鐨剆ans瀛楁)

```javascript
	constructor(nodeConfigArray, requestTimeout)
```

### 10.11 Sdk

**鍙傛暟璇存槑**
  - chainID: chainId(string)
  - orgID: 缁勭粐ID
  - userSignKeyPath: 鐢ㄦ埛绉侀挜璺緞
  - userSignCertPath: 鐢ㄦ埛璇佷功璺緞
  - nodeConfigArray: 鍙傝€�10.6nodeConfigArray
  - timeout: 寤舵椂锛屽崟浣峬s
  - archiveConfig: 鍙傝€�10.8鏁版嵁搴撳弬鏁�

```javascript
	constructor(chainID, orgID, userSignKeyPath, userSignCertPath, nodeConfigArray, timeout, archiveConfig = {})
```

### 10.12 LoadFromYaml

**鍙傛暟璇存槑**
  - configPath: 閰嶇疆鏂囦欢璺緞(string)

```javascript
	constructor(configPath)
```