溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

區(qū)塊鏈的以太坊網(wǎng)絡(luò)智能合約原理是什么

發(fā)布時間:2022-01-19 10:12:54 來源:億速云 閱讀:232 作者:iii 欄目:互聯(lián)網(wǎng)科技

今天小編給大家分享一下區(qū)塊鏈的以太坊網(wǎng)絡(luò)智能合約原理是什么的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1

區(qū)塊鏈101

區(qū)塊鏈簡而言之就是非中心化的分布式賬本,一種多方參與者共享的特定類型數(shù)據(jù)庫。

賬本中保存在區(qū)塊鏈網(wǎng)絡(luò)中發(fā)生所有的交易,每個加入網(wǎng)絡(luò)的節(jié)點都有數(shù)據(jù)的全量拷貝。經(jīng)濟激勵模型削弱甚至消除了獨立節(jié)點之間的信任基礎(chǔ),在不需要信任的開放網(wǎng)絡(luò)中轉(zhuǎn)移數(shù)字資產(chǎn)。

區(qū)塊鏈?zhǔn)澜绶钚?Don't trust, verify it 原則。

2

智能合約

圖靈完備的智能合約讓以太坊成為繼比特幣之后區(qū)塊鏈技術(shù)最大的亮點。比特幣是數(shù)字資產(chǎn)作為價值的載體,而以太坊超越了數(shù)字資產(chǎn)屬性,賦能去中心化應(yīng)用。智能合約是能夠在區(qū)塊鏈網(wǎng)絡(luò)運行的代碼邏輯。

3

以太坊賬戶模型和狀態(tài)模型

比特幣使用 UTXO 模型,而以太坊使用賬戶模型。智能合約在以太坊中也屬于賬戶。以太坊網(wǎng)絡(luò)有且僅有一個經(jīng)常被更新的 State trie 全局狀態(tài)。state trie 通過健值對維護所有在以太坊網(wǎng)絡(luò)發(fā)生過交易的賬戶。

key 為長度為 160 bit 的以太坊地址,value 為下面四個要素使用 RLP (Recursive-Length Prefix 編碼方法) 編碼而來。每個賬戶都是 state trie 的一個節(jié)點,所有賬戶的 state trie 做類默克爾樹得到根節(jié)點 (State Trie?—?Keccak-256-bit hash of the state trie’s root node stored as the “stateRoot” value)

  • nonce

  • balance

  • storageRoot

  • codeHash

下圖為 state trie 與區(qū)塊的關(guān)系

區(qū)塊鏈的以太坊網(wǎng)絡(luò)智能合約原理是什么

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

兩種賬戶 nonce (賬戶中成功轉(zhuǎn)賬次數(shù)) 和 balance (eth 余額) 字段都有數(shù)據(jù),智能合約賬戶 storageRoot (保存合約的所有數(shù)據(jù))和 codeHash (保存合約代碼編譯后字節(jié)碼) 有數(shù)據(jù),而普通賬戶這兩個字段為空。

合約的數(shù)據(jù)保存在 storage trie 中,正如 state trie 一樣,storage trie 同樣存儲格式同樣為健值對 (keys are storage locations and values are storage values) 對應(yīng)合約中變量名和值,這些健值對通過默克爾散列之后得到 storageRoot 存儲在賬戶中。

下圖為 storage trie 和 state trie 的關(guān)系

區(qū)塊鏈的以太坊網(wǎng)絡(luò)智能合約原理是什么

eth_storage_tree.png

值得強調(diào)的是:區(qū)塊數(shù)據(jù)只保存 transaction trie (類似比特幣中的區(qū)塊頭中存儲所有區(qū)塊中的交易默克爾樹根結(jié)點), state trie root  和 receipts trie root。

4

智能合約賬戶

contract Counter {

    uint counter;
   function Counter(

) public {

        counter = 0; 

    }    function

count() public {

        counter 
   = counter + 1; 

    }

 }

簡單的智能合約,類型為 uint 的 counter 為合約的狀態(tài),count 函數(shù)被調(diào)用之后, counter 值加 1

區(qū)塊鏈的以太坊網(wǎng)絡(luò)智能合約原理是什么

smart_contract_account.png

5

以太坊交易

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

轉(zhuǎn)賬

  • TO 收款地址

  • DATA 為空或任意交易備注信息

  • AMOUNT 交易 ether 數(shù)量

新建合約

  • TO 字段為空,新建合約被觸發(fā)

  • DATA 字段為智能合約字節(jié)碼

  • AMOUNT 字段可為空或任意數(shù),非負數(shù)則轉(zhuǎn)賬給新建的合約賬戶

調(diào)用合約

  • TO 字段為合約賬戶地址

  • DATA 字段為合約函數(shù)及其參數(shù)

  • AMOUNT 空或任意數(shù)

// 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……………'

}

值得強調(diào)的是,在以太坊交易中有 gas 的概念,在以太坊網(wǎng)絡(luò)跑運用需要一定的成本,同時必須設(shè)置 gas 上限,交易執(zhí)行完成之后,剩余的 gash 將會返還。

以上就是“區(qū)塊鏈的以太坊網(wǎng)絡(luò)智能合約原理是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI