[英]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.