Solidity

錯誤編碼參數:部署到 Remix 後 BigNumber 字元串無效

  • September 6, 2021

我想創建一個系統,允許公司在契約中保存多個數據,同時許多公司可以在這個系統中保存數據。

所以我創建了struct的映射,並且有一個數組可以讓多個數據對應它們的索引儲存在一個struct中。

但是當我將它部署在 Remix 上,並想用函式saveStandard儲存時,出現以下錯誤:

transact to Storage.saveStandard errored: Error encoding arguments: Error: invalid BigNumber string (argument="value", value="0.2", code=INVALID_ARGUMENT, version=bignumber/5.4.1)

我的以下程式碼發生了什麼?

pragma solidity >=0.7.0 <0.9.0;

contract Storage{
   
   struct UserInfo {
       uint index;
       string[] time;
       string[] source;
       uint[] emission;
   }
   mapping (string => UserInfo) public users;

   function saveStandard(uint input_material, uint weight, string memory input_time, string memory input_source) 
   public returns (string memory, uint, uint, string memory){
   
       uint id = users[input_source].index + 1;
       users[input_source].index = id;
       
       users[input_source].time[id] = input_time;
       uint Combustion = weight * input_material;
       uint Process = weight * input_material;//input_material is the emission factor
       users[input_source].emission[id] = Combustion + Process;
       
       return (input_source, Combustion, Process, input_time);
   }
   
   
   function search(string memory input_source) public view returns (uint, string memory) {
       uint id = 0;
       while (id <= users[input_source].index) {
           id += 1;
           return (users[input_source].emission[id], users[input_source].time[id]);
       }
   }
}

我已經找出問題所在了。

當我輸入input_materialABI 時。我以十進制形式輸入它,但似乎不支持小數。

當我以整數形式輸入它時,它起作用了。

引用自:https://ethereum.stackexchange.com/questions/108045