Web3js
如何將多個單個智能合約操作組合成單個交易
是否可以將多個智能合約操作/函式呼叫批處理到單個事務中?
例如,我有n 個NFT,我想在每個 NFT 上呼叫兩個函式。如果我通過 Etherscan 進行互動,我必須為 2 * n次交易支付 gas,並且希望避免這種情況。
- 是否可以將這些批處理在一起?考慮到參數的設置方式,我目前的想法是否定的。但也許(希望)我是不正確的,這是可能的。
- 如果可能的話,我是否需要部署一個新的智能合約來做到這一點?如果我不需要部署智能合約,實現會是什麼樣子?我是否使用 ethers.js 之類的東西與合約進行互動?
- 批處理操作真的會節省gas嗎?
智能合約:
https://etherscan.io/address/0xc2c747e0f7004f9e8817db2ca4997657a7746928#writeContract
期望的行動:
x NFT 的changeName和transferOwnership
從 EOA(外部擁有的帳戶)發送交易時,它總是只有一個目的地和一個函式呼叫。因此,您需要以這種方式發送多個交易,以與多個合約進行互動。
但是,契約沒有這樣的限制。只要遵守 gas 限制,合約就可以隨心所欲地做任何事情。所以你可以創建一個合約函式來完成所有的工作,然後你只需要呼叫那個函式。
這裡棘手的部分是,當契約而不是您的 EOA 做事時,這
msg.sender
就是契約。這意味著如果你想做任何代幣轉移之類的事情,合約必須擁有代幣。所以基本上你需要將你的資產所有權委託給契約。請注意並記住在合約中實現所有必需的功能來處理資產。如果你忘記實現一些想要的功能並且你將資產發送到合約中,你可能永遠無法將它們從合約中取出。