solidity - 如果您发送值,则应支付构造函数
问题描述
我是这个智能合约世界的新手。从不同的来源阅读后,我了解到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);
}
}
解决方案
您只能使用您在与智能合约交互时设置的 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 的好主意。
推荐阅读
- java - 在Java中找到具有低时间复杂度的第n个素数
- php - 为什么使用 ZipArchive 在 PHP 中修改或添加文件到 Zip 会搞砸?
- django - 只允许登录用户提交对帖子的评论
- ios - 可以将分析划分为调试和发布吗?
- dns - 虚拟主机错误。Apache 使用此配置失败
- c++ - 我想知道自定义向量实现的 begin() 有什么问题。它告诉我“将矢量重新定义为特殊符号
- python - 如何用beautifulsoup提取具有相似属性的数据
- javascript - 我正在尝试根据按钮单击隐藏和显示 div
- prisma - 如何使用 Prisma Secrets 解决“无效令牌”问题?
- c++ - 如何保证 C++ 模板类特化之间的接口一致?