我是新手,所以我的问题可能很简单。我有两个合同"BankA“和"customer”。每当我在BankA开发环境中部署pay()并调用D0时,就会出现以下错误:
Error: Returned error: VM Exception while processing transaction: revert at PromiEvent (C:\Users\lenovo\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\contract\lib\promievent.js:9:1)解决办法是什么。谢谢。
BankA:
pragma solidity ^0.5.12;
import "./customer.sol";
contract BankA{
function pay() public returns(uint256){
customer client=new customer();
address(client).transfer(1000);
return address(client).balance;
}
function() external payable{}}
顾客:
pragma solidity^0.5.12;
contract customer{
function() external payable{}
}
}发布于 2020-02-06 15:51:31
看起来,只要BankA有足够的资金,它就应该发挥作用。
请记住这一点:
address(client).transfer(1000);如果没有足够的资金将1000发送给客户,则无法工作。
因此,要么用{value: 1000}调用(或更多),要么使用后遗症将一些资金转入BankA。否则,它将因资金不足而失败。
希望能帮上忙。
附注:考虑address(client).transfer(msg.value);转发收到的任何信息。
发布于 2021-05-05 08:39:26
当我们看到,两个合同都有回退功能。因此,他们可以在平台上接收和发送一些以太。正如@回答的那样,错误来自BankA的余额值。BankA绝不能发送乙醚超过它的平衡。为了使您的代码在这个问题上变得更聪明,我建议下面的代码可以告诉您BankA的平衡:
pragma solidity ^0.5.12;
import "./customer.sol";
contract BankA{
function pay() public returns(uint256){
require(address(this).balance>1000, "Balance Not Enough");
customer client=new customer();
address(client).transfer(1000);
return address(client).balance;
}
function() external payable{}
}https://ethereum.stackexchange.com/questions/79664
复制相似问题