《以太坊白皮書》原文鏈接:https://github.com/ethereum/wiki/wiki/White-Paper
Ethereum
Ethereum: a blockchain with a built-in Turing-complete programming language, allowing anyone to write smart contracts and decentralized applications where they can create their own arbitrary rules for ownership, transaction formats and state transition functions.
以太坊: 一個內(nèi)置了圖靈完備的程序語言的區(qū)塊鏈田晚。任何人可以編寫智能合約;或者 “可以創(chuàng)造任意屬于自己的規(guī)則” 的去中心化應(yīng)用戒洼;以及交易格式和狀態(tài)轉(zhuǎn)化函數(shù)屡江。
#1 Smart Contract
以太坊中最重要的概念: 智能合約喇喉。相對于比特幣來說退敦,智能合約可以說是比特幣中 ”腳本“ 的升級加強(qiáng)版:智能合約可以支持更強(qiáng)大的腳本語言(圖靈完備的腳本語言),并允許開發(fā)者開發(fā)任意應(yīng)用實(shí)現(xiàn)智能合約(可以將以太坊想象為一個應(yīng)用商店章办,用戶可以從上面買到任一應(yīng)用)芒炼。
以太坊 = 比特幣 + 智能合約
智能合約挥唠,從概念上來說,是運(yùn)行在可復(fù)制焕议、共享的賬本上的一段計算機(jī)程序宝磨。它由用戶發(fā)布,且發(fā)布之后無法修改盅安。每個合約都相當(dāng)于一段代碼唤锉,且都有一個賬戶地址。每當(dāng)這個地址發(fā)生交易的時候别瞭,這段代碼就會被執(zhí)行窿祥。
- 每個合約只能以區(qū)塊鏈作為輸入和輸出。
- 任一合約可以調(diào)用其他合約中的函數(shù)蝙寨。
- 執(zhí)行合約的過程中可以創(chuàng)建新的交易晒衩。
#2 Accounts
在以太坊中嗤瞎,狀態(tài)由一個個稱之為 “賬戶” 的對象組成。每一個賬戶有一個 20 byte 的地址和<u>賬戶之間價值和信息的直接轉(zhuǎn)換而來的狀態(tài)轉(zhuǎn)變听系。</u>(這段話有點(diǎn)難理解贝奇,簡單來說就是賬戶的交易過程中產(chǎn)生的對象實(shí)體。)
以太坊中每個賬戶包含 4 個部分:
- 隨機(jī)數(shù)靠胜,一個用來確保每筆交易只能被執(zhí)行一次的計數(shù)器掉瞳。
- 當(dāng)前的以太余額 (以太坊中的貨幣單位為 “以太” )。
- 賬戶的合約代碼浪漠,如果有的話陕习。
- 賬戶的存儲(默認(rèn)為空)。
賬戶有兩種類型:
- 外部所有賬戶址愿,由私鑰控制该镣。這種賬戶沒有包含任何代碼,而且任何人都可以通過創(chuàng)建和簽名一條交易來通過這種賬戶發(fā)送消息响谓。
- 合約賬戶拌牲,由它們的合約代碼控制。在合約賬戶中歌粥,每當(dāng)此賬戶接收到一條消息的時候,它的合約代碼便會被執(zhí)行拍埠。這使得合約賬戶可以讀寫內(nèi)部存儲失驶,并發(fā)送其他消息或者在執(zhí)行過程中創(chuàng)建其他交易。
Note
“合約” 在以太坊中并不應(yīng)該被視為一種應(yīng)該 “用它來填滿” 或者 “服從于它的規(guī)則” 的東西枣购。它們更像是一種在以太坊執(zhí)行環(huán)境內(nèi)部的 “自主媒介”嬉探。它們總是在接收到消息或者交易的時候執(zhí)行一段代碼片段,并直接控制屬于它們的以太余額和鍵值存儲棉圈,以此來追蹤不斷變化的狀態(tài)涩堤。
#3 Messages and Transactions
Transactions
以太坊中的 “交易” :表示已經(jīng)簽名過的,儲存著一個發(fā)送到外部所有賬戶的 “消息” 的數(shù)據(jù)的集合分瘾。包含:
- 消息的接收者
- 標(biāo)識發(fā)送者的簽名
- 發(fā)送者轉(zhuǎn)移給接受者的以太總額
- 一個可選的數(shù)據(jù)域
- 一個
STARTAGS
值胎围,用來表示交易執(zhí)行過程中允許的最大計算步驟 - 一個
GASPRICE
值,用來表示每一個計算步驟發(fā)送者需要支付的費(fèi)用
Note
STARTGAS
和GASPRICE
兩個部分對于以太坊的 anti-denial-of-service model (反阻斷服務(wù)模型) 至關(guān)重要德召。為防止意外出現(xiàn)或者惡意執(zhí)行的代碼無限循環(huán)白魂,以及一些代碼造成的計算浪費(fèi)。
計算的基本單位為 "gas"上岗。通常福荸,一個計算步驟會消耗一個 gas,不過一些復(fù)雜的(包括一些需要昂貴的計算成本的肴掷,或者需要儲存更多數(shù)據(jù)到狀態(tài)中的)計算會消耗更多的 gas敬锐。交易數(shù)據(jù)中每一個字節(jié)都需要 5 個 gas 的花費(fèi)背传。
Messages
所有合約都向其他合約可以發(fā)送 ”消息“ 。這里的消息是一些虛擬對象台夺,它們只在以太坊的執(zhí)行環(huán)境中存在径玖,且不會被序列化。一個消息包含:
- 消息的發(fā)送者 (默認(rèn)包含)
- 消息的接收者
- 關(guān)聯(lián)的交易的以太金額
- 一個可選的數(shù)據(jù)域
- 一個
STARTGAS
值
需要著重留意的是谒养,一個消息就像一筆交易一樣挺狰,會使得接收者的賬戶執(zhí)行它的關(guān)聯(lián)代碼。不同點(diǎn)在于买窟,消息是由合約產(chǎn)生的(當(dāng)合約代碼執(zhí)行到 CALL
操作碼時)丰泊,且它不是一個外部參與者。因此始绍,合約可以和其他合約產(chǎn)生關(guān)聯(lián)瞳购,就像就像外部參與者一樣。
Note
以太坊中消息機(jī)制的存在亏推,使得合約與外部賬戶擁有同樣的 —— 發(fā)送消息和創(chuàng)建其他合約的權(quán)力学赛。
閱讀 Github 上 《Ethereum - White Paper》 的一些筆記