簡體   English   中英

SOLIDITY REMIX 編譯器,在部署我的合約后收到此錯誤(無效的 BigNumber 字符串)

[英]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 錯誤:操作碼無效。 無效的操作碼 執行可能已經拋出。 調試事務以獲取更多信息。

所以我做的步驟:

  1. 將我的最低貢獻設置為“0”並添加創建者地址“0x0ABC”

  2. 我貢獻了 1 個具有相同地址“0x0ABC”的以太幣

  3. 我從混音副本中選擇一個隨機不同的地址並粘貼到我的“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM