3.08 EOS智慧合約(下)
阿新 • • 發佈:2018-12-07
1.什麼是李嘉圖合約
- 李嘉圖合約是一種特殊的結構化文字,主要用作交易中明確雙方的意圖,是做交易之前檢視的要遵循的規則
- 以後正式合法的合約都要有李嘉圖合約
- EOS白皮書中所提到的,所有的交易,都會是基於對憲法同意的基礎之上進行的,這就意味著,EOS啟動後,使用者所有的鏈上行為,都會涉及到李嘉圖合約
- 簡單說,李嘉圖合約是一個檔案,定義了通過網際網路發行的某種型別的價值,標識發行人和簽署人,將發行人認為合適的期限和條款加入其中,從而讓該檔案成為合約
2.李嘉圖合約可以解決什麼問題
- 智慧合約存在一個普遍問題:涉及到交易雙方意圖型別的問題時,僅靠程式碼本身,無法良好解決
- 對於一些概念的理解,類似現實世界之中的交易合同的約定,有時僅靠智慧合約是無法做到的,這時,具有法律效應的文字合約,結合依賴區塊鏈技術開發的智慧合約,會帶來更多的準確性
3.李嘉圖合約在哪
- EOS智慧合約abi檔案由5部分組成
{
"types":[...], //定義型別的別名
"structs":[...], //各個型別的資料結構
"actions":[...], //智慧合約的action
"tables":[...], //資料結構體,表
"ricardian_clauses":[...] //李嘉圖條款
}
4.Action
- 一個智慧合約可以定義多個Action,每個Action代表一次單獨的操作
- 對映到程式碼中,可以將Action理解成類中的函式,函式中定義了呼叫Action時需要執行的操作
- 智慧合約與賬戶通過Action的方式進行通訊,Action可以單獨執行,也可以和其他Action一起作為一個整體執行
- 例如:賬戶小王執行了[還錢]Action,[還錢]Action通知賬戶工商銀行,執行[轉賬]Action,[轉賬]Action又通知賬戶[小李],執行[簡訊通知]Action
5.Transaction
- 是一個或多個Action的集合,一個Transaction中的Action要麼全部成功,要麼全部失敗,與資料庫事務很像
- 前面例子中,[還錢]Action、[轉賬]Action、[簡訊通知]Action可以被包含在一個事務中
6.合約互動模式
- EOSIO中提供了兩種智慧合約的互動模式
- Inline(內聯)
- Deferred(延遲)
- Inline可以理解為實時互動模式,一個Transaction中所有的Action,實時呼叫,順序執行,例如A給B轉賬,銀行觸發一個轉賬,給B發簡訊,B迴應接收到
- Deferred可以理解為延時互動模式,TransactionA中的部分Action沒有被立即執行,而是延遲一段時間後,由TransactionB執行,例如A給B轉賬,銀行觸發一個轉賬,給B發簡訊,B迴應錢用於下個月某天還房貸等,這個Action就不會被立即執行,而且放到一個佇列中
7.Inline模式與Deferred模式主要區別
- Inline模式是實時執行Action,Deferred是延時執行
- Deferred模式的Action會被放入一個佇列中,後續執行時從佇列中取出
- Inline模式中的Action是在同一個Transaction裡,而Deferred模式下Action被分散到不同Transaction裡
8.EOS合約與以太坊合約區別
- EOS合約可以升級
- 以太坊智慧合約一旦部署,就固化在那
- EOS支援Deferred互動模式
- 許可權控制不同
- 以太坊通過黑白名單
- EOS通過賬戶
- 合約資料儲存方式不同
- EOS是儲存到記憶體中的表
- 以太坊儲存是固化的,IO讀寫效率低,也不支援對某個欄位做index
- 使用依賴庫的方式不同
- solidity是後來寫的庫,比較少,也不是很完善
- EOS是C++的庫,非常多,也很完善
9.不同許可權的智慧合約互動呼叫
- 啟動網路
- 設定兩個alias
- 生成兩套wast檔案
- 生成兩套abi檔案
- 建立三對金鑰
- 解鎖錢包
- 將三個私鑰匯入錢包
- 建立三個賬戶
- 檢視賬戶
- 部署兩個合約
- 呼叫hello合約的hi方法
- 檢視賬戶json
- target賬戶授權給hello合約特定許可權
- 檢視賬戶的變化
- 呼叫hello合約的hi方法
- 呼叫hello合約的hi方法
- 關閉網路