https://decert.me/tutorial/solidity/intro
1 帳戶#
- 外部用戶帳戶 (EOA)
- 合約帳戶
特點:
地址格式相同,20 位元組的 16 進位數字
交易只能由外部帳戶發起,所有 Gas (手續費) 由外部帳戶支付
2 帳戶狀態#
四個基本組成部分:
nonce:
分兩種 1 - 一個帳戶的交易數量,2 - 工作量證明 nonce (用於計算滿足工作量證明的隨機數)
EOA:從此帳戶發送的交易序號
合約帳戶:此帳戶創建的合約序號
balance:
擁有的以太幣餘額數量,單位:Wei, 1ether = 10^18 wei,以太幣交易時,balance 會改變。EOA 和合約帳戶都有 balance;合約帳戶使用代碼管理所擁有的資金,外部用戶帳戶則是使用私鑰簽名來花費資金;合約帳戶存儲了代碼,外部用戶帳戶則沒有。
storageRoot:
Merkle Patricia 樹的根節點雜湊值。Merkle 樹會將此帳戶存儲內容的雜湊值進行編碼,默認是空值。
codehash:
帳戶代碼的 hash 值。
合約帳戶:合約代碼被 hash 計算後的結果作為 hashcode 保存
EOA:空字串 hash 值
可視化示例來總結上述內容:
3 以太幣#
以太坊的貨幣,類似於法幣中不同的面額,用戶最常用的是 ether,開發者常用的是 wei,wei 是以太幣中的最小單位,還有兩個單位是 finney 和 szabo,wei 的衍生單位:Kwei、Mwei、Gwei
1 ether = 10^3 finney(即1000 finney)
1 ether = 10^6 szabo
1 ether = 10^18 wei
1 Gwei = 10^9 wei
1 Mwei = 10^6 wei
4 以太坊虛擬機 (EVM)#
一種虛擬計算機,用於執行智能合約與 Dapp,EVM 是以太坊核心組件之一,負責處理和執行智能合約代碼。
工作原理與傳統虛擬機類似,它專門用於區塊鏈和智能合約。他是以太坊上的自動化合同。
執行智能合約:將智能合約位元組碼加載到內存,按照預定規則執行。
gas:防止惡意代碼無限循環消耗資源。
5 以太坊客戶端#
是連接到以太坊網絡的節點程式,EVM 是客戶端的重要組成,運行節點程式,即可成為以太坊網絡節點之一。
兩個層次
執行層:
負責處理交易執行,包括智能合約的部署執行
共識層:
負責處理共識演算法,即出塊和交易
執行層客戶端:
Geth(官方 - Go 語言實現)、Nethermind(C# 實現)和 Erigon(Go 語言實現)。這些客戶端用於處理以太坊網絡上的智能合約操作和交易執行。
共識層客戶端:
Prysm(Go 語言實現)和 Lighthouse(Rust 實現)。這些客戶端用於參與共識過程,確保區塊鏈網絡的一致性和安全性。
6 錢包#
管理帳戶的重要工具,可以使用錢包創建帳戶、交易簽名,連接到區塊鏈節點來執行交易。錢包本身並不存儲用戶的資產,而是管理訪問這些資產的密鑰和簽名功能。
常見的移動端錢包 ImToken、Trust Wallet
網頁錢包:metamask、Phantom (Solana)
7 Gas 機制#
防止惡意行為而引入,衡量執行操作需要的工作量的單位。相當於手續費
8 以太坊交易#
三種類型
- 普通交易
- 創建合約
- 調用合約函數
{
"to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85",
"value": 0.0005,
"data": "0x" // 可以包含消息或留言
}
這是一個非常簡單的普通交易,它將一定數量的以太幣轉移到指定地址,
如果願意,還可以在交易中包含一條消息。
{
"to": "0x687422eEA2cB73B5d3e242bA5456b782919AFc85", // 合約地址
"value": 0.0,
"data": "0x06661abd"
}
調用智能合約函數的信息封裝在DATA字段中,將此交易信息發送到要調
用的智能合約的地址。假設我們要調用前面的count()函數,傳遞的
是 count()函數的選擇器。