首页 > 解决方案 > 如果您发送值,则应支付构造函数

问题描述

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

我在 remix 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);
    }
}

标签: soliditysmartcontracts

解决方案


您只能使用您在与智能合约交互时设置的 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上运行它,在左侧的运行选项卡上,您可以将 ether 的值发送并进一步运行 transfertocontracts 函数以存储该值,这是使用 msg.value 的好主意。


推荐阅读