# 鏁版嵁杩佺Щ宸ュ叿

## 杩佺Щ宸ュ叿璁捐鍘熺悊

### 杩佺Щ宸ュ叿鐨勭洰鐨�

杩佺Щ宸ュ叿鍙互瑙e喅鐨勪笟鍔¢渶姹傚満鏅細

1. 鐢变簬涓氬姟闇€姹傦紝鎯宠灏嗗綋鍓嶇殑鍖哄潡閾剧郴缁熸浛鎹负鏂扮殑鍖哄潡閾剧郴缁燂紝鍚屾椂淇濈暀褰撳墠鍖哄潡閾剧郴缁熺殑鍘熷鍖哄潡鏁版嵁锛屾瘮濡�
   - Fabric --> Chainmaker

2. 褰撳墠鍖哄潡閾剧郴缁熸棤娉曟弧瓒充笟鍔¢渶姹傦紝鎯宠鍗囩骇褰撳墠鍖哄潡閾剧郴缁熺殑鐗堟湰锛屼絾鏄尯鍧楅摼绯荤粺鏂版棫鐗堟湰涔嬮棿鐨勫尯鍧椼€佽鍐欓泦绛夋暟鎹粨鏋勪笉鍏煎锛屾瘮濡�
   - Chainmaker 1.x --> Chainmaker 2.x

### 杩佺Щ鏂规璁捐鎬濊矾

鍖哄潡閾捐縼绉荤殑鏈€鐩磋鐨勬兂娉曪紝灏辨槸灏嗕笉鍚屽尯鍧楅摼绯荤粺鐨勫尯鍧楃粨鏋勪綋涓嶅悓瀛楁鐩存帴杩涜璧嬪€硷紝姣斿chainmaker1.x杩佺Щ鍒癱hainmaker2.x锛屽皢chainmaker1.x鐨勫尯鍧楅噸瑕佸瓧娈电洿鎺ヨ祴鍊肩粰chainmaker2.x鐨勫尯鍧楋紝鏈変簡chainmaker2.x鐨勫尯鍧楋紝缁欏埌chainamker2.x鐨勫瓨鍌ㄦā鍧楋紝鐩存帴鍚姩chainmaker2.x鐨勯摼灏卞彲浠ヤ簡

1. 鑾峰彇婧愰摼鐨勫尯鍧楋細
   - 閫氳繃瀛樺偍妯″潡鐨勬柟寮忚幏鍙栧尯鍧楋紝姣斿鎷夊彇chainamaker1.x鐨勫尯鍧楋紝transfer-tool閫氳繃1.x鐨勫瓨鍌ㄦā鍧楁媺鍙�1.x鐨勫尯鍧楋紝1.x閾剧殑data鐩綍鍜宼ransfer-tool閮ㄧ讲鍒板悓涓€涓幆澧�
   - 閫氳繃sdk鏂瑰紡鑾峰彇鍖哄潡锛屾瘮濡傛媺鍙杅abric鐨勫尯鍧楋紝杩佺Щ宸ュ叿閫氳繃fabric-sdk鎷夊彇fabric鐨勫尯鍧�
2. 灏嗘簮閾惧尯鍧楄浆鎹负鐩爣閾惧尯鍧楋細姣斿灏哻hainmaker 1.x鐨勫尯鍧楄浆鎹负chainmaker 2.x鐨勫尯鍧楋紝鍖哄潡灏辨槸涓€涓粨鏋勪綋锛屽厛鑾峰緱chainmaker 1.x鐨勫尯鍧楃粨鏋勪綋锛岀劧鍚庤祴鍊肩粰chainmaker 2.x鐨勫尯鍧楃粨鏋勪綋
3. 鏍规嵁鐢熸垚鐨勭洰鏍囬摼鍖哄潡锛屽惎鍔ㄧ洰鏍囬摼锛屽皢chainmaker2.x鐨勫尯鍧楁斁鍒癱hainmaker 2.x鐨勯摼瀛樺偍鐩綍锛屽苟鍚姩chainamker2.x
4. 鐩爣閾綾hainmaker2.x 鍙惎鍔ㄤ竴涓叡璇嗚妭鐐癸紝濡傛灉鍚庣画鎯冲鍔犲叡璇嗚妭鐐癸紝绛夎縼绉诲畬鎴愬悗锛屽彲閫氳繃閰嶇疆浜ゆ槗鍔ㄦ€佸鍔犲叡璇嗚妭鐐�

### 杩佺Щ鏂规涓瓨鍦ㄧ殑闂鍙婅В鍐虫柟妗�

#### 闂1锛氳€冭檻鍒板悓姝ヨ妭鐐瑰悓姝ュ尯鍧楁椂锛屼細閬囧埌璇诲啓闆嗛獙璇佺殑闂

鍚屾鑺傜偣鍦ㄥ悓姝ュ叡璇嗚妭鐐瑰尯鍧楃殑鏃跺€欙紝浼氶獙璇佸尯鍧楋紝鍦ㄨ櫄鎷熸満涓墽琛屼氦鏄撶殑鍚堢害锛岀敓鎴愯鍐欓泦锛岃窡鍏辫瘑鑺傜偣鍖哄潡澶寸殑璇诲啓闆唄ash杩涜瀵规瘮鏉ラ獙璇佷氦鏄撴槸鍚﹁姝g‘鎵ц锛屽鏋渃hainmaker鍖哄潡涓殑姣忕瑪浜ゆ槗閮芥墽琛屾簮閾剧殑涓氬姟鍚堢害閫昏緫浼氬緢娴垂鏃堕棿锛屽悓鏃惰繕闇€瑕佽В鏋愭簮閾剧殑鍚堢害鍦╟hainmaker2.x涓婃墽琛岋紝鍙兘浼氫笉鍏煎锛屽洜姝よ繖绉嶆柟妗堝疄鐜伴毦搴﹀ぇ锛屼笉澶悎鐞�

- 瑙e喅鏂规锛氭崲涓€绉嶆€濊矾锛屼笉绠℃簮閾剧殑涓氬姟閫昏緫澶氬鏉傦紝鏈€缁堜笟鍔″悎绾︾殑鎵ц缁撴灉鍦ㄥ尯鍧楅摼涓殑琛ㄧ幇褰㈠紡閮芥槸kv褰㈠紡鐨勮鍐欓泦锛屽洜姝ゆ兂鍒癱hainmaker2.x鐨勫悎绾︿笉鎵ц婧愰摼鐨勪笟鍔¢€昏緫锛岃€屾槸灏嗘簮閾剧殑浜ゆ槗璇诲啓闆嗙洿鎺ヨ祴鍊肩粰chainmaker 2.x鍖哄潡涓氦鏄撶殑璇诲啓闆�

#### 闂2: 鑰冭檻浜ゆ槗涓瓨鍦ㄨ法鍚堢害璋冪敤鏃剁殑浼樺寲

- 鍒濆鏂规锛氭瘮濡備氦鏄搕x1鐨勫悎绾璺ㄥ悎绾﹁皟鐢ㄥ悎绾锛宎鍚堢害涓渶瑕佸垽鏂槸鍚﹀瓨鍦ㄨ法鍚堢害璋冪敤锛屽鏋滃瓨鍦紝璺ㄥ悎绾﹁皟鐢╞锛屽鏋渂鍚堢害涔熷瓨鍦ㄨ法鍚堢害璋冪敤c鍚堢害锛宐鍚堢害涔熼渶瑕佸垽鏂紝a銆乥鍚堢害鐨勯€昏緫鐩稿悓锛岄兘鏄痶ransfer鍚堢害锛屽垵濮嬫柟妗堢殑缂虹偣锛歵ransfer鍚堢害鍐呴渶瑕佸姞鍒ゆ柇锛岃В鍐冲灞傛璺ㄥ悎绾﹁皟鐢ㄧ殑闂锛宼ransfer鍚堢害閫昏緫璁捐澶嶆潅

- 浼樺寲鏂规锛氭墍鏈夎皟鐢ㄧ敤鎴峰悎绾︾殑浜ゆ槗锛岄兘璋冪敤assist鍚堢害锛岀敱assist鍚堢害閬嶅巻浜ゆ槗鐨勮鍐欓泦鐨勫悎绾﹀悕锛屾牴鎹笉鍚屽悎绾﹀悕锛屽垎鍒繘琛岃法鍚堢害璋冪敤涓嶅悓鐨勭敤鎴峰悎绾︼紝涓嶅悓鐨勭敤鎴峰悎绾﹂€昏緫閮界浉鍚岋紝閮芥槸transfer鍚堢害鐨勯€昏緫锛屼紭鍖栨柟妗堢殑浼樼偣: 1.鐢盿ssist鍚堢害缁熶竴璺ㄥ悎绾﹁皟鐢ㄦ墍鏈塼ransfer鍚堢害锛宼ransfer鍚堢害涓嶅啀杩涜璺ㄥ悎绾﹁皟鐢紝瑙e喅浜唗ransfer鍚堢害鍐呭灞傛璺ㄥ悎绾﹁皟鐢ㄧ殑闂; 2.鎵€鏈夎縼绉讳氦鏄撻兘缁熶竴璋冪敤assist鍚堢害锛屼氦鏄撲腑鍖呭惈assist鍚堢害锛屾柟渚跨敤鎴峰尯鍒嗕竴绗斾氦鏄撴槸鍚︽槸杩佺Щ浜ゆ槗

- 鏈縼绉诲伐鍏烽噰鐢ㄤ紭鍖栨柟妗堬紝瀵逛氦鏄撲腑瀛樺湪鐨勮法鍚堢害璋冪敤鍦烘櫙杩涜浜嗕紭鍖�

### 杩佺Щ鏂规鏁翠綋娴佺▼鍥�

<img loading="lazy" src="../images/TransferTool-process.png" style="zoom:100%;" />

### 杩佺Щ宸ュ叿鐨勬牳蹇冩ā鍧楋細鍖哄潡杞崲瀹炵幇閫昏緫

灏嗘簮閾�(fabric/chainmaker1.x)鐨勫尯鍧楄浆鎹负鐩爣閾綾hainmaker2.x鐨勫尯鍧楁祦绋嬶細
1. chainmaker 2.x鐨刡lock0

   鏂伴摼鐨勫垱濮嬪潡蹇呴』鐢眀c.yml鑷姩鐢熸垚鐨勶紝鍥犱负鏂板鑺傜偣鐨勫垱涓栧潡涔熸槸鐢眀c.yml鐢熸垚鐨勶紝濡傛灉鍒涗笘鍧椾笉鐩稿悓锛屾柊鑺傜偣鏃犳硶鍚姩

2. chainmaker 2.x鐨刡lock1

    1. tx1锛氬垱寤虹煭璇佷功浜ゆ槗(浣跨敤璇佷功鐨刪ash浠g瑪璇佷功锛岄檷浣庝氦鏄撳ぇ灏忥級
        - txId锛氭簮閾炬病鏈夊搴旂殑txid锛屾牴鎹畊uid鐢熸垚
        - 璇诲啓闆嗭細璋冪敤鐭瘉涔︾殑绯荤粺鍚堢害鐩稿叧閫昏緫锛岀敓鎴愬搴旇鍐欓泦
    2. tx2锛氬垱寤鸿縼绉昏緟鍔╁悎绾︿氦鏄�
        - txId锛氭簮閾炬病鏈夊搴旂殑txid锛屾牴鎹畊uid鐢熸垚
        - 璇诲啓闆嗭細璋冪敤瀹夎鍚堢害鐨勭郴缁熷悎绾﹂€昏緫锛岀敓鎴愬搴旇鍐欓泦
    3. tx3锛氭潵婧愪簬婧愰摼鐨刡lock1.txs
        1. 婧愰摼鐨則x濡傛灉鏄敤鎴峰悎绾﹀畨瑁呯殑浜ゆ槗
            - 杞崲鎴恈hainmaker2.x鐩稿搴旂殑鐢ㄦ埛鍚堢害瀹夎锛氬悎绾﹀悕婧愰摼鐨勫悎绾﹀悕锛屽悎绾︾殑鍐呭transfer鍚堢害鍐呭锛屽氨鏄啓浜嗕竴涓猼ransfer鍚堢害锛岀劧鍚庨噸鍛藉悕鎴愬悇绉嶇敤鎴峰悎绾︼紝琚畨瑁呬簡n浠�
        2. 婧愰摼鐨則x濡傛灉鏄郴缁熷悎绾︾浉鍏充氦鏄擄紝姣斿鑺傜偣銆佺粍缁囨暟閲忋€佸垱寤虹煭璇佷功绛変氦鏄�
            - 杞崲涓篶hainmaker2.x 鐗规畩鐨勪氦鏄擄細瀵规簮閾剧殑鍘熷浜ゆ槗鍐呭搴忓垪鍖栵紝浣滀负2.x浜ゆ槗鐨刱v瀛樿捣鏉�
        3. 婧愰摼鐨則x濡傛灉鏄甯歌皟鐢ㄧ敤鎴峰悎绾︾殑浜ゆ槗
            - 杞崲涓篶hainmaker 2.x鐩稿搴旂殑assist鍚堢害璋冪敤绫诲瀷鐨勪氦鏄擄細璋冪敤鐨勫悎绾﹀悕鏄縼绉昏緟鍔╁悎绾ssist锛�2.x浜ゆ槗鐨刱v淇濆瓨搴忓垪鍖栧悗鐨勬簮閾剧殑鍘熷鐨勪氦鏄撳拰鍘熷璇诲啓闆嗭紝assist鍚堢害灏�1.x鍘熷璇诲啓闆嗚浆鎹负map锛屽璇诲啓闆嗚繘琛屽垎绫伙紝map鐨刱ey锛�1.x鐢ㄦ埛鍚堢害鍚島sercontract锛寁alue锛�1.x涓氬姟璇诲啓闆唊v锛岀劧鍚庢牴鎹敤鎴峰悎绾﹀悕usercontract锛岃法鍚堢害璋冪敤璇ョ敤鎴峰悎绾︼紙鍚堢害鍐呭涓簍ransfer鍚堢害锛宼ransfer鍚堢害鐨勯€昏緫锛屽皢1.x浜ゆ槗鐨勪笟鍔¤鍐欓泦锛屾洿鏂板埌瀵瑰簲鐨�2.x浜ゆ槗鐨勪笟鍔¤鍐欓泦锛�
    4. tx4锛氬簭鍒楀寲婧愰摼鐨刧enesisblock.tx1浣滀负chainamker2.x鐨則x4鐨刱v

3. chainmaker 2.x鐨刡lock2銆乥lock3銆乥lock4 ...鐨勫鐞嗛€昏緫锛屼笌block1 tx3鐨勫鐞嗛€昏緫鐩稿悓

### 杩佺Щ宸ュ叿璁捐鍘熺悊鍥�

<img loading="lazy" src="../images/TransferTool-architecture.png" style="zoom:100%;" />


## 浜у搧宸ュ叿杩佺Щ

### 鏀寔绫诲瀷
1. fabric鍒癱hainmaker
    * 婧愰摼锛歠abric锛�1.4.x
    * 鐩爣閾撅細chainmaker锛歷2.2.1
    

### 杩佺Щ宸ュ叿婧愰摼: Fabric
1. 婧愰摼Fabric鐨勭増鏈�1.4
2. 婧愰摼绀轰緥锛氭瘮濡備娇鐢ㄨ剼鏈惎鍔ㄤ竴鏉℃簮閾綟abric 1.4.3
    * 浣跨敤鑴氭湰byfn.sh 蹇€熷惎鍔ㄤ竴涓狥abric缃戠粶
    * channel name鏄痬ychannel
    * 婧愰摼鐨勮瘉涔﹁矾寰�
   ```
   fabric/scripts/fabric-samples/first-network/crypto-config
   ```

### 杩佺Щ宸ュ叿鐩爣閾綜hainmaker 2.x
1. 鐩爣閾綜hainmaker鐨勭増鏈細2.2.1
2. 鍚姩鐩爣閾綜hainmaker
    * 浣跨敤鑴氭湰prepare.sh 鍚姩涓€涓叡璇嗚妭鐐�
3. 鐩爣閾綜hainmaker璇佷功鏂囦欢璺緞
   ```
   chainmaker-go/build/release/chainmaker-v2.2.0-wx-org.chainmaker.org/config/wx-org.chainmaker.org
   ```

### 杩佺Щ宸ュ叿浜у搧瀹夎閮ㄧ讲

#### 杩佺Щ宸ュ叿浜у搧鍓嶇閮ㄧ讲

1. 婧愮爜鍦板潃
   ```
   https://git.chainmaker.org.cn/chainmaker/transfer-front
   ```
2. 杩涘叆鍒版湇鍔″櫒浠绘剰鏂囦欢閲岄潰 鎵ц
    ```
    git clone  --depth=1 https://git.chainmaker.org.cn/chainmaker/transfer-front
    ```
3. 杩涘叆migration-web/public/config.js閲岄潰锛屽皢 http://192.168.0.173:12091 鏀规垚鑷繁鏈嶅姟鍣╥p
4. 閫€鍥炲埌migration-web 鐩綍涓嬫墽琛�
   ```
   docker build -t chainmaker/migration-web:v2.2.0 -f ./Dockerfile .
   ```
5. 鎵ц鎴愬姛
6. 鎵句釜绔彛鍙凤紝姣斿锛�8000锛屾煡鐪嬫槸鍚﹁鍗犵敤
    ```
    lsof -i:8000
   ```  

7. 鍚姩鍓嶇docker瀹瑰櫒
   ```
    docker run --rm --name migration-web -p 8000:80 -d chainmaker/migration-web:v2.2.0
    ```
8. 娴忚鍣ㄦ墦寮€鍗冲彲

#### 杩佺Щ宸ュ叿浜у搧鍚庣閮ㄧ讲
1. 涓嬭浇杩佺Щ宸ュ叿浜у搧transfer-web-server鐨勬簮浠g爜
   ```
   #椤圭洰缃戝潃
   https://git.chainmaker.org.cn/chainmaker/transfer-web-server
   
   #浠g爜鍒嗘敮
   master
   
   #鎷夊彇浠g爜
   git clone git@git.chainmaker.org.cn:chainmaker/transfer-web-server.git
   ```

2. 缂栬瘧婧愪唬鐮侊紝鐢熸垚杩佺Щ宸ュ叿浜у搧鍙墽琛屾枃浠秚ransfer-web-server
   ```
   go build
   ```
3. 杩愯杩佺Щ宸ュ叿浜у搧
   ```
   nohup ./transfer-web-server &
   ```

4. 鏌ョ湅鏃ュ織
   ```
   vim nohup.out
   vim default.log
   ```

5. swagger鎺ュ彛鏂囨。
   http://鏈嶅姟鍣╥p:12091/swagger/index.html#/

### 杩佺Щ宸ュ叿浜у搧浣跨敤鏂囨。
#### 鍓嶇缃戦〉鍦板潃
http://鏈嶅姟鍣╥p:8000/#/home

#### 鏂板浠诲姟
1. 浠诲姟鍚嶇О锛氳嚜瀹氫箟浠诲姟鍚嶇О
2. 浠诲姟绫诲瀷锛�
   * Fabric1.4 to chainmaker 2.2.1
   * chainmaker1.x to chainmaker 2.2.1(鏆備笉鏀寔)
3. 杩佺Щ楂樺害锛氭牴鎹簮閾剧殑鍖哄潡楂樺害鑷畾涔夎縼绉婚珮搴�

#### 杩佺Щ閾句俊鎭缃�
1. 杩佺Щ閾句负Fabric
   * 閾綢D: Fabric鐨刢hannel鍚�
   * 鐢ㄦ埛鍚嶇О锛氬彲浠ヨ闂簮閾綟abric鐨勭敤鎴峰悕
   * 鐢ㄦ埛璇佷功锛氬彲浠ヨ闂簮閾綟abric鐨勭敤鎴疯瘉涔︼紝瑕佹眰蹇呴』鏄痾ip鍘嬬缉鏍煎紡锛屽苟涓斿繀椤诲湪linux鐜杩涜鏂囦欢鍘嬬缉锛宭inux鐜涓媧ip鏂囦欢鐨勫帇缂�/瑙e帇鍛戒护濡備笅锛�
      ```
       //鍘嬬缉
       zip -r crypto-config.zip crypto-config
       //瑙e帇
       unzip crypto-config.zip
      ```
   * config鏂囦欢锛氭簮閾綟abric鐨剆dk閰嶇疆鏂囦欢锛岃姹傚繀椤绘槸yml鏍煎紡
   * fabric_sdk_config.yml鏂囦欢閫傞厤锛岄渶瑕佹洿鏀瑰叾涓墍鏈夌殑璇佷功璺緞涓烘爣鍑嗙殑璇佷功璺緞
       ```
         ./config_path/杩佺Щ浠诲姟task_id/origin/鐢ㄦ埛璇佷功鐩綍
       ```
   * 涓轰簡鏂逛究璧疯锛岀涓€娆℃洿鏀逛负鏍囧噯璇佷功璺緞鍚庯紝瀵逛簬涓嶅悓鐨勮縼绉讳换鍔★紝鍙渶瑕佹浛鎹ask_id灏卞彲浠�
   

#### 鐩爣閾句俊鎭缃�
1. 璇佷功绫诲瀷锛氭牴鎹洰鏍囬摼chainmaker鐨勮瘉涔︾被鍨嬭缃�
2. 缁勭粐ID锛氭牴鎹洰鏍囬摼chainmaker鐨勭粍缁嘔D璁剧疆
3. 鏂囦欢涓婁紶锛氫笂浼犵洰鏍囬摼chainmaker鐨勮瘉涔︽枃浠讹紝瑕佹眰蹇呴』涓簔ip鏍煎紡
4. wx-org.chainmaker.org.zip鏂囦欢涓紝鏇存敼chainmaker.yml銆乥c1.yml鏂囦欢涓殑璇佷功璺緞涓烘爣鍑嗚矾寰勬牸寮忥紝鏂逛究杩佺Щ宸ュ叿鍚庣鏍规嵁task_id绠$悊鐩爣閾剧殑璇佷功
  * chainmaker.yml閰嶇疆鏂囦欢锛屽瓨鍌ㄦā鍧楄矾寰勪慨鏀癸紝涓轰簡鏂逛究璧疯锛岀涓€娆℃洿鏀逛负鏍囧噯璇佷功璺緞鍚庯紝瀵逛簬涓嶅悓鐨勮縼绉讳换鍔★紝鍙渶瑕佹浛鎹ask_id灏卞彲浠�
     ```
     ./config_path/杩佺Щ浠诲姟task_id/target/鐩爣閾綾hainmaker璇佷功鐩綍
     ```
  
  * bc1.yml閰嶇疆鏂囦欢锛岃瘉涔﹁矾寰勪慨鏀�,涓轰簡鏂逛究璧疯锛岀涓€娆℃洿鏀逛负鏍囧噯璇佷功璺緞鍚庯紝瀵逛簬涓嶅悓鐨勮縼绉讳换鍔★紝鍙渶瑕佹浛鎹ask_id灏卞彲浠�
     ```
     ./config_path/杩佺Щ浠诲姟task_id/target/鐩爣閾綾hainmaker璇佷功鐩綍
     ```

#### 鎵ц杩佺Щ
1. 鐐瑰嚮寮€濮嬭縼绉诲嵆鍙墽琛岃縼绉讳换鍔★紝杩佺Щ瀹屾垚鍚庯紝浼氳嚜鍔ㄦ洿鏀硅縼绉荤姸鎬佷负杩佺Щ瀹屾垚

2. 杩佺Щ鎴愬姛鍚庯紝寰楀埌鐨勭洰鏍囬摼鍖哄潡鏁版嵁data鐩綍
   ```
   ./config_path/杩佺Щ浠诲姟task_id/data
   ```

### 鍚姩鐩爣閾惧苟楠岃瘉鏄惁杩佺Щ鎴愬姛
1. 灏嗙洰鏍囬摼鍘熸湁鐨刣ata銆乴og鐩綍鍒犻櫎
   ```
   cd chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org
   rm -rf data
   ```

2. 灏嗚縼绉诲畬鎴愬悗寰楀埌鐨勭洰鏍囬摼鍖哄潡鏁版嵁data鐩綍锛屾嫹璐濆埌chainmaker2.2.1鐨勮妭鐐圭殑涓荤洰褰曚笅

3. 鍚姩鐩爣閾綾hainmaker鐨勮妭鐐�
   ```
   cd chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org/bin
   sh start.sh
   ```

4. 楠岃瘉杩佺Щ宸ュ叿鏄惁杩佺Щ鎴愬姛
5. 閫氳繃cmc鏌ョ湅鐩爣閾剧殑鍖哄潡淇℃伅
6. 缁欑洰鏍囬摼娣诲姞涓€涓悓姝ヨ妭鐐癸紝閫氳繃鏃ュ織鎴朿mc宸ュ叿鏌ョ湅鍚屾鑺傜偣鏄惁鎴愬姛鍚屾鐩爣閾剧殑鍖哄潡
    * 鏌ヨ鏌愰珮搴︾殑鍖哄潡銆佽鍐欓泦淇℃伅
    * 鏌ュ嚭鏉ョ殑璇诲啓闆嗙殑kv锛岄渶瑕佺敤base64瑙g爜
   ```
   ./cmc query block-by-height 4 \
   --chain-id=chain1 \
   --sdk-conf-path=./testdata/sdk_config.yml
   ```

7. 鍗囩骇鐩爣閾句笂杩佺Щ杩囨潵鐨勫悎绾︼紝鏌ョ湅鏄惁鑳藉鍗囩骇鎴愬姛锛屽苟閫氳繃鐩爣閾句笂鐨勫崌绾у悎绾︽搷浣滆鍐欓泦锛屾煡鐪嬫槸鍚︿笌鍘熼摼璇诲啓闆嗙浉鍖归厤


## 鍛戒护琛屽伐鍏疯縼绉�

### 鏀寔绫诲瀷
1. fabric鍒癱hainmaker
   * 婧愰摼锛歠abric锛�1.4.x
   * 鐩爣閾撅細chainmaker锛歷2.2.1
2. chainmaker1.x鍒癱hainmaker2.x
   * 婧愰摼锛歝hainmaker锛� v1.1.0銆乿1.2.x
   * 鐩爣閾撅細chainmaker锛歷2.2.1

### fabric鍒癱hainmaker

杩佺Щ宸ュ叿浣跨敤娴佺▼濡備笅锛�
1. 閰嶇疆杩佺Щ宸ュ叿婧愰摼淇℃伅
2. 鍒涘缓杩佺Щ宸ュ叿鐩爣閾�
3. 閰嶇疆杩佺Щ宸ュ叿鐩爣閾�
4. 閰嶇疆杩佺Щ宸ュ叿鍚堢害鏂囦欢
5. 鍚姩杩佺Щ宸ュ叿
6. 鍚姩鐩爣閾�

#### 閰嶇疆杩佺Щ宸ュ叿婧愰摼淇℃伅

1. 婧愰摼锛欶abric
2. fabric鐨勮縼绉婚珮搴︼紝0浠h〃杩佺Щ鍒版簮閾剧殑鏈€鏂伴珮搴�
3. fabric杩佺Щ鍒癱hainamker锛岃幏鍙杅abric鐨勫尯鍧楀彧鏀寔閫氳繃fabric-sdk鏉ヨ幏鍙�
4. config.yml閰嶇疆鏂囦欢 
   ```
   # 杩佺Щ婧愰摼淇℃伅
   origin_chain:
      transfer_height: 100
      fabric:
         chain_name: "ltzxinchain"   #杩佺Щchannel
         user_name: "Admin"  #"User1"
         config_path: "./config_path/dev/chainmaker.yml" #"./config_path/dev/config_test_endpoints.yaml"  # fabric sdk config file path
         peers:
           - peer0
           - peer1
   ```

#### 鍒涘缓杩佺Щ宸ュ叿鐩爣閾�
1. 鐩爣閾惧垵娆″惎鍔ㄦ椂锛宑hainmaker2.x 鐩爣閾剧殑鏃剁殑瑕佹眰濡備笅锛屾敞鎰忥細鐩爣閾惧垵娆″惎鍔ㄦ椂锛屽繀椤讳负1涓妭鐐癸紝鎵€鏈夎縼绉诲尯鍧楀彧闇€瑕佷竴涓叡璇嗚妭鐐规潵澶勭悊锛岃繖鏍峰彲浠ラ檷浣庤縼绉诲伐鍏峰叡璇嗛儴鍒嗗鐞嗛€昏緫锛屽悗缁縼绉绘垚鍔熷悗锛岀洰鏍囬摼鍙互閫氳繃鍙戜氦鏄撶殑鏂瑰紡鏂板鍏辫瘑鑺傜偣
- 鐗堟湰锛�: v2.2.1
- 鑺傜偣鏁帮細1
- 鍏辫瘑绫诲瀷锛歍BFT
- vm 绫诲瀷锛氶渶瑕佹敮鎸乨ocker-go


2. 鍒涘缓涓€涓ず渚媍hainmaker2.x鐩爣閾撅紝鎿嶄綔姝ラ濡備笅
   ```
   # 1.浣跨敤chainmaker鑴氭湰閮ㄧ讲銆佺紪璇戙€佸惎鍔ㄤ竴鏉hainmaker2.x鐨勭洰鏍囬摼
   cd chainmaker-go/scripts
   sh prepare.sh 1 1
   
   sh build_release.sh
   
   sh cluster_quick_start.sh
   
   # 2.鍋滄鐩爣閾�
   sh cluster_quick_stop.sh
   
   # 3.鍒犻櫎鐩爣閾剧殑data鐩綍锛屽悗缁浛鎹负杩佺Щ宸ュ叿鐢熸垚鐨勮縼绉绘暟鎹紝鍐嶅惎鍔ㄧ洰鏍囬摼锛屽嵆鍙緱鍒颁竴鏉℃嫢鏈夋簮閾惧尯鍧楁暟鎹殑鐩爣閾�
   cd chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org
   rm -rf data log

   ```


#### 閰嶇疆杩佺Щ宸ュ叿鐩爣閾�

1. fabric杩佺Щ鍒癱hainamker鍙敮鎸佽瘉涔︽ā寮忥紝鐩爣閾綾hainmaker2.x 浣跨敤鏂扮敓鎴愮殑璇佷功
2. 鍦ㄨ縼绉诲伐鍏穋onfig.yml涓紝閰嶇疆鐩爣閾剧殑鍒涗笘鍧楅厤缃�
    ```
    genesis: "./config_path/dev/bc1.yml"
    ```


#### 閰嶇疆杩佺Щ宸ュ叿鍚堢害鏂囦欢

1. 鐩綍锛歝hainmaker-transfer-tool/config_path/contract
2. 闇€瑕侀厤缃殑涓や釜鍚堢害鏂囦欢
   - assist.7z
   - transfer

3. 婧愰摼涓篺abric锛屽悎绾︽枃浠剁洰褰�
    ```
    chainmaker-transfer-tool/config_path/contract-fabric
    ```

#### 鍚姩杩佺Щ宸ュ叿
1. 鍚姩杩佺Щ宸ュ叿鐨勬祦绋�
   ```
   #杩涘叆鍛戒护琛岃縼绉诲伐鍏� 
   cd chainmaker-transfer-tool
   
   #缂栬瘧
   go build
   
   #鍚姩
   ./transfer-tool
   ```

#### 鍚姩鐩爣閾�

1. 灏嗚縼绉诲伐鍏风敓鎴愮殑鍖哄潡閾炬暟鎹甦atav2锛岄噸鍛藉悕涓篸ata锛屽鍒跺埌鐩爣閾剧殑宸ヤ綔鐩綍
   ```
   # 杩涘叆鍛戒护琛岃縼绉诲伐鍏蜂富鐩綍
   cd chainmaker-transfer-tool
   
   #閲嶅懡鍚�
   mv datav2 data
   
   #鐩爣閾惧瓨鏀綿ata鐨勭洰褰�
   chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org
   ```

2. 鍚姩鐩爣閾�
   ```
   #鐩爣閾惧瓨鏀綿ata鐨勭洰褰�
   cd chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org/bin
   
   #鍚姩鐩爣閾�
   ./start.sh
   ```

3. 楠岃瘉杩佺Щ鏄惁鎴愬姛锛屽彲浠ョ粰鍏辫瘑鑺傜偣娣诲姞涓€涓悓姝ヨ妭鐐癸紝濡傛灉鍚屾鑺傜偣鑳芥甯稿悓姝ュ尯鍧楋紝璇佹槑杩佺Щ鎴愬姛
4. 濡傛灉鎯虫柊澧炲叡璇嗚妭鐐癸紝鍙互閫氳繃鍙戜氦鏄撶殑鏂瑰紡鏂板鍏辫瘑鑺傜偣鐨勬暟閲�


### chainmaker1.x鍒癱hainmaker2.x

杩佺Щ宸ュ叿浣跨敤娴佺▼濡備笅锛�
1. 閰嶇疆杩佺Щ宸ュ叿婧愰摼淇℃伅
2. 鍒涘缓杩佺Щ宸ュ叿鐩爣閾�
3. 閰嶇疆杩佺Щ宸ュ叿鐩爣閾�
4. 閰嶇疆杩佺Щ宸ュ叿鍚堢害鏂囦欢
5. 鍚姩杩佺Щ宸ュ叿
6. 鍚姩鐩爣閾�

#### 閰嶇疆杩佺Щ宸ュ叿婧愰摼淇℃伅

1. 婧愰摼锛欳hainmaker 1.x锛屽鏋滄簮閾剧増鏈负v1.1.0锛岄渶瑕佸崟鐙瑅ersion閰嶇疆椤癸細v1.1.0
2. 杩佺Щ楂樺害锛�0浠h〃杩佺Щ鍒版簮閾剧殑鏈€鏂伴珮搴�
3. 杩佺Щ宸ュ叿鏀寔涓ょ鏂瑰紡
   * chainmaker-sdk锛岄厤缃ソchainmaker-sdk鐨勯厤缃枃浠讹細sdk_config.yml
   * 婧愰摼鐨勫瓨鍌ㄦā鍧楋紙v1.2.6鐗堟湰锛夛紝鏀寔鎷夊彇chainmaker1.x鎵€鏈夌増鏈殑閾撅紝闇€瑕佸皢chainmaker1.x婧愰摼鐨刣ata鐩綍澶嶅埗鍒皌ransfer宸ュ叿鐨勫悓绾х洰褰�

4. config.yml閰嶇疆鏂囦欢
   ```
   # 杩佺Щ婧愰摼淇℃伅
   origin_chain:
      transfer_height: 0
      chain_type: "chainmaker"
      chain_version: "v1.1.0"
   ```

#### 鍒涘缓杩佺Щ宸ュ叿鐩爣閾�
1. 鐩爣閾惧垵娆″惎鍔ㄦ椂锛宑hainmaker2.x 鐩爣閾剧殑鏃剁殑瑕佹眰濡備笅锛屾敞鎰忥細鐩爣閾惧垵娆″惎鍔ㄦ椂锛屽繀椤讳负1涓妭鐐癸紝鎵€鏈夎縼绉诲尯鍧楀彧闇€瑕佷竴涓叡璇嗚妭鐐规潵澶勭悊锛岃繖鏍峰彲浠ラ檷浣庤縼绉诲伐鍏峰叡璇嗛儴鍒嗗鐞嗛€昏緫锛屽悗缁縼绉绘垚鍔熷悗锛岀洰鏍囬摼鍙互閫氳繃鍙戜氦鏄撶殑鏂瑰紡鏂板鍏辫瘑鑺傜偣
- 鐗堟湰锛�: v2.2.1
- 鑺傜偣鏁帮細1
- 鍏辫瘑绫诲瀷锛歍BFT
- vm 绫诲瀷锛氶渶瑕佹敮鎸乨ocker-go


2. 鍒涘缓涓€涓ず渚媍hainmaker2.x鐩爣閾撅紝鎿嶄綔姝ラ濡備笅
   ```
   # 1.浣跨敤chainmaker鑴氭湰閮ㄧ讲銆佺紪璇戙€佸惎鍔ㄤ竴鏉hainmaker2.x鐨勭洰鏍囬摼
   cd chainmaker-go/scripts
   sh prepare.sh 1 1
   
   sh build_release.sh
   
   sh cluster_quick_start.sh
   
   # 2.鍋滄鐩爣閾�
   sh cluster_quick_stop.sh
   
   # 3.鍒犻櫎鐩爣閾剧殑data鐩綍锛屽悗缁浛鎹负杩佺Щ宸ュ叿鐢熸垚鐨勮縼绉绘暟鎹紝鍐嶅惎鍔ㄧ洰鏍囬摼锛屽嵆鍙緱鍒颁竴鏉℃嫢鏈夋簮閾惧尯鍧楁暟鎹殑鐩爣閾�
   cd chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org
   rm -rf data log

   ```

#### 閰嶇疆杩佺Щ宸ュ叿鐩爣閾�

1. 纭畾鐩爣閾炬槸璇佷功妯″紡杩樻槸鍏挜妯″紡
2. 濡傛灉鏄瘉涔︽ā寮忥紝闇€瑕佸垽鏂細
- 鐩爣閾句娇鐢ㄦ簮閾剧殑璇佷功
- 鐩爣閾句娇鐢ㄦ柊鐢熸垚鐨勮瘉涔�
   
3. 濡傛灉鐩爣閾句娇鐢ㄦ簮閾剧殑璇佷功锛屽鍒跺垱寤虹殑鐩爣閾剧殑閰嶇疆鏂囦欢锛岀粰鍒拌縼绉诲伐鍏�
   - 鐩爣閾捐瘉涔﹁矾寰勶細chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org/config/wx-org.chainmaker.org
   - 杩佺Щ宸ュ叿瀛樻斁鐩爣閾捐瘉涔︾殑璺緞锛歝hainmaker-transfer-tool/config_path
   - 

4. 婧愰摼璇佷功瀹氫箟浜嗗叡璇嗚妭鐐圭殑id鍜岀粍缁囧悕锛屽洜姝ょ洰鏍囬摼鐨勯厤缃枃浠禼hainmaker.yml鍜宐c1.yml锛屼篃瑕佷娇鐢ㄦ簮閾剧殑閰嶇疆鏂囦欢涓浉鍚岀殑鍏辫瘑鑺傜偣id鍜岀粍缁囷紝鐩爣閾剧殑閰嶇疆鏂囦欢鏇存敼锛�

   - 杩佺Щ宸ュ叿涓紝鐩爣閾剧殑bc1.yml闇€瑕佹洿鏀规牴璇佷功鐨勪綅缃�
       ```
       # Trust roots is used to specify the organizations' root certificates in permessionedWithCert mode.
       # When in permessionedWithKey mode or public mode, it represents the admin users.
       trust_roots:
       # org id and root file path list.
      - org_id: "wx-org1.chainmaker.org"
           root:
             - "./config_path/wx-org1.chainmaker.org/certs/ca/wx-org1.chainmaker.org/ca.crt"
       ```
   
5. 鍦ㄨ縼绉诲伐鍏穋onfig.yml涓紝閰嶇疆鐩爣閾剧殑鍒涗笘鍧楅厤缃�
    ```
    genesis: "./config_path/dev/bc1.yml"
    ```


#### 閰嶇疆杩佺Щ宸ュ叿鍚堢害鏂囦欢

1. 鐩綍锛歝hainmaker-transfer-tool/config_path/contract
2. 闇€瑕侀厤缃殑涓や釜鍚堢害鏂囦欢
   - assist.7z
   - transfer

3. 婧愰摼涓篶hainmaker1.x锛屽悎绾︽枃浠剁洰褰�
    ```
    chainmaker-transfer-tool/config_path/contract-cm
    ```

#### 鍚姩杩佺Щ宸ュ叿
1. 缂栬瘧銆佸惎鍔ㄨ縼绉诲伐鍏风殑娴佺▼
   ```
   # 杩涘叆鍛戒护琛岃縼绉诲伐鍏蜂富鐩綍
   cd chainmaker-transfer-tool
   
   #缂栬瘧
   go build
   
   #鍚姩
   ./transfer-tool
   
   ```
2. 杩佺Щ瀹屾垚鍚庯紝鐢熸垚鐨勭洰鏍囬摼鍖哄潡鏁版嵁浣嶄簬杩佺Щ宸ュ叿涓荤洰褰曪細chainmaker-transfer-tool/datav2


#### 鍚姩鐩爣閾�

1. 灏嗚縼绉诲伐鍏风敓鎴愮殑鍖哄潡閾炬暟鎹甦atav2锛岄噸鍛藉悕涓篸ata锛屽鍒跺埌鐩爣閾剧殑宸ヤ綔鐩綍
   ```
   # 杩涘叆鍛戒护琛岃縼绉诲伐鍏蜂富鐩綍
   cd chainmaker-transfer-tool
   
   #閲嶅懡鍚�
   mv datav2 data
   
   #鐩爣閾惧瓨鏀綿ata鐨勭洰褰�
   chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org
   ```

2. 鍚姩鐩爣閾�
   ```
   #鐩爣閾惧瓨鏀綿ata鐨勭洰褰�
   cd chainmaker-go/build/release/chainmaker-v2.2.1-wx-org.chainmaker.org/bin
   
   #鍚姩鐩爣閾�
   ./start.sh
   ```

3. 楠岃瘉杩佺Щ鏄惁鎴愬姛锛屽彲浠ョ粰鍏辫瘑鑺傜偣娣诲姞涓€涓悓姝ヨ妭鐐癸紝濡傛灉鍚屾鑺傜偣鑳芥甯稿悓姝ュ尯鍧楋紝璇佹槑杩佺Щ鎴愬姛
4. 濡傛灉鎯虫柊澧炲叡璇嗚妭鐐癸紝鍙互閫氳繃鍙戜氦鏄撶殑鏂瑰紡鏂板鍏辫瘑鑺傜偣鐨勬暟閲�