以太坊知識庫

Ethereum Knowledge

帳戶 Account :

帳戶可以是外部擁有帳戶 (EOA, externally owned account) 或是合約帳戶 (contract address)。兩者必定包含地址、餘額、隨機數 (nonce)。而合約帳戶則是多了資料儲存空間 (storage) 及程式碼 (code) 的部份。

地址 Address :

一般來說,乙太坊區塊鏈上的地址代表的是 EOA 或是合約的地址,用來接收或是傳送交易(transaction)。更俱體地說,私鑰先使用 ECDSA 計算出公鑰,接著對公鑰作出 Keccak 雜湊,接著取其雜湊最右邊的40位元組,並以16進制字串方式表達該40位元組,然後在字串前面加上 “0x” 字串後,該字串即為該私鑰所對應之乙太坊地址(Ethereum Address)。

斷言 Assert :

在 Solidity 中,assert(false) 編譯為 0xfe, 是一個無效的操作碼,用盡所有剩餘的燃氣(Gas),並恢復所有更改。 當 assert() 語句失敗時,說明發生了嚴重的錯誤或異常,你必須修復你的程式碼。 你應該使用 assert 來避免永遠不應該發生的條件。

大端序 Big-endian :

大端序是進位制數值系統的表示方法,將代表最大值的數字放在第一位 (即手寫順序的最左邊,或電腦記憶體中的最低位址)。反之,若將代表最小數值的數字放在第一位,該表示方法稱為小端序(little-endian)。

比特幣改進提議 BIPs :

比特幣改進提議(Bitcoin Improvement Proposals)。比特幣社區成員提交的一組提案,旨在改進比特幣。例如,BIP-21 是改進比特幣統一資源識別碼(URI)方案的建議。

區塊 Block :

區塊是關於所包含的交易的所需資訊(區塊頭)的集合,以及稱為ommer的一組其他區塊頭。它被礦工添加到以太坊網路中。

區塊鏈 Blockchain :

在乙太坊中,區塊鏈是由區塊所組成之序列,序列上的每個區塊都被工作量證明 (proof-of-work) 系統驗證過,每個區塊都連結至前一個區塊,可往前追溯至創始區塊 (genesis block)。在比特幣協議下會明定的區塊鏈的大區塊空間限制 (maximum block size),但在乙太坊中則沒有明確規定區塊大小,而是透過燃氣限制 (gas limit) 來規範每個區塊所能使用的指令上限。

拜占庭分叉 Byzantium Fork : 拜占庭是大都會(Metropolis)發展階段的兩大分叉之一。它包括 EIP-649:大都會難度炸彈延遲和區塊獎勵減少,其中冰河時代(見下文)延遲1年,而區塊獎勵從5個以太坊減至3個以太坊。

編譯 Compiling :

將高階程式語言(例如 Solidity)編寫的程式碼轉換為低階語言(例如 EVM Bytecode )。

共識 Consensus :

當大量節點(通常是網路上的大多數節點)在各自本地通過驗證的最佳區塊鏈中都有完全相同的區塊狀態。 不要與共識規則混淆。

共識規則 Consensus rules :

完整節點為了與其他節點保持一致,所需遵循的區塊驗證規則。不要與共識混淆。

君士坦丁堡 Constantinople :

大都會階段的第二部分,2018年中期的計劃。預計將包括切換到混合工作證明/權益證明共識演算法,以及其他變更。

合約帳戶 Contract account :

合約帳戶附有程式碼,該程式碼在收到其它帳戶(合約帳戶 或 EOA) 的交易(transaction) 時便可執行。

合約創建交易 Contract creation transaction :

一個特殊的交易,以“零地址”作為收件人,用於註冊合約並將其記錄在以太坊區塊鏈中(請參閱“零地址”)。

去中心化自治組織 DAO :

去中心化自治組織(Decentralised Autonomous Organization)。 沒有層級管理的公司和其他組織。也可能是指2016年4月30日發佈的名為“The DAO”的合約,該合約於2016年6月遭到黑客攻擊,最終在第1,192,000個區塊激起了硬分叉(代號 DAO),恢復了被攻擊的 DAO 合約,並導致了以太坊和以太坊經典兩個競爭系統。

去中心化應用 DApp :

去中心化應用(Decentralised Application)。 狹義上,它至少是智能合約和 web 用戶界面。更廣泛地說,DApp 是一個基於開放式、分散式、點對點基礎架構服務的 Web 應用程式。另外,許多 DApp 包括去中心化儲存和/或消息協議和平臺。

契約 Deed :

ERC721 提案中引入的非同質性代幣(NFT, Non-Fungible Token)標準。與ERC20代幣不同,契約證明了所有權並且不可互換,雖然它們還未在任何管轄區被認可為合法檔案,至少目前沒有。

難度 Difficulty :

該設定可調節全網進行工作量證明 (proof of work) 時的計算量。

數位簽章 Digital signature :

數位簽章演算法是一個過程,用戶可以使用私鑰為文件生成稱為“簽名”的短字串數據,以便具有簽名、文件,和相應公鑰的任何人,都可以驗證(1 )該檔案由該特定私鑰的所有者“簽名”,以及(2)該檔案在簽署後未被更改。

橢圓曲線數位簽章演算法 ECDSA : 橢圓曲線數位簽章演算法( Elliptic Curve Digital Signature Algorithm,ECDSA )是以太坊用來確保資金只能由合法所有者使用的加密演算法。

以太坊改進建議 EIP :

以太坊改進建議(Ethereum Improvement Proposals)。描述以太坊平臺的建議標準。 EIP 是向以太坊社區提供資訊的設計文件,描述新的功能,或處理過程、環境。有關更多資訊,請參見 https://github.com/ethereum/EIPs (另請參見下面的 ERC 定義)。

以太坊名稱服務 ENS :

以太坊名稱服務(Ethereum Name Service)。更多資訊,參見 https://github.com/ethereum/ens/.

熵 Entropy :

在密碼學領域,表示可預測性的缺乏或隨機性水平。在生成秘密資訊(如主私鑰)時,演算法通常依賴高熵源來確保輸出不可預測。

外部擁有帳戶 EOA :

外部擁有帳戶(Externally Owned Account)。 由或為以太坊的真人用戶創建的帳戶。

以太坊註釋請求 ERC :

以太坊註釋請求(Ethereum Request for Comments)。一些 EIP 被標記為 ERC,表示試圖定義以太坊使用的特定標準的建議。

Ethash :

以太坊1.0的工作量證明演算法。更多資訊,參見 https://github.com/ethereum/wiki/wiki/Ethash.

以太 Ether :

以太(Ether),是以太坊生態系統中使用的原生貨幣,在執行智能合約時用來支付燃氣(Gas)費用。它的符合是 Ξ, 極客用的大寫 Xi 字符.

事件 Event :

事件允許EVM日誌工具的使用。Dapp 可以監聽事件,並在事件發生時觸發 Javascript 的回呼函式 。更多資訊,參見 http://solidity.readthedocs.io/en/develop/contracts.html#events。

以太坊虛擬機 EVM :

以太坊虛擬機(Ethereum Virtual Machine)。 一種以堆疊(Stack)為基底,執行 Bytecode 的虛擬機。在以太坊中,執行模型明確說明了系統狀態在給定一系列 Bytecode 指令和少量環境數據的情況下該如何發生改變。 這是通過虛擬狀態機的正式模型指定的。

EVM組合語言 EVM Assembly Language :

人類可讀形式的 Bytecode 。

備用函式 Fallback function :

這是一個默認預設(default)的函式,當合約收到不含資料(data)欄位的交易(transaction)時,或是收到未被合約所宣告之函數呼叫時,這個備用的函式便會被執行。

水龍頭 Faucet :

一個服務,為想要在testnet上做測試的開發人員提供免費的測試以太幣。

Finney :

以太幣的一種單位。10^15^ finney = 1 ether。

分叉 Fork :

指因協議改變造成原始鏈一分為二,或指挖礦時因為兩條潛在區塊鏈而產生的暫時分歧。

前沿 Frontier :

以太坊的試驗開發階段,從2015年7月至2016年3月。

Ganache :

私有以太坊區塊鏈,你可以在上面進行測試、執行命令,並控制此區塊鏈的運作以檢視狀態變化。

燃氣 Gas :

以太坊用於執行智能合約的虛擬燃料。以太坊虛擬機使用會計機制來衡量 gas 的消耗量並限制計算資源的消耗。參見“圖靈完備”。 燃氣是執行智能合約的每條指令產生的計算單位。燃氣與以太幣(Ether)掛鉤。燃氣類似於行動網路上的通話時間。因此,以法定貨幣進行交易的價格是 gas x(ETH /gas)x(法定貨幣/ETH)。

燃氣限制 Gas limit :

每筆交易或區塊中所有交易的最多 gas 使用上限。

創世區塊 Genesis block :

區塊鏈中的第一個塊,用來初始化特定的網路和加密數位貨幣。

Geth :

Go語言的以太坊。Go 編寫的最突出的以太坊協議實現之一。

硬分叉 Hard fork :

硬分叉也稱為硬分叉更改,是區塊鏈中的一種永久性分歧。通常發生在未升級節點無法驗證已升級節點(遵循新共識規則)創建的的區塊時。不要與分叉,軟分叉,軟體分叉或Git分叉混淆。

雜湊值 Hash :

通過雜湊函式為不定長度的數據生成的固定長度指紋。

分層確定錢包 HD wallet :

使用分層確定密鑰生成和傳輸協議的錢包(BIP32)。

分層確定錢包種子 HD wallet seed :

HD錢包種子或根種子是一個可能很短的值,用作生成HD錢包的主私鑰和主鏈碼的種子。錢包種子可以用助記詞(mnemonic words)表示,使人們更容易複製,備份和恢復私鑰。

家園 Homestead :

以太坊的第二個發展階段,於2016年3月在1,150,000區塊啟動。

互換客戶端地址協議 Inter exchange Client Address Protocol (ICAP) :

以太坊地址編碼,與國際銀行帳號(IBAN)編碼部分兼容,為以太坊地址提供多樣的,校驗和的,可互操作的編碼。 ICAP地址可以編碼以太坊地址或通過以太坊名稱註冊表註冊的常用名稱。他們總是以XE開始。其目的是引入一個新的IBAN國家程式碼:XE,X表示”extended”, 加上以太坊的E,用於非管轄貨幣(例如XBT,XRP,XCP)。

冰河時代 Ice Age :

以太坊在200,000區塊的硬分叉,提出難度指數級增長(又名難度炸彈),引發了到權益證明 Proof-of-Stake 的過渡。

集成開發環境 IDE (Integrated Development Environment) :

集成的用戶界面,結合了程式碼編輯器、編譯器、執行環境和除錯器。

不可變的部署程式碼問題 Immutable Deployed Code Problem :

一旦部署了合約(或庫)的程式碼,它就成為不可變的。修復可能的bug並添加新特性是軟體開發週期的關鍵。這對智能合約開發來說是一個挑戰。

內部交易(又稱“消息”)Internal transaction (also “message”) :

從一個合約地址發送到另一個合約地址或 EOA 的交易。

密鑰推導方法 Key Derivation Function (KDF) :

也稱為密碼擴展演算法,它被keystore格式使用,以防止對密碼加密的暴力破解,字典或彩虹表攻擊。它重複對密碼進行雜湊。

Keccak256 :

以太坊使用的加密雜湊方法。雖然在早期 Ethereum 程式碼中寫作 SHA-3,但是由於在 2015 年 8 月 SHA-3 完成標準化時,NIST 調整了填充演算法,所以 Keccak256 不同於標準的 NIST-SHA3。Ethereum 也在後續的程式碼中開始將 SHA-3 的寫法替換成 Keccak256 。

Keystore 檔案 :

JSON 編碼的檔案,包含一個以密碼加密過後的(隨機生成)私鑰,以提供額外的安全性。

LevelDB :

LevelDB是一種開源的硬碟鍵值儲存系統。LevelDB是輕量的,單一目標的持久化庫,支持許多平臺。

庫 Library :

以太坊中的庫,是一種特殊類型的合約:沒有可被支付的函式(payable function),沒有後備函式(fallback function),沒有數據儲存。所以它不能接收或儲存以太,或儲存數據。庫以預先部署程式碼的形式,提供其他合約調用唯讀計算。

輕量級客戶端 Lightweight client :

輕量級客戶端是以太坊客戶端的其中一種,它不在本地儲存區塊鏈的副本,也不驗證區塊和交易。它提供了錢包的功能,可以創建和廣播交易。

消息 Message :

內部交易,不會被序列化,且只在EVM中發送。

消息呼叫 Message call :

將消息從一個帳戶傳送到另一個帳戶的動作。如果目標帳戶為 EVM 程式碼,虛擬機將被啟動,並帶有消息中附帶的狀態。

METoken :

Mastering Ethereum Token. 本書中用於演示的 ERC20 代幣。

大都會階段 Metropolis Stage :

大都會是以太坊的第三個開發階段,在2017年10月啟動。

礦工 Miner :

通過重複雜湊計算,為新的區塊尋找有效的工作量證明的網路節點。

Mist :

Mist是以太坊基金會創建的第一個以太坊瀏覽器。它還包含一個基於瀏覽器的錢包,這是 ERC20 代幣標準的首次實施(Fabian Vogelsteller,ERC20 的作者也是 Mist 的主要開發人員)。Mist 也是第一個引入camelCase校驗碼(EIP-155)的錢包。Mist 運行完整節點,提供完整的 DApp 瀏覽器,支持基於Swarm的儲存和ENS地址

網路 Network :

將交易和區塊傳播到每個以太坊節點(網路參與者)的對等網路。

非同質性代幣 NFT (Non-Fungible Token)

ERC721 提議的代幣標準。 NFT 可被追蹤及交易,但每一枚代幣都是唯一且有區別的。這些代幣不像 ERC20 標準的代幣一樣可相互替換。NFT 可用來代表數位所有權或是實體資產。

節點 Node :

參與到對等網路的軟體客戶端。

隨機數 Nonce : 密碼學中,隨機數指代只可以用一次的數值。在以太坊中用到兩類隨機數。

  • 帳戶隨機數 - 這只是一個帳戶的交易計數。
  • 工作量證明隨機數- 用於獲得工作證明的區塊中的隨機值(取決於當時的難度)。

叔塊 Ommer :

祖父節點的子節點,但它本身並不是父節點。當礦工找到一個有效的區塊時,另一個礦工可能已經發布了一個競爭的區塊,並添加到區塊鏈頂部。像比特幣一樣,以太坊中的孤兒區塊可以被新的區塊作為ommers包含,並獲得部分獎勵。術語 “ommer” 是對父節點的兄弟姐妹節點的性別中立的稱呼,但也可以表示為“叔叔”。

Parity :

以太坊客戶端軟體最突出的支持共同操作(多重簽名)的實現之一。

權益證明 Proof-of-Stake (PoS) :

權益證明是密碼貨幣區塊鏈協議旨在實現分佈式共識的一種方法。權益證明要求用戶證明一定數量的密碼貨幣(網路中的“股份”)的所有權,以便能夠參與交易驗證。

工作量證明 Proof-of-Work (PoW) : 一份需要大量計算才能找到的數據(證明)。在以太坊,礦工必須找到符合網路難度目標的 Ethash 演算法數字解答。

收據 Receipt :

以太坊客戶端返回的數據,表示特定交易的結果,包括交易的雜湊值,其區塊編號,使用的燃氣量,以及在部署智能合約時的合約地址。

重入攻擊 Re-entrancy Attack :

當攻擊者合約(Attacker contracts)調用受害者合約(Victim contracts)的函式時,可以使用這種攻擊。攻擊者合約調用受害者合約中的某一個函式,並讓此函式在執行結束前回頭調用攻擊者合約,攻擊者合約執行後會再次調用受害者合約,並且不斷遞回下去。以這種方式,可以透過跳過受害者合約中的某些部分(如狀態檢查)來盜取資金。 攻擊者必須執行的唯一技巧是在用完燃氣之前中斷遞迴調用,並避免盜用的以太被還原。

獎勵 Reward :

在每個新產生的區塊中會包含一定數量的以太幣,以獎勵找到工作量證明解答的礦工。

遞迴長度前綴 Recursive Length Prefix (RLP) :

RLP 是一種編碼標準,由以太坊開發人員設計用來編碼和序列化任意複雜度和長度的物件(資料結構)。

中本聰 Satoshi Nakamoto :

Satoshi Nakamoto 是設計比特幣及其原始實現Bitcoin Core的個人或團隊的名字。作為實現的一部分,他們也設計了第一個區塊鏈。在這個過程中,他們是第一個解決數位貨幣的雙重支付問題的。他們的真實身份至今仍是個謎。

Vitalik Buterin : Vitalik Buterin 是俄國-加拿大的開發者和作家,以太坊和 Bitcoin 雜誌的聯合創始人。

Gavin Wood :

Gavin Wood 是英國的開發者,以太坊的聯合創始人和前 CTO。在2014年8月他提出了 Solidity,用於編寫智能合約的面向合約的程式語言。

密鑰(私鑰) Secret key (aka private key) :

允許以太坊用戶通過創建數位簽章(參見公鑰,地址,ECDSA)證明帳戶或合約的所有權的加密數字。

SHA :

安全雜湊演算法(SHA, Secure Hash Algorithm) 是美國國家標準與技術研究院(NIST)發佈的一系列加密雜湊函數。

SELFDESTRUCT 操作碼 :

只要整個網路存在,智能合同就會存在並可執行。如果它們被編程為自毀的或使用委託調用(delegatecall)或調用程式碼(callcode)執行該操作,它們將從區塊鏈中消失。 一旦執行自毀操作,儲存在合同地址處的剩餘Ether將被發送到另一個地址,並將儲存和程式碼從狀態中移除。 儘管這是預期的行為,但自毀合同的修剪可能或不會被以太坊客戶實施。 SELFDESTRUCT 之前稱作 SUICIDE, 在EIP6中, SUICIDE 重命名為 SELFDESTRUCT。

寧靜 Serenity :

以太坊第四個也是最後一個開發階段。寧靜還沒有計劃發佈的日期。

Serpent :

語法類似於Python的過程式(命令式)程式語言。也可以用來編寫函數式(宣告式)程式碼,儘管它不是完全沒有副作用的。首先由Vitalik Buterin創建。

智能合約 Smart Contract :

在以太坊的計算框架上執行的程式。

Solidity :

過程式(命令式)程式語言,語法類似於Javascript, C++ 或 Java。以太坊智能合約最流行和最常使用的語言。由 Gavin Wood(本書的聯合作者)首先創造。

Solidity inline assembly :

內聯彙編Solidity中包含的使用EVM彙編(EVM 程式碼的人類可讀形式)的程式碼。內聯彙編試圖解決手動編寫彙編時遇到的固有難題和其他問題。

Spurious Dragon :

在#2,675,00塊的硬分叉,來解決更多的拒絕服務攻擊向量,以及另一種狀態清除。還有轉播攻擊保護機制。

Swarm :

一種去中心化(P2P)的儲存網路。與Web3和Whisper共同使用來構建 DApps。

Tangerine Whistle :

在 #2,463,00 塊的硬分叉,改變了某些IO密集操作的燃氣計算方式,並從拒絕服務攻擊中清除累積狀態,這種攻擊利用了這些操作的低燃氣成本。

測試網 Testnet :

一個測試網路(簡稱testnet),用於模擬以太網主要網路的行為。

交易 Transaction :

以特定地址為目標,由發送帳戶簽署並提交到以太坊區塊鏈的數據。交易包含元數據,例如交易的燃氣限額(Gas Limit)。

Truffle :

一個最常用的以太坊開發框架。包含一些 NodeJS 包,可以使用 Node Package Manager (NPM) 安裝。

圖靈完備 Turing Complete :

在計算理論中,如果數據操縱規則(如計算機的指令集,程式設計語言或細胞自動機)可用於模擬任何圖靈機,則它被稱為圖靈完備或計算上通用的。這個概念是以英國數學家和計算機科學家阿蘭圖靈命名的。

Vyper :

一種高級程式語言,類似Serpent,有 Python 式的語法,旨在接近純函數式語言。由 Vitalik Buterin 首先創造。

錢包 Wallet :

擁有你的所有密鑰的軟體。作為訪問和控制以太坊帳戶並與智能合約互動的界面。請注意,密鑰不需要儲存在你的錢包中,並且可以從不連網儲存裝置(例如USB或紙張)中存取以提高安全性。儘管名字為錢包,但它從不儲存實際的硬幣或代幣。

Web3 :

Web 的第三個版本。有 Gavin Wood 首先提出,Web3 代表了 Web 應用程式的新願景和焦點:從集中擁有和管理的應用程式到基於去中心化協議的應用程式。

Wei :

以太的最小單位,10^18^ wei = 1 ether.

Whisper :

一種去中心化(P2P)消息系統。與Web3和Swarm一起使用來構建 DApps。

零地址 Zero address :

特殊的以太坊地址,全部由 0 組成(即 0x0000000000000000000000000000000000000000),被指定為創建一個智能合約所發起的交易(Transaction)的目標地址(即 to 參數的值)。

Latest Posts

Grin 的貨幣政策
Grin 的貨幣政策

本篇文章是翻譯自Grin的Gitgub的內容,在說明Grin為什麼採取當前的發行政策,以前其背後對於比特幣等加密貨幣的思想,以及如何將自己的理解變為Grin中的發行政策。譯者認為加密貨幣的發行政策一直是大家鮮少注意到,卻極為重要的一塊,因此翻譯了這篇文章,簡單而言,Grin的核心貢獻者認為貨幣能有價值不在於有沒有硬頂,而是能不能有透明的發行政策。 by Williams Lai

Cypherpunks Taiwan (8) -如何使用github & 衛星計畫進度
Cypherpunks Taiwan (8) -如何使用github & 衛星計畫進度

活動影片:

Cypherpunks GitHub 教學演講
Cypherpunks GitHub 教學演講

GitHub 可以說是現今時代中工程師的一種社交網路, 當你發現原始作者有一些感興趣的專案時,你想為此專案作貢獻,加入原作者專案 Contributor 的行列時。就可以參考本文件一步一步操作。