Flutter — 區塊鏈虛擬貨幣交易
Published in
6 min readMay 5, 2020
上次介紹區塊鏈虛擬貨幣錢包後,今天想分享區塊鏈虛擬貨幣的交易,讓大家知道一筆區塊鏈交易是如何建立出來的。
本篇主要介紹如何透過Flutter建立以太坊虛擬貨幣交易
Ethereum
這幾年區塊鏈世界中最有名的就是以太坊,Vitalik Buterin 認為區塊鏈除了應用在加密貨幣之外,應該要拓展到各個領域,各行各業,讓世界的運轉更加透明平等,因此開發了一個區塊鏈平台 — 以太坊(Ethereum),他讓不同領域的開發人員建立區塊鏈去中心化應用程式 Dapp (Decentralized Applications)。
Transaction
以太坊最大的特色就是智能合約(Smart Contract),必須透過交易才可執行。首先說明送出一筆交易的主要流程:
- 準備交易資料。
- 使用 Private Key,對交易資料進行簽章。
- 透過Etherscan APIs,送出簽章過的交易。
接下來說明以太坊的交易內容有哪些:
- Nonce:發送方帳戶發送過的交易總數。
- To:接收方帳戶的地址。
- Value:發送方帳戶要轉移給接收方帳戶的以太幣(Ether)總額。
- Gas Price:發送方帳戶需要支付這筆交易中每一個運算步驟所需要支付的手續費。
- Gas Limit:這筆交易中設定的手續費上限值。如果交易運算量的Gas超過上限,則交易將會失敗。
- Data:智能合約的 Encoded Function,可省略。
- V、R、S:發送方帳戶的數位簽章,驗證這筆交易是否為發送方帳戶發送。
最後說明一下以太坊簽章交易的詳細過程:
- 將準備好的交易資料做 RLP Encode,再做 SHA3–256(Keccak)。
- 將Encode後的結果與 Private Key 一起做 Secp256k1 演算法,最後得到Signature。
- 從Signature中分別取得 V、R、S,並且將 V、R、S 置換到 Raw Transaction Data 中。
- 將置換好 V、R、S 的 Raw Transaction Data 再做一次 RLP Encode,最後 Encode 的結果就是 Serialized Tx,也就是簽章過的交易。
Flutter + Ethereum Transaction
- 加入Web3Dart lib
- 產生錢包地址。
- 準備交易資料。
var fromAddress = EthereumAddress.fromHex('0x71ce8ea779caf185d8f01417dcbc48542c831fd9');var toAddress = EthereumAddress.fromHex('0xC914Bb2ba888e3367bcecEb5C2d99DF7C7423706');var value = EtherAmount.inWei(BigInt.from(1000000000000000000));
var gasPrice = EtherAmount.inWei(BigInt.from(20000000000));
var gasLimit = 21000;var transaction = Transaction(
nonce: 0,
from: fromAddress,
to: toAddress,
value: value,
gasPrice: gasPrice,
maxGas: gasLimit,
);
- Raw Transaction Data 透過 Private Key 做簽章,產生一筆Serialized Tx,之後就可以透過 Etherscan APIs,送出簽章過的交易到區塊鏈上。
var credentials = EthPrivateKey.fromHex('62fde5e9f9b7d8cc378bfbf0bedc38d6f364e1d62c751dc6c47f6f2a4b12e026');var client = Web3Client(null, null);
var signature = await client.signTransaction(credentials, transaction);/*
Serialized Tx
f86c808504a817c80082520894c914bb2ba888e3367bceceb5c2d99df7c7423706880de0b6b3a76400008026a0c669a4d3b2eb752cbb20ae72d6b78de8eeeab17e1a97385838a678a714fac5eda004b0d96fe89044e2448de2df5074af79c0a3c35f5b00f7669fd669f4c7d33ec7
*/
希望以上的介紹能讓大家對以太坊虛擬貨幣交易有更深入的了解!