Truffle

我如何在 Solidity 中使用 Truffle 和 payable 修飾符實際測試薄荷函式

  • April 25, 2022

我正在創建一個智能合約並嘗試使用 Truffle 對其進行測試。我對如何呼叫 mint 函式(如何從測試函式實際執行事務)有點困惑。我知道在我的測試中這一切都錯了,只是不確定呼叫應付函式時的語法。

function myMint(uint256 numberOfTokens) external payable nonReentrant {
   require(saleActive,"Nope");
   require(numberOfTokens > 0, "You cannot mint 0.");
   require(SafeMath.add(_numMinted.current(), numberOfTokens) <= MAX_PUBLIC_MINT, "Exceeds maximum supply.");
   require(numberOfTokens <= MAX_PURCHASE, "Exceeds maximum number");
   require(getNFTPrice(numberOfTokens) <= msg.value, "The Amount of Ether sent is not correct.");

   for(uint i = 0; i < numberOfTokens; i++){
       uint256 tokenIndex = _tokenIdCounter.current();
       _numMinted.increment();
       _tokenIdCounter.increment();
       _safeMint(msg.sender, tokenIndex);   
   }
}

在我的測試功能中

 describe('minting', async () => {

   it('creates a new token', async () => {
     const open = await contract.startSale();
     const result = await debug(contract.myMint(1));
   })
 })

如果您使用 web3,則需要.call()在方法呼叫之後添加,例如 : contract.myMint(1).call()。如果你使用 ethersjs,你的電話很好。

在所有情況下,方法呼叫都是非同步操作,您需要等待結果:const result = await debug(await contract.myMint(1));

它失敗了,因為您沒有發送任何乙太幣並且該功能需要一些金額

require(getNFTPrice(numberOfTokens) <= msg.value, "The Amount of Ether sent is not correct.");

要發送金額,請使用值參數contract.myMint(1, { value: web3.utils.toWei("0.01", "ether") })。例如

describe('minting', async () => {

   it('creates a new token', async () => {
       const open = await contract.startSale();
       const result = await debug(contract.myMint(1, {
           from: "0x12341234..",
           value: web3.utils.toWei("0.01", "ether"),
       }));
   })
})

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