So konvertieren Sie BigNumber, das von Truffle Console zurückgegeben wird [Duplikat]

Ich habe einen einfachen Vertrag Foo, der in einem Ganache-Netzwerk bereitgestellt wird.

pragma solidity ^0.4.18;

contract Foo {
    uint storageData;

    function set(uint x) public {
        storageData = x;
    }

    function get() constant public returns (uint) {
        return storageData;
    }
}

Wenn ich jetzt mit ihm interagieren möchte, truffle consolesetze ich zuerst den Wert

truffle(development)> Foo.at("0x4d4337B075a442cF3351Fa11c425C350cE2984F5").set(123)

Frage 1: Dann habe ich versucht, diesen Wert abzurufen, aber es wird eine BignNumber. Warum ist es keine ganze Zahl?

truffle(development)> Foo.at("0x4d4337B075a442cF3351Fa11c425C350cE2984F5").get.call()
BigNumber { s: 1, e: 0, c: [ 123 ] }

Frage 2: Wie können Sie es in eine Ganzzahl oder einen String umwandeln?

truffle(development)> Foo.at("0x4d4337B075a442cF3351Fa11c425C350cE2984F5").get.call().toNumber()
TypeError: Foo.at(...).get.call(...).toNumber is not a function

Versucht console.loges nach einem .toNumber, es druckt den richtigen Wert 123, aber warum druckt es undefinedauch ein?

truffle(development)> Foo.at("0x4d4337B075a442cF3351Fa11c425C350cE2984F5").get.call().then(a => console.log(a.toNumber()))
123
undefined
Funktion verwenden toNumber():count = await app.getCount; count.toNumber()

Antworten (1)

Einige Hinweise:

  • müssen dies asynchron tun. Trüffel macht die Funktion thetable.
  • brauchen "call" nicht explizit, weil get() als konstant markiert ist.
  • Sobald Sie die BigNumber haben, können Sie sie in etwas Nützliches umwandeln. Denken Sie daran, dass JavaScript keine 256-Bit-Integer verarbeiten kann. Wenn Sie also addieren/subtrahieren usw. müssen, verwenden Sie immer die BigNumber-Bibliothek und den ursprünglichen Wert. Speichern Sie diese Art der Konvertierung, um menschenlesbare Darstellungen zu erstellen.

Versuchen

var n;
var foo = Foo.at("0x4d4337B075a442cF3351Fa11c425C350cE2984F5");

foo.get().then(function(response) { 
  n = response.toString(10);
  console.log(n);
}

Ich habe es nur zur Veranschaulichung skizziert, also habe ich hoffentlich nicht die Syntax vermasselt.

Ich hoffe es hilft.