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後回傳給呼叫者








你可能感興趣的文章

SQL-injection lab(3)

SQL-injection lab(3)

【React】-上傳到 Netlify 問題紀錄

【React】-上傳到 Netlify 問題紀錄

引領團隊前進:北極星與路標們

引領團隊前進:北極星與路標們






留言討論