Solidity
合約餘額
我正在測試智能合約,但在我的 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
在您的非同步測試中使用每個事務以確保它們以正確的順序執行。