可以參照示例合約。
這是乙個可以跨鏈轉移 token 的 token 合約。
相比普通的 token 合約增加了send_to_side_chain
和recv_from_side_chain
兩個函式用於跨鏈轉 token 。
send_to_side_chain
只是在一條鏈上扣掉一部分 token 。
等交易執行之後,使用 jsonrpc 介面cita_gettransactionproof
獲取交易執行的證明。
將證明傳送到另外乙個鏈上的recv_from_side_chain
。校驗證明之後解析出原始交易的內容。在這個例子裡就是轉賬金額。
然後執行整個交易的後半段,給同樣的使用者增加同樣數量的 token ,完成 token 的跨鏈轉移。
send_to_side_chain
中destfunchasher
是recv_from_side_chain
的 function signature 。用來確保傳送方和接受方的合約是匹配的。
txdatasize
是跨鏈傳遞的資料的大小。即send_to_side_chain
除去前兩個引數(固定必須的引數)之後所有引數的總大小,這些引數需要以 bytes 的方式傳遞。
nonce
是為了防止跨鏈交易重放攻擊增加的,作用同cita
交易中的nonce
。
跨鏈交易必須嚴格按照交易發生的順序在兩條鏈之間傳遞,因此crosschain_nonce
設計為自增的計數。
將證明傳送到另外乙個鏈上之前,先呼叫get_cross_chain_nonce
獲取當前nonce
。
同時有工具可以解析證明,提取證明中的nonce
。只有兩者相等才能傳送成功,如果不相等,則說明證明已經傳送過,可以丟棄;或者前序交易還未傳送,還需要等待。
sendtransaction
中的event
為跨鏈提供必須的資訊。請勿修改,也不要在sendtosidechain
中增加其他event
。
recv_from_side_chain
解析出原始交易的資料為bytes
型別,使用者需要參照send_to_side_chain
自行解析成對應的型別。
目前,側鏈使用系統合約 chainmanager 進行管理。
在主側鏈分別部署跨鏈合約,分別得到合約位址。
呼叫任意一條鏈的跨鏈合約的send_to_side_chain
方法, 使用接收鏈(另一條鏈)的 id 、接收鏈跨鏈合約的合約位址和轉移的 token 數量作為引數, 傳送跨鏈轉移 token 交易,並得到交易 hash 。
在操作步驟中不區分主鏈和側鏈。
使用跨鏈交易的交易 hash 、該交易所在鏈的 id,和乙個配置檔案作為入參呼叫工具:
cita-relayer-parser -c send_chain_id -t tx_hash -f relayer-parser.json
其中配置檔案relayer-parser.json
目前主要有 2 個引數:
範例如下:
},
},},}]
},},
},},}]
}]}
該工具主要做的任務為:
在傳送鏈和接收鏈分別使用跨鏈合約中的查詢介面(例項合約中get_balance
方法)查詢當前使用者的 token 數量。
使用者轉移到側鏈的資產,需要傳送跨鏈交易才能再回到主鏈。如果側鏈不再工作,使用者將無法通過這種方式從側鏈退出。
為此我們提供了狀態證明,通過 jsonrpc 介面getstateproof
,可以獲取合約中乙個變數在指定高度的值的證明。
將這個證明傳送到主鏈上的chainmanager
系統合約中的verifystate
,對證明進行校驗之後會進行後續處理。
state proof
功能需要將側鏈的 block header 同步到主鏈。
relayer 可以在側鏈上呼叫getblockheader
,獲取指定高度的側鏈的block header
,然後將資料傳送到主鏈上的chainmanager
系統合約verifyblockheader
。
chainmanager
系統合約驗證之後,儲存側鏈每個高度的state root
,用來驗證使用者提交的state proof
。
block header
需要按順序傳遞,因此chainmanager
系統合約提供了getexpectedblocknumber
,可以查詢指定側鏈同步的進度。
考慮極端的情況,側鏈可能隨時退出。
因此使用者在側鏈上發生的交易,必須等交易所在的 block 的 header 同步到主鏈,交易才算確定。
這樣即使側鏈退出,也可以用過state proof
的方式在主鏈上恢復對應的資產。
CS 區塊鏈 智慧型合約
和雲計算相似,占用區塊鏈的資源 不管是簡單的轉賬交易,還是合約的部署和執行 同樣需要付出相應的費用。以太坊上用gas機制來計費,gas也可以認為是乙個工作量單位,智慧型合約越複雜 計算步驟的數量和型別,占用的記憶體等 用來完成執行就需要越多gas。gas 由執行合約的人在提交執行合約請求的時候規定,...
區塊鏈學習筆記 智慧型合約
智慧型合約這個詞首次出現的時間是在1994年由尼克薩博提出的概念。而尼克薩博所提出的智慧型合約的概念是這樣描述 乙個智慧型合約是一套以數字形式定義的約定,包括合約參與方可以在上面執行這些約定的協議。智慧型合約的基本思想是,各種各樣的合約條款可以嵌入到我們使用的硬體和軟體中從而使得攻擊者需要很大的代價...
區塊鏈智慧型合約開發小記
使用 python和 solidity語言,drf框架開發智慧型合約的一些踩坑記錄。compile source和compile standard方法都無法import 檔案進行編譯,提示找不到檔案,使用compile files方法吧。compile files 方法裡面合約路徑不能有冒號,使用相...