1. 程式人生 > >以太坊代幣與賬戶交易

以太坊代幣與賬戶交易

right 當前 cell div 賬戶 ont 失效 新建 發現

以太的單位

以太幣的最小單位是Wei。Wei是一個非常小的單位,1Ether= 1018 Wei,和無限可分也差不了多少了。除了基本單位Wei,為了使用方便還有其他的單位,他們的關系如下:

  • Kwei = 103 Wei
  • Mwei = 106 Wei
  • Gwei = 109 Wei
  • Microether = 1012 Wei
  • Milliether = 1015 Wei
  • Ether / SCC = 1018 Wei

我們一般記住wei , Gwei=109wei,Ether = 1018wei即可。

代幣交易過程

技術分享圖片

交易(Transaction)的過程原理

1.交易發起

指定目標地址和交易金額,以及需要的gas price/gas limit等信息,構建一筆交易並生成Transaction實例。創建的交易json字段定義:

技術分享圖片

根據這個json字段可生成一個Transaction實例:

Transaction 實例結構

txdata // txdata字段

From // 緩存數據:發送方地址

Hash // 緩存數據:交易Hash

Size // 緩存數據:交易的大小

其中txdata這個數據結構我們需要用來進行數字簽名:

技術分享圖片

2.交易簽名

使用賬戶私鑰對交易進行簽名。

當前代幣所有者先通過Keccak-256算法計算交易數據的hash值,然後結合賬戶的私鑰,通過ECDSA-secp256k1,也就是橢圓曲線數字簽名算法生成簽名數據(RSV)並將這個簽名附加在transaction實例的末尾,制作成交易單。

技術分享圖片

我們發現,txdata只有接收方的地址(Recipient)而沒有發送方的地址,R,S,V的作用就是我們可以使用ECDSA推導獲得from:

技術分享圖片

經過以上交易實例的構造,我們就可以將實例提交到交易池txpool了。

3.提交交易

簽名後的交易會先提交到本地SCC鏈節點,本地節點先對交易簽名進行驗證後,把transaction實例的這筆交易加入到交易緩沖池txpool中。提交交易的目標是先把交易放入交易池的隊列queue中記錄在案,然後再從queue中選一部分放入pending中進行處理。如果發現txpool滿了,則依據price中的排序,剔除低油價的交易。

4.節點確認

一個或者多個節點對txpool中的交易的信息驗證確認。

生成的交易需要被區塊鏈網絡中的礦工節點打包到區塊,才能寫入到區塊鏈中。礦工會有一個待處理的交易列表,其中的交易是按交易的gasPrice進行排序的,交易的gasPrice越高,處理的優先級就越高。如果交易的gasPrice過低,有可能一直得不到礦工的處理,從而被忽略。

礦工節點選擇好要打包的交易之後,就開始了PoW(Proof of Work)挖礦過程,最先發現新的區塊的礦工能夠將交易打包至區塊,並且獲取到相應的獎勵。節點會確認這個區塊所包含的交易是否有效,確認沒被重復花費且具有效數位簽章後,接受該區塊,此時區塊才正式接上區塊鏈,無法再竄改資料。

5.廣播交易

把交易信息廣播給其他結點。

新的區塊已經產生,所有的節點都需要對區塊進行同步,你的交易會隨著區塊的同步被同步至所有節點上。所有節點一旦接受該區塊後,先前沒算完的區塊會失效,各節點會重新建立一個區塊。每個區塊的出塊時間大約在10s,隨著全網算力的不斷變化,每個區塊的產生時間會隨算力增強而縮短,隨算力減弱而延長。

以太坊代幣與賬戶交易