Solidity

使用松露部署合約時數值無效?但是如何在程式碼中修復它是 value 或 _amount 變數?我無法弄清楚

  • January 13, 2020

2_deploy_contracts.js

替換“OraclizeTest”


錯誤: *** 部署失敗 ***

“OraclizeTest” – 無效數值(arg="_amount", coderType=“uint256”, value={“from”:“0xb5Fb3E9BB73e742689F1001C519d6763a39A4Bc5”,“gas”:6721975,“value”:1000000000000000000})。

在 /root/.nvm/versions/node/v9.11.2/lib/node_modules/truffle/build/webpack:/packages/deployer/src/deployment.js:364:1 在 process._tickCallback (internal/process/next_tick .js:182:7) Truffle v5.1.8(核心:5.1.8)節點 v9.11.2

var OraclizeTest = artifacts.require("./OraclizeTest.sol");

   module.exports = function(deployer, network, accounts) {
     // Deploys the OraclizeTest contract and funds it with 0.5 ETH
     // The contract needs a balance > 0 to communicate with Oraclize
     deployer.deploy(
       OraclizeTest,
       { from: accounts[9], gas:6721975, value: 1000000000000000000 });
   };
contract OraclizeTest is usingOraclize {

   using strings for *;        //strings import requirement
  // string public matchId; 
   uint256 public amount; 

//remove url traces
   address public homeBet;  
   address public awayBet;


   //string public ETHUSD;

   event LogInfo(string description);      //getting from update function
//event LogPriceUpdate(string price);     //waiting for price in callback 
   //then calling update function 
   //event LogUpdate(address indexed _owner, uint indexed _balance);     //getting from constructor 

   // Constructor
   function OraclizeTest (uint _amount) public {      //adding args and not matchid
       amount = _amount;        

   //    emit LogUpdate(owner, address(this).balance); //owner was in original

       // Replace the next line with your version:
       OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);

       oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);
       update();
   }

不不不。

上面接受的答案是不正確的,您接受它的事實意味著甚至沒有多少使用者會閱讀您的問題(更不用說嘗試回答它了)。

的整數值1000000000000000000確實大於Number.MAX_SAFE_INTEGER,因此您應該使用"1000000000000000000"or "1e18"。但這不是錯誤消息告訴您的內容,因此建議的解決方案不會修復該錯誤。

看看錯誤:

無效數值(arg="_amount", coderType=“uint256”, value={“from”:“0xb5Fb3E9BB73e742689F1001C519d6763a39A4Bc5”,“gas”:6721975,“value”:1000000000000000000})。

它非常明確地告訴您該函式需要一個數字值(您可以將其作為本機整數Number,表示整數的字元串,BigNumber如果您在 web3.js v0.x 上則為對象,或者BN如果您是對象) re on web3.js v1.x onward),但收到了這個:

{
   "from":"0xb5Fb3E9BB73e742689F1001C519d6763a39A4Bc5",
   "gas":6721975,
   "value":1000000000000000000
}

查看您嘗試呼叫的函式:

function OraclizeTest(uint _amount)

而且它確實需要一個 type 的輸入參數uint,您沒有將其傳遞給它。

您傳遞的對像是 web3.js 允許您傳遞以提供交易詳細資訊的附加參數。這個對象必須是傳遞給任何函式的最後一個參數,當然,它並沒有在合約函式本身中明確說明(而是隱含的 via msg)。

簡而言之,您對函式的呼叫OraclizeTest缺少輸入參數_amount

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