Contract-Design
智能合約創建和執行的基礎知識和工作流程
我對智能合約如何在內部工作感到困惑。
我讀過這個:
https ://blog.zeppelin.solutions/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05
TLTR:有一個智能合約“ProofOfExistence”將某個字元串的雜湊值保存到數組中的範例
contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) { proofs[proof] = true; } // calculate and store the proof for a document function notarize(string document) { var proof = proofFor(document); storeProof(proof); } // helper function to get a document's sha256 function proofFor(string document) constant returns (bytes32) { return sha256(document); } // check if a document has been notarized function checkDocument(string document) constant returns (bool) { var proof = proofFor(document); return hasProof(proof); } // returns true if proof is stored function hasProof(bytes32 proof) constant returns(bool) { return proofs[proof]; } }
我的問題:
1)**當我部署該契約時會發生什麼?**就乙太坊區塊鏈而言。程式碼保存在乙太坊網路的新區塊中?我的意思是在比特幣中,我們將一些 BTC 從一個地址發送到另一個地址,並且該資訊保存在一個新塊中。乙太坊和智能合約有什麼類似之處嗎?
部署智能合約是否有任何成本?
我如何使用該合約?假設我想檢查那裡是否存在某個字元串,我該怎麼做?如果我想保存一個新字元串,也一樣。從智能合約執行某些功能(並獲得結果)的工作流程是什麼?
我們是否需要 ETH 來執行智能合約上的某些功能?為什麼?執行區塊鏈(不部署)時發生了什麼?
我知道這些回复可能有點長,但我很確定對於像我這樣的許多新手來說會是一個很好的參考:)
- 發送 tx 以創建一個新賬戶,一個儲存在世界狀態中的合約賬戶(這是賬戶和賬戶狀態的映射)。這創建了一個合約儲存,我們的智能合約的字節碼被儲存/引用。塊包含目前狀態的根雜湊、塊中的交易和交易收據(以及其他一些東西)。
- 部署合約確實需要花費 gas,至少 32 000(CREATE Opcode)。這個數量會根據部署時執行的字節碼和建構子的大小而增加。
- 有幾種不同的方法。您可以使用 geth 控制台並通過 RPC 與之互動。或者使用 truffle framework 和 truffle console ,它給你一個 web3 實例。可以呼叫任何公共/外部的合約方法。還有一些可用的庫,如 web3js 或 ethersjs,可以使用您最喜歡的 JS 框架(如 react、vue 或 angular)建構客戶端應用程序。
- 我們需要為每筆交易支付 gas(這是少量的乙太幣)。如果我們呼叫合約,我們會將 calldata 添加到我們的交易中。這包含我們要在合約上呼叫的編碼函式和參數(將帶有呼叫數據的交易發送到合約地址)。每個操作都會消耗特定數量的 gas,因此根據邏輯的複雜性,gas 成本可能會增加。該氣體用於支付處理您的交易(執行呼叫)的節點。Gas 的存在主要是為了避免垃圾郵件和圖靈停機問題(區塊有 Gas 限制)。
乙太坊白紙和黃紙是一個非常好的起點。另外:https ://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369