iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Modern Web

web3 短篇集系列 第 4

在區塊鏈上做一筆交易

  • 分享至 

  • xImage
  •  

做一筆最簡單的交易,例如轉帳以太幣,它需要的資料包含 to、value 和 data。to 要放的是地址,value 要放多少 wei 的以太幣,而 data 因為是轉帳以太幣,所以不必填任何東西。

如果這筆交易要跟合約互動,例如轉帳 ERC20 代幣,那麼 data 的部分就要放 Day 2 提到的 calldata,而 value 通常就放 0。(如果不是 0,可能會把以太幣打進合約,因為此時我們的 to 是合約的地址。)

PS: 1 Ether = 1e9 Gwei = 1e18 Wei

--

回到一開始,轉以太幣一筆所需要的成本為 21,000 gas。

21000
21000
21000

等等,它好像不是那麼重要

21,000 是基本交易費,如果是呼叫合約,要再加上合約函式邏輯的複雜度所產生的 gas,最後再加上 calldata 的大小(計算方式在 Day 2 最後面有提到。)

以下使用 cast 在 sepolia 測試鏈轉帳以太幣:

cast send --account dev \
--rpc-url $sepolia \
0x9e8f8C3Ad87dBE7ACFFC5f5800e7433c8dF409F2 \
--value 0.01ether

自 2021/8/5 倫敦升級後,EIP-1559 正式上路。

  • 計算 gas 價格的公式:

effectiveGasPrice = baseFeePerGas + priorityFeePerGas

  • 計算交易手續費的公式:

Transaction Fee = gasPrice * gasUsed

--

使用 cast 取得當前鏈上的 baseFeePerGas,以下兩個都可以:

cast to-unit $(cast gas-price --rpc-url $sepolia) gwei
cast block --rpc-url $sepolia

送交易時 cast send 提供以下幾個指令讓我們限制手續費的使用:

  • --gas-limit: 限制這筆交易能使用多少 gas,若 gas 設定的不夠會導致交易成功上鏈,但是狀態為失敗。若是合約函式執行失敗,已消耗的 gas 所造成的手續費不會退款。
  • --gas-price: 亦即 maxFeePerGas,要大於 baseFeePerGas 交易才會成功,否則無法送上鏈。
  • --priority-gas-price: 亦即 maxPriority,為每單位 gas 願意給礦工的價格。

將訊息寫在交易內

在轉 ether 的時候,或你其實也不想轉任何錢 (value = 0),想要直接送一筆交易到鏈上,並且附上 hello word 在交易的 input data,可以這麼做:

cast send --account dev \
--rpc-url $sepolia \
0x0000000000000000000000000000000000000000 \
$(cast from-utf8 "hello world")

使用 cast tx 取得交易訊息

cast tx \
--rpc-url $sepolia \
0x6c1333731757b2a30bf1c642733207d2e99d0b01efb41f256392c8d2e6f00189

Output:

accessList           []
blockHash            0xae002191a7f503cc9e283be59f389b12115276222ec0efed7c88b1e15988eb03
blockNumber          6671454
chainId              11155111
from                 0xd78B5013757Ea4A7841811eF770711e6248dC282
gasLimit             42334
hash                 0x6c1333731757b2a30bf1c642733207d2e99d0b01efb41f256392c8d2e6f00189
input                0x646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e535568455567414141426741414141594341594141414467647a33344141414142484e4353565149434167496641686b6941414141416c7753466c7a4141414170674141414b59423358332f4f41414141426c30525668305532396d64486468636d5541643364334c6d6c7561334e6a5958426c4c6d39795a35767550426f4141414e43535552425645694a745a5a5062427446464d5a2f4d3775625864746462317853467965696c426170795356553868384f6f46616f6f4653716969684956497051424b6369364b456739513648396b6f7649486f434956514a4a434b4531454e466a6e416763615347433672456e784277413034547834337432466e764441666a6b4e6962786748786e576232652f753939326265653774436130305946736666656b46592b6e557a46746a57304c72766a5258724344494161504c6c57306e484c3053735a74566f614639386d4c7278337064684f714c74595048436861685a6359594f374b7650467876526c3558507031734e336164576944315a4171443658594b31622f647645354957727954743275644c4665647763312b396b4c702b766262706f44682b36546b6c784265416939544c307461655770646d5a7a514472793041634f2b6a51313252796f6871716f596f6f385244774a72552b71586b6a57746669385878743538426451757751733971432f61664c77437738746e516271594150736778453153364633454149587578326f51464b6d3069684d734f463731644859782b66334e4e443638676843753159496f655050514e3170475241426b4a364275733936437574525a4d7964546c2b547675695257316d336e3065446c30765250634579737164586e2b6a7351507372484d717547655845615934596b34777857635935562f397363714f4d4f5655467468617479547938517971775a2b6b4455524b6f4d57784e4b7232456571564b63544e4f616a714b6f42674f45323855347464516c357035627743773742577175615a537a41506c776a6c6974684a7470337054496d537151527262325a3850484769674434525a754e58364a596a36776a374f3454464c62434f2f4d6e2f6d38522b6836725953556233656b6f6b525936662f59756b41724e3937396a63572b562f5338673065542f4e33564e336b54715762513432386d392f386b30502f31614968463336506363456c3645684f6341554372584b5a5858575333584b643276632f54524247394f35454c4331374d6d57756244326e4b68554b5a6132364261322b4433502b342f4d4e4346776735396f57566559686b7a674e2f4a44523864654b426f4437592b6c6a456a475a30736f735856547662633652486972723272654e79314f586436704a73512b67716a6b38565746596d487277427a572f6e2b754d504669527748423249376968386369484678496b642f334f6d6b357443445631742b326e4e75357378787044464e782b68754e685654332f7a4d447a38757358433364646148426a3147486a2f4173303866775453374b74314842546d794e323976647741772b2f7762774c564f4a337541443177692f64554837516569363650667975526a34496b3969732b68676c66626b62665233636e5a6d3763686c55574c64776d707274436f6858344855746c4f63516a4c5943752b667a474a483251524b765033554e7a3862576b31714d786a47544f4d54685a336b76674c4935417a46666f3337395541414141415355564f524b35435949493d
maxFeePerGas         94230207783
maxPriorityFeePerGas 325098953
nonce                83
r                    0x76c5c8dd3924a6f96afdb095f086dbe91c592dde527a51c3b88e05a77f6aa573
s                    0x5a77b6d8dd58a3068f72a4653d1dc8ffc1a989c91f99c5a6dbf86ed1e38ccabe
to                   0x0000000000000000000000000000000000000000
transactionIndex     141
type                 2
value                0
yParity              1

若要將交易的 input 解碼可以使用

cast to-ascii <data>

下次當你想要用以太幣來付錢時,可以為交易寫個筆記:

cast send --account dev \
--rpc-url $sepolia \
--value 0.001ether \
0x9e8f8C3Ad87dBE7ACFFC5f5800e7433c8dF409F2 \
$(cast from-utf8 "上次吃飯欠你的錢")

Reference


上一篇
使用 Foundry 學習 Solidity
下一篇
敲開 EVM Opcodes 的入門磚
系列文
web3 短篇集14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言