Solidity

合約餘額

  • June 1, 2021

我正在測試智能合約,但在我的 javascript 測試文件中訪問合約餘額時遇到問題。為簡單起見,假設這是我的智能合約:

contract Donation{
 function donate() external payable{}

 function getBalance() external view returns(uint)
 {
   return address(this).balance;
 }
}

在 remix 中,我呼叫了 value = 1 ether 的 donate() 函式,然後當我呼叫 getBalance() 函式時,它返回了正確的餘額值。

但是,當我將 Ganache 與 javascript 結合使用時,我只能得到 0 作為契約餘額的值。這就是我的測試的樣子:

it( 'Test contract', async() => {
 instance = await Donation.deployed();

 let balance = await web3.eth.getBalance(instance.address);
 console.log("balance = ", balance);

 user1 = accounts[0];
 instance.donate({value:400000000});

 balance = await web3.eth.getBalance(instance.address);
 console.log("balance = ", balance);
});

第一個 console.log 返回 0 作為智能合約的餘額,這很好。但是,在呼叫值為 400000000 的 donate() 函式後,我預計第二個 console.log() 會將該值作為合約餘額返回。

我不知道為什麼 donate() 函式不會增加契約餘額。有人知道這裡有什麼問題嗎?

您只需要替換instance.donate({value:400000000});await instance.donate({value:400000000});即可獲得所需的行為。

實際上,始終await在您的非同步測試中使用每個事務以確保它們以正確的順序執行。

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