Solidity

用值編碼函式數據

  • December 19, 2021

我有契約 A:

import "@openzeppelin/contracts/utils/Address.sol";

contract A {

using Address for address payable;

function proxyCallWithValue(address payable target, bytes memory callData, uint256 value)
external
payable {
    target.functionCallWithValue(callData, value);
}
}

和契約B:

contract B {

   function test(uint256 tokenId)
   external
   payable {
    //doing something..
   }
 }

而且我希望合約 A 呼叫 B 的價值。

沒有價值我會去;

const aABI = getContractABI('A')
const bABI = getContractABI('B')
const bInterface = new ethers.utils.Interface(bABI)
const tokenId = 1234
const value = 1000000
const callData = bInterface.encodeFunctionData("test", [tokeiId])

const contractA = ethers.Contract(aAddress, aABI, provider)

// calling contract A (which should call bontract B)
await contractA.proxyCallWithValue(bAddress, callData, value)

呼叫方法時如何將值從呼叫錢包發送到合約 A proxyCallWithValue

當您談論“發送價值”時,我假設您想在通話中發送 ETH。您可以在通話中使用 指定此項{value: 1000000 }

這在Solidity 文件中指定。

在呼叫其他合約的函式時,您可以通過特殊選項指定呼叫時發送的 Wei 或 Gas 數量{value: 10, gas: 10000}

您還可以使用 讀取在呼叫中發送的值msg.value

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