如果您发送价值,构造函数应该是可支付的

The constructor should be payable if you send value

我是这个智能合约世界的新手。在从不同来源阅读后,我了解到 solidity 还不成熟并且仍在发展中。

我正在 运行 将这段代码混音 IDE。除 function transfertocontracts(uint amount) public 外,一切正常。我想在这里做的是,我正在尝试将一些以太币转移到我的合同中,例如:10,然后使用此功能 function Transfer_Contract_Amount() public 我会将合同的所有金额转移到特定地址。

现在是什么问题?

问题是,当我 运行 这个 function transfertocontracts(uint amount) public 我得到这个错误:Note: The constructor should be payable if you send value. debug the transaction to get more information.

所以请任何人帮助我!!!

并提示我的做法是否正确?

谢谢!!


contract SLA{

    address seller;


    event DepositFunds(address from, uint amount);

    constructor() payable public {
        seller = msg.sender;
    }


    function transfertocontracts(uint amount) public{
       address(this).transfer(amount);
    }

    function seePerson_Amount() public view returns(uint){
       return seller.balance;
    }

    function seeContract_Amount() public view returns(uint){
       return address(this).balance;
    }

    function Transfer_Contract_Amount() public{
       seller.transfer(address(this).balance);
    }
}

您只能使用您在与智能合约交互时设置的值属性来发送以太币。下面是工作代码

pragma solidity >=0.4.22 <0.6.0;
contract SLA{

 address payable seller;


event DepositFunds(address from, uint amount);

constructor() payable public {
    seller = msg.sender;
}


function transfertocontracts(uint amount) payable public{

}

function seePerson_Amount() public view returns(uint){
   return seller.balance;
}

function seeContract_Amount() public view returns(uint){
   return address(this).balance;
}

function Transfer_Contract_Amount() payable public{
    seller.transfer(address(this).balance);
}
}

要检查,你可以 运行 在 remix 上,在左侧的 运行 选项卡上,你可以输入要发送的以太币的价值, 运行 transfertocontracts 函数进一步存储值,使用 msg.value.

是个好主意