以太坊區塊鏈為了讓智能合約的撰寫變得便利,修改了許多底層資料處理的方式,交易不再是使用 UTXO 這種模式。
有人比喻說,UTXO 就像是要給你 3 元,但是我手中只有 5 元(一個 5 元的 UTXO),所以就給對方 5 元後,在找 2 元回來。但是以太坊中,使用 Merkle Patricia Tree(MPT,參考連結) 的結構來儲存帳戶資料,資料包含帳戶地址、以太餘額、nonce等,所以在以太坊中的交易,沿用剛剛說的 5 元範例,在以太坊就是直接將 3 元轉給對方。而智能合約的程式碼也是儲存在 MPT 之中。
智能合約(Smart contract) 就是一段可以透過 EVM 執行的程式碼。一個穩定的程式碼,同樣的輸入就會有同樣的輸出,透過發佈一個可執行的智能合約程式碼,通過共識點對點以太坊區塊鏈網路同步到每個節點。
當有一筆『交易』觸發智能合約程式碼,這個觸發程式碼的『交易』會包含 :
當這筆交易被區塊打包上鏈,所有 EVM 節點就會依照『交易』開始執行指定的智能合約函式。若執行成功,執行結果就會被紀錄下來。因為所有 EVM 節點都是同一份程式碼,也都是執行相同的函式與相同的輸入,最後每個節點就會得到相同的輸出。
這樣代表什麼嗎?原本在比特幣區塊鏈中,『交易被區塊打包上鏈』這件事只有代表貨幣的轉移。現在透過以太坊區塊鏈的智能合約,交易這件事還能透過程式完成特定的狀態轉換,不再限於只有貨幣得轉移。
對於各位工程師大大們,只要能寫程式,就可以解決許多問題!所以當自己的程式碼發佈到網路上,不用在準備伺服器,所有人都可以使用!這麼美好的事情,就在以太坊區塊鏈中實現啦!
但是,在區塊鏈中撰寫智能合約(程式碼)與平常電腦所執行的程式碼相比,有更多的限制與不同之處。主要限制大概就是
有這麼多限制,那還能用嗎?
說個冷知識:任天堂第一代超級馬力歐只全部檔案大小有 40K bytes,你覺得工程師會有極限嗎?