# 浠g悊璺ㄩ摼鏂规


## 姒傝堪

浠€涔堟槸璺ㄩ摼锛熺畝鍗曠悊瑙e氨鏄袱鏉℃垨澶氭潯閾句箣闂磋繘琛屾暟鎹氦鎹紝浠ヤ竴涓畝鍗曟槗鎳傜殑妗堜緥鏉ヨ鏄庯紝鍋囪鏈変袱鏉¢摼锛屽叾涓竴鏉¢摼鏄嫑琛岋紙鐢ㄦ埛A鍦ㄨ閾惰涓湁瀛樻锛夛紝鍙﹀涓€鏉¢摼鏄缓琛岋紙鐢ㄦ埛B鍦ㄨ閾惰涓湁璐︽埛锛夛紝濡傛灉鐢ㄦ埛A鎯冲皢鑷繁鍦ㄦ嫑琛岀殑瀛樻杞处缁欑敤鎴稡锛堝缓琛岋級锛岄偅涔堝氨闇€瑕佽繘琛岃法閾炬搷浣溿€�

鍒濈増璺ㄩ摼閲囩敤缃戝叧鐨勬柟妗堝疄鐜帮紝璇ユ柟妗堝熀浜庝竴涓亣璁撅細鍦ㄨ仈鐩熼摼鐜涓紝鎵€鏈夎妭鐐归兘鏄彲淇$殑锛屼細瀛樺湪寮傚父鑺傜偣锛屼絾涓嶄細瀛樺湪鎭舵剰鑺傜偣銆備负浜嗚В鍐冲彲淇℃€х殑闂锛屽悗缁湪鏂扮殑鐗堟湰涓細閲囩敤Relay鐨勬柟妗堛€�

> 娓╅Θ鎻愮ず锛屼唬鐞嗚法閾句娇鐢ㄦ寚鍗楄鍙傝锛歔浠g悊璺ㄩ摼浣跨敤鎸囧崡](../manage/浠g悊璺ㄩ摼浣跨敤鎸囧崡)

## 涓昏娴佺▼

涓轰簡鑳藉鍏煎澶氱寮傛瀯閾撅紝缁忚繃澶氭柟璋冪爺锛屾湰璺ㄩ摼鏂规閲囩敤姝�/閫嗗悜鎿嶄綔鐨勫悎绾﹀疄鐜版柟寮忥紝鍗崇敤鎴烽渶瑕佹彁渚涙鍚戜笌閫嗗悜鐨勫叿浣撲笟鍔′氦鏄撱€傝繕鏄互閾惰杞处涓轰緥锛屽浜庣敤鎴稟鑰岃█锛屽叾鍦ㄦ暣涓法閾句簨鍔′腑鐨勬搷浣滀腑瀵规嫑琛岄摼鐨勬搷浣滈渶瑕佹彁渚涗袱涓笟鍔′氦鏄擄紝绗竴涓氨鏄甯哥殑瀛樻鍑忓皯浜ゆ槗锛岀浜屼釜鍒欐槸閫嗗悜涓氬姟浜ゆ槗锛屽嵆鍑虹幇寮傚父鏃剁殑鍥炴粴鎿嶄綔锛岄€氬父鑰岃█瀵瑰簲鐨勬槸瀛樻鐨勫鍔犮€�

![涓昏璁捐](../images/main-design.png)

璺ㄩ摼娴佺▼璇︾粏鎻忚堪锛�

1. 涓氬姟绯荤粺璋冪敤璺ㄩ摼SDK鍙戦€丆rossChainTx(CCTx)鑷砅roxyA锛堣法閾句唬鐞嗭級锛�
2. ProxyA瑙f瀽鑾峰彇ChainA瀵瑰簲Execute浜ゆ槗锛屽苟鍙戦€佽嚦ChainA锛圱xA request锛夛紱
3. ChainA鎵цExecute浜ゆ槗锛堜簨鍔″悎绾﹁皟鐢ㄤ笟鍔″悎绾︼級锛�
4. ChainA涓奅xecute浜ゆ槗锛圱xA锛夋墽琛屽畬鎴愬悗锛�
    1. SPV(A)鑺傜偣浼氬疄鏃跺悓姝hainA鐨勬渶鏂颁氦鏄撲俊鎭紱
    2. 杩斿洖缁橮roxyA褰撳墠浜ゆ槗鐨勬墽琛岀粨鏋滐紱
5. ProxyA灏嗗簲绛旇浆鎹负TxProof(TxA Proof)锛屽苟灏咰CTx鍙奣xProof杞彂鑷砅roxyB锛�
6. ProxyB璋冪敤SPV(A)鐨勪氦鏄撻獙璇佹帴鍙o紱
7. SPV(A)瀵硅浜ゆ槗杩涜杩囬獙璇侊紝骞惰繑鍥為獙璇佸簲绛旂粨鏋滐紱
8. 楠岃瘉鎴愬姛锛孭roxyB灏員xA Proof鍙戦€佸埌ChainB
9. ChainB鎵цSave瀛樺偍TxA Proof(璋冪敤浜嬪姟鍚堢害)
10. 杩斿洖缁橮roxyB SaveProof鐨勬墽琛岀粨鏋�
11. ProxyB瑙f瀽骞惰幏鍙朇hainB涓搴旂殑Execute浜ゆ槗锛屽苟鍙戦€佽嚦ChainB锛圱xB request锛夛紱
12. ChainB鎵цExecute浜ゆ槗锛堜簨鍔″悎绾﹁皟鐢ㄤ笟鍔″悎绾︼級锛�
13. ChainB涓奅xecute浜ゆ槗锛圱xB锛夋墽琛屽畬鎴愬悗锛�
    1. SPV(B)鑺傜偣浼氬疄鏃跺悓姝hainB鐨勬渶鏂颁氦鏄撲俊鎭紱
    2. 杩斿洖璇ヤ氦鏄撳簲绛旇嚦ProxyB锛�
14. ProxyB灏嗗簲绛旇浆鎹负TxProof(TxB Proof)锛屽苟灏員xProof鍙戦€佽嚦ProxyA锛�
15. ProxyA鎺ユ敹鍒癟xBProof鍚庤皟鐢⊿PV(B)鐨勪氦鏄撻獙璇佹帴鍙o紱
16. SPV(B)瀵硅浜ゆ槗杩涜楠岃瘉锛屽苟杩斿洖楠岃瘉搴旂瓟缁撴灉锛�
17. 楠岃瘉鎴愬姛锛孭roxyA灏員xB Proof鍙戦€佸埌ChainA
18. ChainA鎵цSave瀛樺偍TxB Proof(璋冪敤浜嬪姟鍚堢害)
19. 杩斿洖缁橮roxyA SaveProof鐨勬墽琛岀粨鏋�
20. ProxyA杩涜Commit璋冨害锛�
    1. ProxyA鎻愪氦ChainA鐨凜ommit浜ゆ槗锛堟洿鏂颁簨鍔″悎绾︾姸鎬侊級鑷矯hainA锛�
    2. ProxyA鍚屾椂閫氱煡ChainB杩涜Commit鎿嶄綔锛�
    3. ProxyB瑙f瀽鎺ユ敹鍒癈ommit娑堟伅锛屽苟鎻愪氦ChainB鐨凜ommit浜ゆ槗锛堟洿鏂颁簨鍔″悎绾︾姸鎬侊級鑷矯hainB锛�
21. ProxyA姹囨€讳氦鏄撶殑鎵ц鎯呭喌锛岀敓鎴怌CResponse锛屽苟杩斿洖鑷充笟鍔$郴缁熴€�

涓轰簡鍦ㄤ竴瀹氱▼搴︿笂瀵硅法閾句簨鍔¤繘琛屾帶鍒讹紝鏈法閾炬柟妗堜腑澧炲姞浜嗕簨鍔″悎绾︾殑姒傚康锛岀敤鎴风殑鍏蜂綋涓氬姟鍚堢害涓嶄細鐩存帴鎵ц锛岃€屾槸閫氳繃浜嬪姟鍚堢害杩涜璋冪敤锛屽浜庢瘡涓€娆¤法閾炬搷浣滐紝绯荤粺浼氬垎閰嶄竴涓敮涓€鐨勮法閾綢D锛屼簨鍔″悎绾﹂€氳繃璇D瀵硅法閾剧殑娴佺▼杩涜鎺у埗锛岄槻姝㈤噸澶嶆墽琛岀殑鍙戠敓銆�

## 妯″潡鍒嗗眰璁捐

璺ㄩ摼浠g悊閲囩敤浜嗘ā鍧楀寲鍒嗗眰璁捐锛屼富瑕佸垎涓轰笁灞傦細鍩虹灞傘€佺粍浠跺眰鍜屼笟鍔″眰銆�

+  鍩虹灞傦細涓鸿法閾句唬鐞嗗悇涓粍浠舵彁渚涘熀纭€鏈嶅姟锛屼富瑕佸寘鎷棩蹇椼€佹暟鎹簱鍜岀綉缁滃鐞嗙瓑锛�
+ 缁勪欢灞傦細鎻愪緵涓氬姟娴佺▼璋冪敤鐨勫悇绉嶇粍浠讹紝鍖呮嫭浣嗕笉闄愪簬閫氶亾銆佽矾鐢便€佺洃鍚櫒銆佽瘉鏄庡櫒銆侀€傞厤鍣ㄧ瓑锛�
+ 涓氬姟灞傦細涓昏鐨勪笟鍔℃祦绋嬫帶鍒讹紝鍖呮嫭浜嗗绉岺andler浠ュ強浜嬪姟绠$悊鍣ㄣ€�

![妯″潡鍙婂垎灞俔(../images/module-layer.png)



## 鏁版嵁娴佽浆

涓嬮潰鏄暣涓暟鎹祦鍦ㄨ法閾惧崗璁紙鍖呮嫭鍐呴儴妯″潡锛変腑鍩烘湰鐨勬祦杞儏鍐碉紝鍦ㄤ笉鍚屾ā鍧椾箣闂存祦杞€氳繃UITP鍗忚銆�

![鏁版嵁娴乚(../images/data-stream.png)



## 浜嬩欢璇︾粏鍒嗙被

鍦ㄨ法閾句唬鐞嗕腑锛屾墍鏈夌殑鏁版嵁娴侊紙鍖呮嫭鐩存帴浼犺緭鍜岄棿鎺ヤ紶杈擄級閮借绉颁负Event锛堜簨浠讹級锛屼笅闈㈡槸Event鐨勮缁嗗垎绫汇€�

![浜嬩欢璇︾粏鍒嗙被](../images/event-types.png)



## UITP鍗忚

### 鍗忚姒傝堪

UITP鍗忚鏄法閾句唬鐞嗛棿鏁版嵁浜ゆ崲鐨勫崗璁紝瀹冨彧鏄涓昏鏁版嵁缁撴瀯鐨勪竴绉嶆弿杩帮紝涓嶉檺鍒跺紑鍙戣€呬娇鐢ㄤ綍绉嶄紶杈撴柟寮忋€�

### CrossEvent

CrossEvent鍗宠法閾句簨浠讹紝鎻忚堪鐨勬槸鐢ㄦ埛閫氳繃璺ㄩ摼SDK鍙戦€佸埌璺ㄩ摼浠g悊鐨勬暟鎹璞°€�

`CrossEvent`鏁版嵁缁撴瀯

| 鍙傛暟      | 璇存槑                                         |
| --------- | -------------------------------------------- |
| CrossID   | 璺ㄩ摼ID锛屽叏灞€鍞竴锛岀敱璺ㄩ摼瀹㈡埛绔骇鐢�           |
| CrossTxs  | 璺ㄩ摼浜ゆ槗闆嗗悎锛屽叿浣撳璞¤琛� `CrossTx`鏁版嵁缁撴瀯 |
| Version   | 鍗忚鐗堟湰鍙�                                   |
| Timestamp | 璺ㄩ摼鍙戠敓鏃堕棿鎴�                               |
| Extra     | 鑷畾涔夊瓧娈�                                   |

`CrossTx`鏁版嵁缁撴瀯

| 鍙傛暟            | 璇存槑                                                  |
| --------------- | ----------------------------------------------------- |
| ChainID         | 涓氬姟閾綢D锛屽湪涓€涓法閾剧郴缁熶腑锛孋hainID鍞竴鎻忚堪涓€鏉′笟鍔¢摼 |
| Index           | 璇ヤ氦鏄撳搴旂殑璺ㄩ摼鎿嶄綔绱㈠紩锛屽嵆閾剧殑鎵ц椤哄簭              |
| ExecutePayload  | 鎵ц闃舵鍐呭杞戒綋                                      |
| CommitPayload   | 鎻愪氦闃舵鍐呭杞戒綋                                      |
| RollbackPayload | 鍥炴粴闃舵鍐呭杞戒綋                                      |



![UITP-CrossEvent](../images/UITP-CrossEvent.png)



### TransactionEvent

TransactionEvent鍗充氦鏄撲簨浠讹紝鎻忚堪鐨勬槸涓や釜璺ㄩ摼浠g悊鏈嶅姟涔嬮棿鐨勬秷鎭紶閫掋€�

`TransactionEvent`鏁版嵁缁撴瀯

| 鍙傛暟    | 璇存槑                                                         |
| ------- | ------------------------------------------------------------ |
| CrossID | 璺ㄩ摼ID锛屽叏灞€鍞竴锛岀敱璺ㄩ摼瀹㈡埛绔骇鐢�                           |
| OpFunc  | 鎿嶄綔鏂规硶锛屽嵆浜嬪姟涓や釜闃舵涓殑鏌愪釜鎿嶄綔锛�0锛欵xecute锛�1锛欳ommit锛�2锛歊ollback锛� |
| ChainID | 鍏蜂綋鎿嶄綔鐨勪笟鍔¢摼ID锛屽湪涓€涓法閾剧郴缁熶腑锛孋hainID鍞竴鎻忚堪涓€鏉′笟鍔¢摼 |
| Payload | 褰撳墠閾炬搷浣滅殑鍏蜂綋鍐呭杞戒綋                                     |
| TxProof | 鎻愪氦鐨勪氦鏄撹瘉鏄庯紝鍏朵腑鍚湁涓婁釜鎿嶄綔鐨勪俊鎭紝鐢ㄤ簬鐩殑閾炬牎楠岋紝鍏跺叿浣撶粨鏋勫弬瑙� `TxProof`鏁版嵁缁撴瀯 |

`TxProof`鏁版嵁缁撴瀯

| 鍙傛暟        | 璇存槑                                                         |
| ----------- | ------------------------------------------------------------ |
| ChainID     | 鍏蜂綋鎿嶄綔鐨勪笟鍔¢摼ID锛屽湪涓€涓法閾剧郴缁熶腑锛孋hainID鍞竴鎻忚堪涓€鏉′笟鍔¢摼 |
| TxKey       | 浜ゆ槗Key锛岃〃绀烘彁渚涜瘉鏄庣殑浜ゆ槗鍏跺湪閾句笂鐨勫敮涓€鎬ф爣璇嗭紝渚嬪ChainMaker涓殑TxId |
| BlockHeight | 浜ゆ槗鎵€鍦ㄥ尯鍧楅珮搴�                                             |
| Index       | 浜ゆ槗鎵€鍦ㄥ尯鍧椾腑鐨勭储寮�                                         |
| Contract    | 浜ゆ槗涓墍鍚湁鐨勫悎绾︾浉鍏充俊鎭紝鍏跺叿浣撶粨鏋勮`Contract`鏁版嵁缁撴瀯   |

`Contract`鏁版嵁缁撴瀯

| 鍙傛暟       | 璇存槑                 |
| ---------- | -------------------- |
| Name       | 鍚堢害鍚嶇О             |
| Version    | 璋冪敤鍚堢害鐨勭増鏈彿淇℃伅 |
| Method     | 璋冪敤鍚堢害鐨勫叿浣撴柟娉曞悕 |
| Parameters | 鍚堢害璋冪敤鏃剁殑鍏ュ弬     |
| ExtraData  | 瀵硅璋冪敤鐨勯澶栦俊鎭�   |



![UITP-TxEvent](../images/UITP-TxEvent.png)



### CrossResp

CrossResp鍗宠法閾句簨浠跺簲绛旓紝鏄法閾句唬鐞嗗畬鎴愬悗锛堜篃鍙互鏄紓姝ワ級瀵瑰鎴风鐨勫簲绛旂粨鏋溿€�

`CrossResp`鏁版嵁缁撴瀯

| 鍙傛暟       | 璇存槑                                                         |
| ---------- | ------------------------------------------------------------ |
| CrossID    | 璺ㄩ摼ID锛屽叏灞€鍞竴锛岀敱璺ㄩ摼瀹㈡埛绔骇鐢�                           |
| Code       | 鏈璺ㄩ摼鐨勬渶缁堢粨鏋滐紝鍏跺叿浣撴弿杩板涓嬶細0锛歋uccess锛�1锛欶ailure锛�2锛歎nknown锛涙绉嶆儏鍐甸渶瑕佸鎴风鍐嶆涓诲姩鏌ヨ |
| Msg        | 鏈璺ㄩ摼鎿嶄綔杩斿洖鐨勪俊鎭紝濡傛灉Code 涓哄け璐ワ紝鍒欐弿杩扮殑鏄け璐ョ殑鍘熷洜銆� |
| TxResponse | 浜ゆ槗搴旂瓟闆嗗悎锛屽叿浣撶粨鏋勫弬鑰僠TxResponse`鏁版嵁缁撴瀯               |

`TxResponse`鏁版嵁缁撴瀯

| 鍙傛暟        | 璇存槑                                                         |
| ----------- | ------------------------------------------------------------ |
| ChainID     | 鍏蜂綋鎿嶄綔鐨勪笟鍔¢摼ID锛屽湪涓€涓法閾剧郴缁熶腑锛孋hainID鍞竴鎻忚堪涓€鏉′笟鍔¢摼 |
| TxKey       | 浜ゆ槗Key锛岃〃绀烘彁渚涜瘉鏄庣殑浜ゆ槗鍏跺湪閾句笂鐨勫敮涓€鎬ф爣璇嗭紝渚嬪ChainMaker涓殑TxId |
| BlockHeight | 浜ゆ槗鎵€鍦ㄥ尯鍧楅珮搴�                                             |
| Index       | 浜ゆ槗鎵€鍦ㄥ尯鍧椾腑鐨勭储寮�                                         |
| Extra       | 鑷畾涔夊瓧娈�                                                   |

![UITP-CrossResp](../images/UITP-CrossResp.png)



### TransactionEventResp

TransactionEventResp鍗充簨鍔′簨浠跺簲绛旓紝鏄TransactionEvent鐨勫簲绛斻€�

`TransactionEventResp`鏁版嵁缁撴瀯

| 鍙傛暟        | 璇存槑                                                         |
| ----------- | ------------------------------------------------------------ |
| CrossID     | 璺ㄩ摼ID锛屽叏灞€鍞竴锛岀敱璺ㄩ摼瀹㈡埛绔骇鐢�                           |
| OpFunc      | 鎿嶄綔鏂规硶锛屽嵆浜嬪姟涓や釜闃舵涓殑鏌愪釜鎿嶄綔锛�0锛欵xecute锛�1锛欳ommit锛�2锛歊ollback锛� |
| Code        | 鏈璺ㄩ摼鐨勬渶缁堢粨鏋滐紝鍏跺叿浣撴弿杩板涓嬶細0锛歋uccess锛�1锛欶ailure锛�2锛歎nknown锛涙绉嶆儏鍐甸渶瑕佸鎴风鍐嶆涓诲姩鏌ヨ |
| Msg         | 鏈璺ㄩ摼鎿嶄綔杩斿洖鐨勪俊鎭紝濡傛灉Code 涓哄け璐ワ紝鍒欐弿杩扮殑鏄け璐ョ殑鍘熷洜銆� |
| ChainID     | 鍏蜂綋鎿嶄綔鐨勪笟鍔¢摼ID锛屽湪涓€涓法閾剧郴缁熶腑锛孋hainID鍞竴鎻忚堪涓€鏉′笟鍔¢摼 |
| TxKey       | 浜ゆ槗Key锛岃〃绀烘彁渚涜瘉鏄庣殑浜ゆ槗鍏跺湪閾句笂鐨勫敮涓€鎬ф爣璇嗭紝渚嬪ChainMaker涓殑TxId |
| BlockHeight | 浜ゆ槗鎵€鍦ㄥ尯鍧楅珮搴�                                             |
| Index       | 浜ゆ槗鎵€鍦ㄥ尯鍧椾腑鐨勭储寮�                                         |
| Contract    | 鍚堢害淇℃伅鐨勭殑杞戒綋锛岀敤浜庡叾浠栦唬鐞嗗璇ヤ氦鏄撹繘琛岃瘉鏄庝娇鐢紝鍏惰缁嗙粨鏋勫弬瑙乣Contract`鏁版嵁缁撴瀯 |
| Extra       | 鑷畾涔夊瓧娈�                                                   |



![UITP-TxEventResp](../images/UITP-TxEventResp.png)