Ethereum 添加传输的固体错误(1乙醚)

Ethereum 添加传输的固体错误(1乙醚),ethereum,solidity,Ethereum,Solidity,错误消息: 交易到付款。存款错误:VM错误:还原。 还原事务已还原为初始状态。 注意:如果您发送值,并且您发送的值应该小于您当前的余额,则调用的函数应该是可支付的。调试事务以获取更多信息 它在我的混音虚拟机上正常工作 因此,请确保: 合同的余额大于1% 如果Account2是合同的地址,那么它需要有一个回退功能来接收以太网 它在我的混音虚拟机上正常工作 因此,请确保: 合同的余额大于1% 如果Account2是合同的地址,那么它需要有一个回退功能来接收以太网 如果您不想使用msg.value,那

错误消息:

交易到付款。存款错误:VM错误:还原。 还原事务已还原为初始状态。 注意:如果您发送值,并且您发送的值应该小于您当前的余额,则调用的函数应该是可支付的。调试事务以获取更多信息


它在我的混音虚拟机上正常工作

因此,请确保:

  • 合同的余额大于1%

  • 如果
    Account2
    是合同的地址,那么它需要有一个回退功能来接收以太网


  • 它在我的混音虚拟机上正常工作

    因此,请确保:

  • 合同的余额大于1%

  • 如果
    Account2
    是合同的地址,那么它需要有一个回退功能来接收以太网


  • 如果您不想使用msg.value,那么您的合同必须有足够的余额。 因此,您可以先创建一个回退函数,以便在合同中存入足够的乙醚,然后可以调用存款()函数

    添加回退功能后的合同

    pragma solidity ^0.5.1;
    contract Payment{ 
        address Account2;
        address Owner;
    
        constructor() public{
            Account2 = 0x583031D1113aD414F02576BD6afaBfb302140225;
            Owner = msg.sender;
        }
    
        function () payable external{}
        function deposit() payable public{
            address(uint160(Account2)).transfer(1 ether);
        }
    
        function getContractBalance() public view returns(uint) {
            return address(this).balance;
        }
    }
    

    如果您不想使用msg.value,那么您的合同必须有足够的余额。 因此,您可以先创建一个回退函数,以便在合同中存入足够的乙醚,然后可以调用存款()函数

    添加回退功能后的合同

    pragma solidity ^0.5.1;
    contract Payment{ 
        address Account2;
        address Owner;
    
        constructor() public{
            Account2 = 0x583031D1113aD414F02576BD6afaBfb302140225;
            Owner = msg.sender;
        }
    
        function () payable external{}
        function deposit() payable public{
            address(uint160(Account2)).transfer(1 ether);
        }
    
        function getContractBalance() public view returns(uint) {
            return address(this).balance;
        }
    }
    

    我不想填写msg.value来结束交易我不想填写msg.value来结束交易Remix从每个帐户100以太开始,这足以交付这可能是因为您使用的是Javasctript VM环境。此外,这是用户帐户的余额,而不是合同的余额。因此,您必须通过放置值并调用回退函数向合同发送一定数量的100以太。我已更新了答案,并添加了一个检查合同余额的函数,该函数以wei(1以太=10^18 wei)返回值。因此,您的存款功能只有在余额大于或等于1时才起作用。我现在知道了,帐户余额!=合同余额。还有一个问题,在相同的情况下,为什么msg.value可以成功?msg.value用于从用户帐户向合同发送以太,因此当您使用msg.value时,balnce将从您的100以太(用户帐户)中扣除并发送到合同地址,然后在那里传输到定义的Account2 addressremix开始时,每个帐户使用100以太,这就足够交付了,这可能是因为您使用的是Javasctript VM环境。此外,这是用户帐户的余额,而不是合同的余额。因此,您必须通过放置值并调用回退函数向合同发送一定数量的100以太。我已更新了答案,并添加了一个检查合同余额的函数,该函数以wei(1以太=10^18 wei)返回值。因此,您的存款功能只有在余额大于或等于1时才起作用。我现在知道了,帐户余额!=合同余额。还有一个问题,在相同的情况下,为什么msg.value可以成功?msg.value用于从用户帐户向合同发送以太,因此,当您使用msg.value时,balnce将从您的100以太(用户帐户)中扣除,并发送到合同地址,然后传输到定义的Account2地址