出現未擷取的錯誤:new BigNumber() 不是數字:objectObject這bj和C噸這bj和C噸object Object
我對此很陌生。請幫幫我。我正在嘗試使用流星建構一個 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
, orfromaddress
, orcontract.address
, 或其他東西?- 在你的情況下,它是說
$$ Object object $$,這讓我認為某物是一個對象。在這種情況下,你也可以這樣做
console.log( JSON.stringify(myContract) )
,這樣你就可以真正看到它是什麼。
您記錄的任何返回一些時髦的東西
Object { s: 1, e: 0, c: Array1 }
,您都需要
toString
將其值作為十進製字元串toNumber
將其近似為 JS 數字。- (該對像是 BigNumber.js 中的對象)
如果你做所有這些事情,你會發現你認為某事是某事的地方,但它實際上是某事。然後這是一個簡單的修復。
我也遇到了類似的問題,可能的原因是,您輸入的任何參數錯誤。請檢查您是否提供了正確的值:
- ABI 契約
- 合約地址
- 從(地址)
- 講話)
- 數量
注意任何錯字。在我的情況下,我寫
form
而不是from。