Transactions

在一次交易中從一個 ETH 地址發送多個 ECR20 代幣?

  • March 20, 2022

是否可以在單個交易中(有或沒有智能合約)將多個 ECR20 代幣(即 USDT 和 USDC)從單個乙太坊地址(EOA)發送到另一個地址(EOA)?如果是,這會導致天然氣成本降低嗎?如果可以,如何計算節省的費用?

我已閱讀有關此主題的相互矛盾的資訊。根據一位 reddit 使用者的說法:

如果沒有這樣的包裝合約,在一次交易中移動多個代幣是不可能的。

然而,據另一位使用者說:

肯定會省油。所有交易都有 21k 的氣體,並且根據使用的操作,契約會在此基礎上添加。如果您創建一個結合了 2 筆交易的合約,您將保存其中一筆交易的 21k

誰是對的?如果可以在一次交易中發送兩個代幣,我將如何計算節省的費用?

這個問題似乎確實解決了(不是雙關語)在單個交易中發送 eth + 其他令牌的問題。相同的答案是否適用於發送多個 ECR20 令牌而不發送 eth?此外,它沒有解決通過智能合約發送代幣的可能性,根據上面的 reddit 文章,這應該會減少 21,000 天然氣的成本,因為這筆費用只會被評估一次。

這兩個都是對的。

主要思想是有一個執行邏輯的合約。這是第一個引用所指的“包裝契約”。如果您不使用合約,則必鬚髮送只能做一件事的單個交易:例如,轉移一個代幣金額。

ERC-20代幣的轉賬有兩種方式:使用transfer函式直接轉賬或使用和組合間接approve轉賬transferFrom。通常,在交易時,會使用第二種間接方法,但這取決於您的需要。

如果您的合約擁有代幣,您可以簡單地創建一個看起來像這樣的函式(如果將所有代幣發送給同一個接收者):

function SendMultiple() public {
   tokenA.transfer(receiver, amount);
   tokenB.transfer(receiver, amount);
   tokenC.transfer(receiver, amount);
}

請注意,21k 是將 ETH(或 MATIC,或 BNB)從一個帳戶發送到另一個帳戶的氣體量。代幣轉移是另一個問題,它是關於在智能合約中執行一個功能。我認為答案 2 混淆了事情。另一個問題是,在代幣合約中呼叫 transfer 函式的人必須是代幣的所有者,因此除非合約擁有這些代幣,否則合約不能轉移多個代幣,正如 Lauri 上面所寫(但我認為應該強調這一點) .

如果您的問題是是否可以通過外部賬戶僅通過一筆交易轉移兩種類型的代幣,那麼答案是否定的,不是。因為您需要使用您的帳戶單獨訪問合約,呼叫 transfer 函式。

引用自:https://ethereum.stackexchange.com/questions/92434