區塊鏈100講:淺析以太坊網絡智能合約原理

image

以太坊圖靈完備的智能合約豐富了區塊鏈從比特幣單一數字資產去中心化轉移到去中心化的全球分佈式計算機變爲可能,雖然在以太坊網絡運行代碼成本比較高。相對於比特幣的腳本,以太坊智能合約的出現是一種比較大的進步。這篇文章咱們來討論以太坊網絡智能合約的工做原理。node

1

區塊鏈101

區塊鏈簡而言之就是非中心化的分佈式帳本,一種多方參與者共享的特定類型數據庫。數據庫

帳本中保存在區塊鏈網絡中發生全部的交易,每一個加入網絡的節點都有數據的全量拷貝。經濟激勵模型削弱甚至消除了獨立節點之間的信任基礎,在不須要信任的開放網絡中轉移數字資產。網絡

區塊鏈世界奉行 Don't trust, verify it 原則。分佈式

2

智能合約

圖靈完備的智能合約讓以太坊成爲繼比特幣以後區塊鏈技術最大的亮點。比特幣是數字資產做爲價值的載體,而以太坊超越了數字資產屬性,賦能去中心化應用。智能合約是可以在區塊鏈網絡運行的代碼邏輯。函數

3

以太坊帳戶模型和狀態模型

比特幣使用 UTXO 模型,而以太坊使用帳戶模型。智能合約在以太坊中也屬於帳戶。以太坊網絡有且僅有一個常常被更新的 State trie 全局狀態。state trie 經過健值對維護全部在以太坊網絡發生過交易的帳戶。學習

key 爲長度爲 160 bit 的以太坊地址,value 爲下面四個要素使用 RLP (Recursive-Length Prefix 編碼方法) 編碼而來。每一個帳戶都是 state trie 的一個節點,全部帳戶的 state trie 作類默克爾樹獲得根節點 (State Trie — Keccak-256-bit hash of the state trie’s root node stored as the 「stateRoot」 value)區塊鏈

  • nonceui

  • balance編碼

  • storageRootcode

  • codeHash

下圖爲 state trie 與區塊的關係

image

Relationship between the State Trie (leveldb implementation of a Merkle Patricia Trie) and an Ethereum block

兩種帳戶 nonce (帳戶中成功轉帳次數) 和 balance (eth 餘額) 字段都有數據,智能合約帳戶 storageRoot (保存合約的全部數據)和 codeHash (保存合約代碼編譯後字節碼) 有數據,而普通帳戶這兩個字段爲空。

合約的數據保存在 storage trie 中,正如 state trie 同樣,storage trie 一樣存儲格式一樣爲健值對 (keys are storage locations and values are storage values) 對應合約中變量名和值,這些健值對經過默克爾散列以後獲得 storageRoot 存儲在帳戶中。

下圖爲 storage trie 和 state trie 的關係

image

eth_storage_tree.png

值得強調的是:區塊數據只保存 transaction trie (相似比特幣中的區塊頭中存儲全部區塊中的交易默克爾樹根結點), state trie root  和 receipts trie root。

4

智能合約帳戶

contract Counter {

    uint counter;
   function Counter(

) public {

        counter = 0; 

    }    function

count() public {

        counter 
   = counter + 1; 

    }

 }

簡單的智能合約,類型爲 uint 的 counter 爲合約的狀態,count 函數被調用以後, counter 值加 1

image

smart_contract_account.png

5

以太坊交易

交易信息中有個比較特殊的字段 data , 這個字段值結合 to 字段可把以太坊交易分爲三大類:

轉帳

  • TO 收款地址

  • DATA 爲空或任意交易備註信息

  • AMOUNT 交易 ether 數量

新建合約

  • TO 字段爲空,新建合約被觸發

  • DATA 字段爲智能合約字節碼

  • AMOUNT 字段可爲空或任意數,非負數則轉帳給新建的合約帳戶

調用合約

  • TO 字段爲合約帳戶地址

  • DATA 字段爲合約函數及其參數

  • AMOUNT 空或任意數

// Transfer of value

{

    to: '0x687422eEA2cB73B5d3e24
2bA5456b782919AFc85',

    value: 0.0005

    data: ‘0x’ // 
Could also send a message here 
if we want to

}

// Create smart contract

{

    to: '',
    value: 0.0

    data: ‘0x60606040523415610
00c57fe5b60405160c0806……………’
 }

// Call contract

{

    to: '0x687422eEA2cB73B5d3e2
42bA5456b782919AFc85',  

// Contract

    value: 0.0

    data: '0x606060405234156100
0c57fe5b60405160c0806……………'

}

值得強調的是,在以太坊交易中有 gas 的概念,在以太坊網絡跑運用須要必定的成本,同時必須設置 gas 上限,交易執行完成以後,剩餘的 gash 將會返還。

推薦閱讀

  • Diving into Ethereum’s world state

  • Basic Questions About the Ethereum EVM and State Storage

  • State Tree Pruning

內容來源:簡書

做者:老碼農不上班

Blockathon|48小時極客競賽,區塊鏈馬拉松等你挑戰(成都)

時間:2018年9月14-16日

地點:成都高新區天府五街200號菁蓉國際廣場2號樓A座12樓中韓互聯網+新技術孵化器

  • 招募50名開發者(識別下圖二維碼或點擊「閱讀原文」便可報名)

  • 報名費100元爲參賽押金,參賽者我的緣由不能到場參加活動概不退款;參賽者全程參與活動,待活動結束後現場退還。9月14日18:00開始第一次簽到,9月15日和16日天天早上都要記得簽到哦。

  • 主辦方免費提供2天的食物、飲料,併爲每一位參會者準備一件文化衫

image

如下是咱們的社區介紹,歡迎各類合做、交流、學習:)

image

相關文章
相關標籤/搜索