iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
Modern Web

web3 短篇集系列 第 20

實作自己送 UserOperation - Part 2

  • 分享至 

  • xImage
  •  

繼昨天的實作,今天如期藉由提高 callGasLimit 成功送出 User Operation,本篇簡單紀錄一些程式碼修正、一些疑問,以及探索 ERC-4337 的資源。

今天成功的交易和 UserOp:

因為是送出第二筆 UserOp,nonce 要做更新,否則會有 AA25 invalid account nonce:

nonce: IEntryPoint(entryPoint).getNonce(account, 0),

由於昨天在 SCA 在 EntryPoint 的存款還有 927,128,因此今天的這筆就不需要在 depositTo EntryPoint,成功將 0.01 Ether 從 SCA 轉出去後,補償 43,629 wei 給受益人。

今日交易的 Gas Profiler:

我的疑問是,為什麼昨天的 UserOp 需要 82,871,今天只需要 43,629?

我猜是少了 depositTo 的轉帳,因為 SCA 有存款在 EntryPoint,因此不需要再投入 prefund,但又覺得 gas 花費差太多。

  • 昨日交易成功但 UserOp 失敗的 Txn

--

順帶筆記,UserOperation 物件內其中一欄 callData,是放 EntryPoint 呼叫 SCA 的 Input Data,因此要記得如果 SCA 要跟合約互動,要 encode 兩次,第一次是 SCA 要呼叫的 calldata,接著放入 EntryPoint 要呼叫 SCA 的 calldata,後者才是 UserOperation 的 callData。

因此,SCA 在設計上,用於執行交易的 execute 函式是能夠任意設計的,只要 EntryPoint 能夠用 callData 成功呼叫 SCA 就行。

--

最後,我要來呼應 Anton 從抽象帳戶到 ERC4337 文末的推薦:

這四篇講解清晰,Part 1 讀完,後面就比較輕鬆了,非常後悔當初沒有先讀這四篇:


上一篇
實作自己送 UserOperation - Part 1
下一篇
模組化合約帳戶 (ERC-7579)
系列文
web3 短篇集30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言