如果您发送值,则应向构造函数付款

时间:2019-05-06 12:46:31

标签: solidity smartcontracts

我是这个智能合约世界的新手。从不同的来源阅读后,我知道坚固性还不成熟并且还在发展。

我正在remix IDE上运行此代码。除了function transfertocontracts(uint amount) public之外,其他一切都正常。我在这里想要做的是,我正在尝试将例如:10的一些醚转移到我的合约中,然后稍后使用此功能function Transfer_Contract_Amount() public,我会将所有合约金额转移到特定地址。 / p>

现在是什么问题?

问题是当我运行此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);
    }
}

1 个答案:

答案 0 :(得分:0)

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

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。