---
# System prepended metadata

title: 從以太坊白皮書理解 web 3 概念 - Day4
tags: [' Web 3', it 鐵人賽 30 天, ' ethereum']

---

---
tags: it 鐵人賽 30 天, Web 3, ethereum
---
# 從以太坊白皮書理解 web 3 概念 - Day4
## Ethereum： Transaction

上一篇講到 EVM 與 Ethereum 節點的運作

今天來研究一下， Ethereum 中談論到 Transaction 的內容


## 以 Transaction 的角度來說明 Ethereum

Ethereum 可以被看做是是一個以 Transaction 為基底的狀態機。

Global State： 整個 Ethereum 的所有狀態

以下圖表是：

![](https://i.imgur.com/1UrDtHy.png)

紅色的有向線代表 Transaction

而 Transaction 通常是蒐集數個為一個 Block 做打包

如下圖：

![](https://i.imgur.com/065OL3s.png)


以狀態變化來看

Ethereum 可以當作是已時間為基準的狀態鏈接。如下圖:

![](https://i.imgur.com/6UovaeB.png)

從實作層面來看

Ethereum 可以當作是 Block 所形成的鏈，所以是 Blockchain 。

![](https://i.imgur.com/ERvooZs.png)

從帳本的角度來看

Ethereum 可以當作是 Transaction 的 Stack 。

因為查帳需要從最新的 Tranaction 往前查。

如下圖:

![](https://i.imgur.com/qtBj3Gg.png)

## World State

World State 是指整個區塊鏈的狀態。

內部儲存每個 Address 對應的 Account 狀態

![](https://i.imgur.com/TVa1Bic.png)

## Account 狀態

Account 狀態包含內容如下:

![](https://i.imgur.com/lJFKmZr.png)

## Account 類型

Account 分為 

1. External Own Account 

2. Contract Account 

如下：

![](https://i.imgur.com/JEoOO7H.png)

![](https://i.imgur.com/5hbHCFe.png)

## Address 類型

從 EOA 與 Contract 兩種 Account 都是以 address 形式在狀態中做紀錄

Address 是一個 160 bits 的值

加上前方 0x 兩個字元，假設用 hex 字元來表示，剛好是 42 個字元。

其推導方式如下:

![](https://i.imgur.com/Q1wIhis.png)

## Transaction

Transaction 只能由 EOA 所交付。

![](https://i.imgur.com/o3tF0nw.png)

## Tranaction 分類

Transcation 分為兩類：

1. create contract: EOA 建立 Contract

2. message call: EOA 傳遞訊息給 Contract Account 或是另一個 EOA

如下圖:

![](https://i.imgur.com/3voeBFR.png)

以下兩個圖各自說明

Create Contract 與 Message Call 對 World State 的效果

1. Create Contract

![](https://i.imgur.com/mhEuPXy.png)

2. Message Call

![](https://i.imgur.com/upd6X4O.png)

## Transaction 內容

Transaction 內容基本包含以下幾個欄位：

1. nonce： 目前該 account 所累計的 Transaction 個數

2. gasPrice: 每個運算單元願意花多少 wei 去執行

3. gasLimit: 最多願意執行多少個運算單元

4. to: 接收方的地址。當 Create Contract 時，這個欄位帶 0

5. value: 要傳送的 balance 量，以 wei 為單位。

6. v, r, s: 做簽章所需要的初始值

7. data: 這個欄位根據 Transaction 類型放不同的值。當 Message Call 時，放 input data，當 Create Contract 時放 init code。

![](https://i.imgur.com/qIv2Xqe.png)


## 參考文獻

[https://ethereum.org/en/whitepaper/#messages-and-transactions](https://ethereum.org/en/whitepaper/#messages-and-transactions)

[https://www.quicknode.com/guides/knowledge-base/what-are-ethereum-transactions](https://www.quicknode.com/guides/knowledge-base/what-are-ethereum-transactions)

[https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/)

[https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)

