![](/img/trans.png)
[英]Solidity Expected unidentified error in smart contract code - Remix
[英]SOLIDITY REMIX compiler, after deploying my contract getting this ERROR (Invalid BigNumber string)
我正在研究我的 Udemy 课程项目..这门课程的问题是使用了旧版本的solidity 0.4.17 ..我正在尝试将这个项目更新到当前版本......在更新代码并尝试之后在 Remix 编译器上编译...它在特定行上编译时没有任何错误或警告,但是当我尝试在 remix 上部署合同时:
表明:
创建活动出错:编码 arguments 时出错:错误:无效的 BigNumber 字符串(argument="value", value="", code=INVALID_ARGUMENT, version=bignumber/5.1.1)
所以我真的不明白这里有什么问题?
这是我的solidity合约代码:
// SPDX-License-Identifier: GPL-3.0
实用性 >0.4.17 <0.8.0;
合同 CampaignFactory {
address[] public deployedCampaigns;
function createCampaign(uint minimum) public {
address newCampaign = address ( new Campaign(minimum, msg.sender));
deployedCampaigns.push(newCampaign);
}
function getDeployedCampaigns() public view returns (address[] memory) {
return deployedCampaigns;
}
}
合同活动{
struct Request {
string description;
uint value;
address recipient;
bool complete;
uint approvalCount;
mapping(address => bool) approvals;
}
Request[] public requests;
address public manager;
uint public minimumContribution;
mapping(address => bool) public approvers;
uint public approversCount;
modifier restricted() {
require(msg.sender == manager);
_;
}
constructor(uint minimum, address creator){
manager = creator;
minimumContribution = minimum;
}
function contribute() public payable {
require(msg.value > minimumContribution);
approvers[msg.sender] = true;
approversCount++;
}
uint numRequest;
function creatRequest(string memory description, uint value, address recipient) public restricted {
Request storage newRequest = requests[numRequest++];
newRequest.description = description;
newRequest.value = value;
newRequest.recipient = recipient;
newRequest.complete = false;
newRequest.approvalCount = 0;
}
function approveRequest(uint index) public {
Request storage request = requests[index];
require(approvers[msg.sender]);
require(!request.approvals[msg.sender]);
request.approvals[msg.sender] = true;
request.approvalCount++;
}
function finalizeRequest(uint index) public restricted {
Request storage request = requests[index];
require(request.approvalCount > (approversCount / 2));
require(!request.complete);
payable(request.recipient).transfer(request.value);
request.complete = true;
}
}
提前感谢您抽出宝贵时间来研究这个问题......
编辑:
好的,我经理传递了这个错误,但是现在当我尝试创建我的请求时,我收到一个错误:
[vm] 来自:0x5B3...eddC4to:Campaign.creatRequest(string,uint256,address) 0x7b9...b6AcEvalue:0 weidata:0x83e...00000logs:0hash:0x8d9...a5ccb 交易到 Campaign.creatRequest 错误: VM 错误:操作码无效。 无效的操作码 执行可能已经抛出。 调试事务以获取更多信息。
所以我做的步骤:
将我的最低贡献设置为“0”并添加创建者地址“0x0ABC”
我贡献了 1 个具有相同地址“0x0ABC”的以太币
我从混音副本中选择一个随机不同的地址并粘贴到我的“createRequest”中我添加字符串“string”数量“uint”地址“0x0CCC”
当我单击 createRequest 时,我收到上面提到的这个错误;
Solidity 当前(v0.8)不允许将“包含映射的结构”写入存储数组。 但是你可以把它写成一个映射。
mapping (uint => Request) public requests; // changed to mapping
代替
Request[] public requests; // original code
您将失去检索数组长度的能力。 但是您已经将它保存在numRequest
变量中,所以一切都很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.