# 浠g悊璺ㄩ摼鏂规 ## 姒傝堪 浠€涔堟槸璺ㄩ摼锛熺畝鍗曠悊瑙e氨鏄袱鏉℃垨澶氭潯閾句箣闂磋繘琛屾暟鎹氦鎹紝浠ヤ竴涓畝鍗曟槗鎳傜殑妗堜緥鏉ヨ鏄庯紝鍋囪鏈変袱鏉¢摼锛屽叾涓竴鏉¢摼鏄嫑琛岋紙鐢ㄦ埛A鍦ㄨ閾惰涓湁瀛樻锛夛紝鍙﹀涓€鏉¢摼鏄缓琛岋紙鐢ㄦ埛B鍦ㄨ閾惰涓湁璐︽埛锛夛紝濡傛灉鐢ㄦ埛A鎯冲皢鑷繁鍦ㄦ嫑琛岀殑瀛樻杞处缁欑敤鎴稡锛堝缓琛岋級锛岄偅涔堝氨闇€瑕佽繘琛岃法閾炬搷浣溿€� 鍒濈増璺ㄩ摼閲囩敤缃戝叧鐨勬柟妗堝疄鐜帮紝璇ユ柟妗堝熀浜庝竴涓亣璁撅細鍦ㄨ仈鐩熼摼鐜涓紝鎵€鏈夎妭鐐归兘鏄彲淇$殑锛屼細瀛樺湪寮傚父鑺傜偣锛屼絾涓嶄細瀛樺湪鎭舵剰鑺傜偣銆備负浜嗚В鍐冲彲淇℃€х殑闂锛屽悗缁湪鏂扮殑鐗堟湰涓細閲囩敤Relay鐨勬柟妗堛€� > 娓╅Θ鎻愮ず锛屼唬鐞嗚法閾句娇鐢ㄦ寚鍗楄鍙傝锛歔浠g悊璺ㄩ摼浣跨敤鎸囧崡](../manage/浠g悊璺ㄩ摼浣跨敤鎸囧崡) ## 涓昏娴佺▼ 涓轰簡鑳藉鍏煎澶氱寮傛瀯閾撅紝缁忚繃澶氭柟璋冪爺锛屾湰璺ㄩ摼鏂规閲囩敤姝�/閫嗗悜鎿嶄綔鐨勫悎绾﹀疄鐜版柟寮忥紝鍗崇敤鎴烽渶瑕佹彁渚涙鍚戜笌閫嗗悜鐨勫叿浣撲笟鍔′氦鏄撱€傝繕鏄互閾惰杞处涓轰緥锛屽浜庣敤鎴稟鑰岃█锛屽叾鍦ㄦ暣涓法閾句簨鍔′腑鐨勬搷浣滀腑瀵规嫑琛岄摼鐨勬搷浣滈渶瑕佹彁渚涗袱涓笟鍔′氦鏄擄紝绗竴涓氨鏄甯哥殑瀛樻鍑忓皯浜ゆ槗锛岀浜屼釜鍒欐槸閫嗗悜涓氬姟浜ゆ槗锛屽嵆鍑虹幇寮傚父鏃剁殑鍥炴粴鎿嶄綔锛岄€氬父鑰岃█瀵瑰簲鐨勬槸瀛樻鐨勫鍔犮€�  璺ㄩ摼娴佺▼璇︾粏鎻忚堪锛� 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浠ュ強浜嬪姟绠$悊鍣ㄣ€�  ## UITP鍗忚 ### 鍗忚姒傝堪 UITP鍗忚鏄法閾句唬鐞嗛棿鏁版嵁浜ゆ崲鐨勫崗璁紝瀹冨彧鏄涓昏鏁版嵁缁撴瀯鐨勪竴绉嶆弿杩帮紝涓嶉檺鍒跺紑鍙戣€呬娇鐢ㄤ綍绉嶄紶杈撴柟寮忋€� ### CrossEvent CrossEvent鍗宠法閾句簨浠讹紝鎻忚堪鐨勬槸鐢ㄦ埛閫氳繃璺ㄩ摼SDK鍙戦€佸埌璺ㄩ摼浠g悊鐨勬暟鎹璞°€� `CrossEvent`鏁版嵁缁撴瀯 | 鍙傛暟 | 璇存槑 | | --------- | -------------------------------------------- | | CrossID | 璺ㄩ摼ID锛屽叏灞€鍞竴锛岀敱璺ㄩ摼瀹㈡埛绔骇鐢� | | CrossTxs | 璺ㄩ摼浜ゆ槗闆嗗悎锛屽叿浣撳璞¤琛� `CrossTx`鏁版嵁缁撴瀯 | | Version | 鍗忚鐗堟湰鍙� | | Timestamp | 璺ㄩ摼鍙戠敓鏃堕棿鎴� | | Extra | 鑷畾涔夊瓧娈� | `CrossTx`鏁版嵁缁撴瀯 | 鍙傛暟 | 璇存槑 | | --------------- | ----------------------------------------------------- | | ChainID | 涓氬姟閾綢D锛屽湪涓€涓法閾剧郴缁熶腑锛孋hainID鍞竴鎻忚堪涓€鏉′笟鍔¢摼 | | Index | 璇ヤ氦鏄撳搴旂殑璺ㄩ摼鎿嶄綔绱㈠紩锛屽嵆閾剧殑鎵ц椤哄簭 | | ExecutePayload | 鎵ц闃舵鍐呭杞戒綋 | | CommitPayload | 鎻愪氦闃舵鍐呭杞戒綋 | | RollbackPayload | 鍥炴粴闃舵鍐呭杞戒綋 |  ### 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 | 瀵硅璋冪敤鐨勯澶栦俊鎭� |  ### 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 | 鑷畾涔夊瓧娈� |  ### 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 | 鑷畾涔夊瓧娈� | 