以太幣(Ethereum)官網、錢包、礦池及交易平臺全方位介紹

買賣虛擬貨幣

以太坊的目的是基於指令碼、競爭幣和鏈上元協議(on-chain meta-protocol)概念進行整合和提高,使得開發者能夠建立任意的基於共識的、可擴充套件的、標準化的、特性完備的、易於開發的和協同的應用。以太坊透過建立終極的抽象的基礎層-內建有圖靈完備程式語言的區塊鏈-使得任何人都能夠建立合約和去中心化應用並在其中設立他們自由定義的所有權規則、交易方式和狀態轉換函式。域名幣的主體框架只需要兩行程式碼就可以實現,諸如貨幣和信譽系統等其它協議只需要不到二十行程式碼就可以實現。智慧合約-包含價值而且只有滿足某些條件才能開啟的加密箱子-也能在我們的平臺上建立,並且因為圖靈完備性、價值知曉(value-awareness)、區塊鏈知曉(Blockchain-awareness)和多狀態所增加的力量而比比特幣指令碼所能提供的智慧合約強大得多。

以太坊賬戶

在以太坊系統中,狀態是由被稱為“賬戶”(每個賬戶由一個20位元組的地址)的物件和在兩個賬戶之間轉移價值和資訊的狀態轉換構成的。以太坊的賬戶包含四個部分:

隨機數,用於確定每筆交易只能被處理一次的計數器

賬戶目前的以太幣餘額

賬戶的合約程式碼,如果有的話

賬戶的儲存(預設為空)

以太幣(Ether)是以太坊內部的主要加密燃料,用於支付交易費用。一般而言,以太坊有兩種型別的賬戶:外部所有的賬戶(由私鑰控制的)和合約賬戶(由合約程式碼控制)。外部所有的賬戶沒有程式碼,人們可以透過建立和簽名一筆交易從一個外部賬戶傳送訊息。每當合約賬戶收到一條訊息,合約內部的程式碼就會被啟用,允許它對內部儲存進行讀取和寫入,和傳送其它訊息或者建立合約。

訊息和交易

以太坊的訊息在某種程度上類似於比特幣的交易,但是兩者之間存在三點重要的不同。第一,以太坊的訊息可以由外部實體或者合約建立,然而比特幣的交易只能從外部建立。第二,以太坊訊息可以選擇包含資料。第三,如果以太坊訊息的接受者是合約賬戶,可以選擇進行迴應,這意味著以太坊訊息也包含函式概念。

以太坊中“交易”是指儲存從外部賬戶發出的訊息的簽名資料包。交易包含訊息的接收者、用於確認傳送者的簽名、以太幣賬戶餘額、要傳送的資料和兩個被稱為STARTGAS和GASPRICE的數值。為了防止程式碼的指數型爆炸和無限迴圈,每筆交易需要對執行程式碼所引發的計算步驟-包括初始訊息和所有執行中引發的訊息-做出限制。STARTGAS就是限制,GASPRICE是每一計算步驟需要支付礦工的費用。如果執行交易的過程中,“用完了瓦斯”,所有的狀態改變恢復原狀態,但是已經支付的交易費用不可收回了。如果執行交易中止時還剩餘瓦斯,那麼這些瓦斯將退還給傳送者。建立合約有單獨的交易型別和相應的訊息型別;合約的地址是基於賬號隨機數和交易資料的雜湊計算出來的。

訊息機制的一個重要後果是以太坊的“頭等公民”財產-合約與外部賬戶擁有同樣權利,包括髮送訊息和建立其它合約的權利。這使得合約可以同時充當多個不同的角色,例如,使用者可以使去中心化組織(一個合約)的一個成員成為一箇中介賬戶(另一個合約),為一個偏執的使用定製的基於量子證明的蘭波特簽名(第三個合約)的個人和一個自身使用由五個私鑰保證安全的賬戶(第四個合約)的共同簽名實體提供居間服務。以太坊平臺的強大之處在於去中心化的組織和代理合約不需要關心合約的每一參與方是什麼型別的賬戶。

以太坊狀態轉換函式

以太坊的狀態轉換函式:APPLY(S,TX) -> S',可以定義如下:

檢查交易的格式是否正確(即有正確數值)、簽名是否有效和隨機數是否與傳送者賬戶的隨機數匹配。如否,返回錯誤。

計算交易費用:fee=STARTGAS * GASPRICE,並從簽名中確定傳送者的地址。從傳送者的賬戶中減去交易費用和增加傳送者的隨機數。如果賬戶餘額不足,返回錯誤。

設定初值GAS = STARTGAS,並根據交易中的位元組數減去一定量的瓦斯值。

從傳送者的賬戶轉移價值到接收者賬戶。如果接收賬戶還不存在,建立此賬戶。如果接收賬戶是一個合約,執行合約的程式碼,直到程式碼執行結束或者瓦斯用完。

如果因為傳送者賬戶沒有足夠的錢或者程式碼執行耗盡瓦斯導致價值轉移失敗,恢復原來的狀態,但是還需要支付交易費用,交易費用加至礦工賬戶。

否則,將所有剩餘的瓦斯歸還給傳送者,消耗掉的瓦斯作為交易費用傳送給礦工。 例如,假設合約的程式碼如下:

if !self.storage[calldataload(0)]: self.storage[calldataload(0)] = calldataload(32)

需要注意的是,在現實中合約程式碼是用底層以太坊虛擬機器(EVM)程式碼寫成的。上面的合約是用我們的高階語言Serpent語言寫成的,它可以被編譯成EVM程式碼。假設合約儲存器開始時是空的,一個值為10以太,瓦斯為2000,瓦斯價格為0.001以太並且64位元組資料,第一個三十二位元組的快代表號碼2和第二個代表詞CHARLIE。的交易傳送後,狀態轉換函式的處理過程如下:

檢查交易是否有效、格式是否正確。

檢查交易傳送者至少有2000*0.001=2個以太幣。如果有,從傳送者賬戶中減去2個以太幣。

初始設定gas=2000,假設交易長為170位元組,每位元組的費用是5,減去850,所以還剩1150。

從傳送者賬戶減去10個以太幣,為合約賬戶增加10個以太幣。

執行程式碼。在這個合約中,執行程式碼很簡單:它檢查合約儲存器索引為2處是否已使用,注意到它未被使用,然後將其值置為CHARLIE。假設這消耗了187單位的瓦斯,於是剩餘的瓦斯為1150 - 187 = 963。 6. 向傳送者的賬戶增加963*0.001=0.963個以太幣,返回最終狀態。 如果沒有合約接收交易,那麼所有的交易費用就等於GASPRICE乘以交易的位元組長度,交易的資料就與交易費用無關了。另外,需要注意的是,合約發起的訊息可以對它們產生的計算分配瓦斯限額,如果子計算的瓦斯用完了,它只恢復到訊息發出時的狀態。因此,就像交易一樣,合約也可以透過對它產生的子計算設定嚴格的限制,保護它們的計算資源。

程式碼執行

以太坊合約的程式碼使用低階的基於堆疊的位元組碼的語言寫成的,被稱為“以太坊虛擬機器程式碼”或者“EVM程式碼”。程式碼由一系列位元組構成,每一個位元組代表一種操作。一般而言,程式碼執行是無限迴圈,程式計數器每增加一(初始值為零)就執行一次操作,直到程式碼執行完畢或者遇到錯誤,STOP或者RETURN指令。操作可以訪問三種儲存資料的空間:

堆疊,一種後進先出的資料儲存,32位元組的數值可以入棧,出棧。

記憶體,可無限擴充套件的位元組佇列。

合約的長期儲存,一個秘鑰/數值的儲存,其中秘鑰和數值都是32位元組大小,與計算結束即重置的堆疊和記憶體不同,儲存內容將長期保持。

程式碼可以象訪問區塊頭資料一樣訪問數值,傳送者和接受到的訊息中的資料,程式碼還可以返回資料的位元組佇列作為輸出。

EVM程式碼的正式執行模型令人驚訝地簡單。當以太坊虛擬機器執行時,它的完整的計算狀態可以由元組(block_state, transaction, message, code, memory, stack, pc, gas)來定義,這裡block_state是包含所有賬戶餘額和儲存的全域性狀態。每輪執行時,透過調出程式碼的第pc(程式計數器)個位元組,當前指令被找到,每個指令都有定義自己如何影響元組。例如,ADD將兩個元素出棧並將它們的和入棧,將gas(瓦斯)減一併將pc加一,SSTORE將頂部的兩個元素出棧並將第二個元素插入到由第一個元素定義的合約儲存位置,同樣減少最多200的gas值並將pc加一,雖然有許多方法透過即時編譯去最佳化以太坊,但以太坊的基礎性的實施可以用幾百行程式碼實現。

區塊鏈和挖礦

雖然有一些不同,但以太坊的區塊鏈在很多方面類似於比特幣區塊鏈。它們的區塊鏈架構的不同在於,以太坊區塊不僅包含交易記錄和最近的狀態,還包含區塊序號和難度值。以太坊中的區塊確認演算法如下:

檢查區塊引用的上一個區塊是否存在和有效。

檢查區塊的時間戳是否比引用的上一個區塊大,而且小於15分鐘。

檢查區塊序號、難度值、 交易根,叔根和瓦斯限額(許多以太坊特有的底層概念)是否有效。

檢查區塊的工作量證明是否有效。

將S[0]賦值為上一個區塊的STATE_ROOT。

將TX賦值為區塊的交易列表,一共有n筆交易。對於屬於0……n-1的i,進行狀態轉換S[i+1] = APPLY(S[i],TX[i])。如果任何一個轉換髮生錯誤,或者程式執行到此處所花費的瓦斯(gas)超過了GASLIMIT,返回錯誤。

用S[n]給S_FINAL賦值, 向礦工支付區塊獎勵。 8 檢查S-FINAL是否與STATE_ROOT相同。如果相同,區塊是有效的。否則,區塊是無效的。

這一確認方法乍看起來似乎效率很低,因為它需要儲存每個區塊的所有狀態,但是事實上以太坊的確認效率可以與比特幣相提並論。原因是狀態儲存在樹結構中(tree structure),每增加一個區塊只需要改變樹結構的一小部分。因此,一般而言,兩個相鄰的區塊的樹結構的大部分應該是相同的,因此儲存一次資料,可以利用指標(即子樹雜湊)引用兩次。一種被稱為“帕特里夏樹”(“Patricia Tree”)的樹結構可以實現這一點,其中包括了對默克爾樹概念的修改,不僅允許改變節點,而且還可以插入和刪除節點。另外,因為所有的狀態資訊是最後一個區塊的一部分,所以沒有必要儲存全部的區塊歷史-這一方法如果能夠可以應用到比特幣系統中,經計算可以對儲存空間有10-20倍的節省。

ETH官網:https://www.ethereum.org/

ETH錢包下載:https://geth.ethereum.org/downloads/

交易平臺:http://www.qukuaiwang.com.cn/pingtai.html(找適合自己的)

礦池:https://www.bw.com/

https://www.f2pool.com/

https://www.antpool.com/

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;