Solidity筆記 _ 智能合約基本觀念


智能合約基本結構

帳戶結構

在Ethereum中是由兩種帳號組成的:

  1. External Owned Account(EOA) : 為一般使用者的帳號
    • 包含nonce
    • balance
  2. Contract Account : 為專門部屬合約的帳號
    • nonce,balance
    • code hash 為儲存合約程式碼的空間
    • storage hash 為需要合約永遠儲存內容的空間,合約執行完也不會被清空
    • 要先有EOA才可以創立contract account

帳戶功能

EOA transaction功能:

  • 轉Ether(balance)給別人
    From:傳輸者
    To:接收者
    Value:ehter值
    Data:備註(非必要)
    
  • 部屬 Contract( Create contract)
    From:傳輸者
    To:null (表示這是要部屬合約的)
    Data:把bytecode放進來
    Value:可以把ether塞進contract中
    
  • 呼叫 Contract中特定的Function(call contract)
    合約需要送一個transcation才會觸發指令

EVM

為了避免合約bytecode在不同的OS、環境中會有不同的運算解果產生,我們將solidity在每個主機的沙盒環境 Ethereum Vurtual Machine(EVM)中執行
結構:

1.Account CodeHash:為此account儲存EVM bytecode的位置,找到之後將EVM bytecode放入Machine State執行
2.Program Counter: 解讀EVM Bytecode
3.Gas: 計算是否有資格可以使用EVM運算合約內容
4.Stack/Memory : 儲存小量/大量資料的空間,執行完會揮發
5.Account Storage: 儲存空間,執行完不會揮發

smart contract 運作流程

部屬合約

1.以solidity將合約內容寫好
2.經由slidity compiler產生Contract ABI,Contract Bytecode
(1) Contract ABI : 可以和較難解讀bytecode之間互動的介面
(2) Contract Bytecode: 實際傳至鏈上的程式碼
3.部屬者寫入bytecode至一條transaction之中
4.礦工看到此條transaction,將bytecode放置鏈上並回傳其在鏈上之位置

呼叫合約

  1. 呼叫者將參數填入Contract ABI當中
  2. 呼叫者將以上資料寫入transaction中並繳納gas以當作執行合約費用
  3. 礦工將transaction放置blockchain上面,並且尋找bytecode在何處並下載
  4. 礦工將下載好contract bytecode放入自己EVM執行運算出結果
  5. 礦工計算好output後回傳給呼叫者








你可能感興趣的文章

659. Split Array into Consecutive Subsequences

659. Split Array into Consecutive Subsequences

Function component vs Class component

Function component vs Class component

Callback

Callback






留言討論