圖片來源 區塊(Block) 區塊概念的出現是為了解決傳統大量交易的問題,過往的交易假設同時間有兩筆對帳戶操作的請求發出時,接收端僅能以先來後到的處理方式回絕掉後來的交易,但這樣其實並不公平,因為受限於距離與環境,並不代表第二筆交易是無效的,而且第一筆交易也難辨真偽,而區塊的出現也衍生出共識機制,大部分節點認可這筆交易時才算是成立。 區塊鏈當中相當重要的環節就是塊與塊之間的帳務計算,以及使用者付費的手續費,而這些計算就是在區塊之中的每個不同單位,我們來看以下的圖,描繪出區塊組成的單位與各自用途,我們就想像成RPG遊戲中的角色裝備,各自具有不同用途與加乘效果。 圖片來源 以上的元素不外乎就是在計算每個「區塊」的完成度與費用,畢竟我們使用區塊鏈的資源就像是高速公路一般,使用者付費,只是計算方式有所不同而已,關於gas的計算,我們會在概念篇進行介紹,因此這邊就不加以贅述,以下我們實際用solidity來撰寫一番。 // SPDX-License-Identifier: MIT pragma solidity ^ 0.8 .18 .0 ; contract BlockTransactionInfo { // 獲取當前區塊的區塊數字 function getBlockNumber () public view returns ( uint ) { return block.number; } // 獲取當前區塊的時間戳 function getBlockTimestamp () public view returns ( uint ) { return block.timestamp; } } 交易(Transaction) 在 Solidity 中,交易(Transaction)是指由外部帳戶向智能合約發送的請求,以執行合約中的函式或進行狀態修改。每個交易都包含一些重要的屬性和信息。 以下的例子我們可以「獲取當前交易的發送者地址」與「處理交易的數量」。 // 獲取當前交易的發送者地址 function getTransactionSender () public view returns ( address ) { return msg.s...