3.08 EOS智慧合約(下)

尹成發表於2018-12-11

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方法
    在這裡插入圖片描述
  • 關閉網路
    在這裡插入圖片描述

學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928

[清華團隊帶你實戰區塊鏈開發]
(https://ke.qq.com/course/344443?tuin=3d17195d)
掃碼獲取海量視訊及原始碼 QQ群:
721929980
在這裡插入圖片描述

相關文章