Go-Ethereum

出現未擷取的錯誤:new BigNumber() 不是數字:objectObject這bj和C噸這bj和C噸object Object

  • December 15, 2017

我對此很陌生。請幫幫我。我正在嘗試使用流星建構一個 dapp。我在使用 web3 呼叫合約函式時遇到了一點麻煩。這是試圖呼叫合約函式的程式碼片段:

myContract.startAFunc.sendTransaction(
 "Name",{from: fromaddress, value: 500000000000000000},
 function(err,address) {
   if(!err)
     console.log(address);});

//myContract is the ABI array at the contract address, startAFunc is the function name

函式原型如下:

function startABet(string _Input} payable

我收到此錯誤:

未擷取的錯誤:new BigNumber() 不是數字:

$$ object Object $$

程式碼在不久前工作。我想通過發送變數而不是硬編碼值來進行一些修改,但無法這樣做。後來我試圖恢復,現在這也不起作用。誰能告訴我我在這裡做錯了什麼。我已經花了幾天的時間,但一直無法弄清楚。我在 Ubuntu 機器上使用元遮罩擴展在 chrome 瀏覽器上執行它。

當我們對 MyEtherWallet 進行更改時,我們偶爾會得到這些,並且我們不使用 Solidity 或 web3。這是 web3 也使用的 BigNumber.js 庫中的 JS 東西。

在某個地方,您有一些您認為是數字的東西,但它實際上是一個字元串、null、數組、對像或其他東西。這是一些通過離線選項卡發送簽名 TX 的程式碼。在我們的案例中,錯誤是BigNumber Error: new BigNumber() not a number: 0x. 和修復:

  • $$ before $$ $scope.tx.value = etherUnits.toEther('0x'+eTx.value.toString('hex'),'wei');
  • $$ after $$ $scope.tx.value = eTx.value.toString('hex')!='' ? etherUnits.toEther('0x'+eTx.value.toString('hex'),'wei') : 0;

所以在我們就像“接受那個價值並用它做事”之前。解決方法是“如果這個值不為空,則對其進行處理,否則返回0.

所以。可以嘗試的東西…

  • console.log 你的變數之前和之後,錯誤或沒有錯誤,並記錄它們的類型:console.log(typeof myContract)
  • 確保您正在擷取任何空值或 null 值並重新調整數字(例如0),或者不繼續
  • 確保你正在傳遞你認為你正在傳遞的東西。例如,您是否真的通過了address, or fromaddress, or contract.address, 或其他東西?
  • 在你的情況下,它是說

$$ Object object $$,這讓我認為某物是一個對象。在這種情況下,你也可以這樣做console.log( JSON.stringify(myContract) ),這樣你就可以真正看到它是什麼。

  • 您記錄的任何返回一些時髦的東西Object { s: 1, e: 0, c: Array1 },您都需要

    • toString將其值作為十進製字元串
    • toNumber將其近似為 JS 數字。
    • (該對像是 BigNumber.js 中的對象)

如果你做所有這些事情,你會發現你認為某事是某事的地方,但它實際上是某事。然後這是一個簡單的修復。

我也遇到了類似的問題,可能的原因是,您輸入的任何參數錯誤。請檢查您是否提供了正確的值:

  • ABI 契約
  • 合約地址
  • 從(地址)
  • 講話)
  • 數量

注意任何錯字。在我的情況下,我寫form而不是from

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