Obtención de error no detectado: nuevo BigNumber () no es un número: [objeto Objeto]

Soy bastante nuevo en esto. Por favor, ayúdame. Estoy tratando de construir un dapp usando un meteorito. Tengo algunos problemas para llamar a una función del contrato usando web3. Aquí está el fragmento de código que intenta llamar a la función del contrato:

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

El prototipo de la función es el siguiente:

function startABet(string _Input} payable

Estoy recibiendo este error:

Error no detectado: nuevo BigNumber() no es un número: [objeto Objeto]

El código estaba funcionando hace un tiempo. Quería hacer una pequeña modificación enviando una variable en lugar de un valor codificado, pero no pude hacerlo. Más tarde intenté volver atrás, ahora esto tampoco funciona. ¿Puede alguien decirme qué es lo que estoy haciendo mal aquí? He pasado días en esto, pero no he sido capaz de resolverlo. Lo estoy ejecutando en el navegador Chrome con extensión metamask en una máquina ubuntu.

Supongo que fromaddresses algo extraño que web3 no sabe cómo manejar. El error está en algún lugar de su javascript, no en su solidez. Intente desconectarse de algunas variables más.
¿Cómo obtiene valor la variable fromaddress? Creo que el javascript todavía está cargado, por lo que en algún momento debe aplicar la actualización para usar la versión actualizada.
bueno, había declarado la dirección de origen en la parte inicial del código. Entonces, es solo una variable que almacena la dirección.

Respuestas (5)

Los obtenemos ocasionalmente cuando hacemos un cambio en MyEtherWallet, y no usamos Solidity o web3. Es una cosa de JS en la biblioteca BigNumber.js que también usa web3.

En algún lugar tienes algo que crees que es un número, pero en realidad es una cadena, un valor nulo, una matriz, un objeto o algo más. Este era un código para enviar un TX firmado a través de la pestaña sin conexión. El error en nuestro caso fue BigNumber Error: new BigNumber() not a number: 0x. Y la solución:

  • [antes de]$scope.tx.value = etherUnits.toEther('0x'+eTx.value.toString('hex'),'wei');
  • [después]$scope.tx.value = eTx.value.toString('hex')!='' ? etherUnits.toEther('0x'+eTx.value.toString('hex'),'wei') : 0;

Así que antes estábamos como "toma ese valor y haz cosas con él". La solución fue "si este valor no está vacío, haga cosas con él, de lo contrario, devuelva 0.

Asi que. Cosas para probar...

  • console.registre sus variables antes Y después, con error o sin error, y también registre sus tipos:console.log(typeof myContract)

  • Asegúrese de capturar cualquier valor vacío o nulo y de volver a sintonizar un número (p. ej 0.), o no continuar

  • Asegúrese de que está pasando lo que cree que está pasando. Por ejemplo, ¿realmente estás pasando el address, o fromaddress, o contract.address, o algo más?

  • En tu caso, está diciendo [Objeto objeto], lo que me hace pensar que algo es un objeto. En ese caso, hazlo console.log( JSON.stringify(myContract) )también para que puedas ver de qué se trata.

  • Cualquier cosa que registre que devuelva algo funky como Object { s: 1, e: 0, c: Array1 }, debe

    • toStringpara obtener su valor como una cadena decimal
    • toNumberpara aproximarlo como un número JS.
    • (Ese objeto es el objeto de BigNumber.js)

Si haces todas esas cosas, descubrirás el lugar donde pensabas que algo era algo, pero en realidad era otra cosa. Entonces es una solución fácil.

Gracias por ayudarme a resolver este problema, eres una hermosa persona :D

También enfrenté un problema similar, la posible razón podría ser que está ingresando algún parámetro de manera incorrecta. Compruebe si está proporcionando los valores correctos de:

  • Contrato ABI
  • Dirección del contrato
  • de la Dirección)
  • dirigirse)
  • Monto

Ocúpate de cualquier error tipográfico. Como en mi caso, escribí formen lugar de from .

Hice algunos cambios en mis contratos. Eliminé mis archivos compilados y los volví a compilar. Eso pareció funcionar.

Bueno, probé todas las posibilidades mencionadas anteriormente, ninguna funcionó. Estaba a punto de rendirme y solo estaba jugando con el código y cambié el nombre de la función en mi contrato, no hice ningún otro cambio. De la nada, ¡realmente funcionó! Todavía no puedo entender cuál era el problema y cuál era la relación entre bignumber y el nombre de la función, ¡pero en realidad funcionó!

¿Quizás no inicializó myContractcorrectamente o tuvo una discrepancia entre ABI y el código de bytes? Luego, después de cambiar el nombre y posiblemente volver a implementarlo, ¿funcionó?
Bueno, intenté volver a implementar el mismo contrato y usar ese ABI y reiniciarlo. Pero ya, lo que dijiste podría ser una posibilidad y podría haber supervisado los detalles. Gracias..

para mí, estaba recibiendo el error porque estaba usando

web3.eth.getBalance.request(address)

en vez de

web3.eth.getBalance(address)