Verarbeitung von Trüffel

Das Folgende ist mein Code in Solidität

pragma solidity ^0.4.2;

contract DappToken {
  //Constructor
  // set no of Tokens
  // Read the total number of Tokens
  uint256 public totalSupply;

  function DappToken () public {
    totalSupply = 10000000;
  }
}

Jetzt werde ich mit Truffle interagieren. 1) Ich habe die Truffle-Migration durchgeführt

2) In der Truffle-Konsole habe ich DappToken.deployed().then(function(i) {token = i ;}) verwendet

3) bereitgestellt () gibt ein Versprechen zurück und nimmt dann einen Rückruf an (korrigieren Sie mich, wenn ich falsch liege)

4) Als nächstes habe ich verwendet

 token.totalSupply 
{ [Function]
  call: [Function],
  sendTransaction: [Function],
  request: [Function: bound ],
  estimateGas: [Function] }

// Es zeigt die folgende Ausgabe

totalSupply ist der Name der Variablen, die ich angegeben habe, aber es zeigt Funktion in eckigen Klammern. Kann jemand erklären, wie Trüffel darin kompiliert wird und warum es mir als Funktion angezeigt wird, die ich mit token.DappToken.totalSupply versucht habe? Es zeigt mir einen Fehler, den ich dachte Es geht in den Vertrag und ruft die Variable auf

Antworten (2)

Solidity legt Variablen nicht direkt offen, erstellt jedoch eine öffentliche Getter-Funktion.

Ihr Beispiel wird sich so verhalten.

contract DappToken {
  uint256 public _totalSupply;

  function DappToken () public {
    _totalSupply = 10000000;
  }
  function totalSupply() public view returns (uint256) {
    return _totalSupply;
  }
}

Um die Gesamtversorgung zu erhalten, müssen Sie wie bei einer regulären Funktion einen Anruf tätigen.

token.totalSupply().then((result) => { console.log(result); } )

Hier ist Dokumentation . Ich denke, Sie müssen token.totalSupplyintern anrufen, then()ähnlich wie im folgenden Beispiel:

var account_one = "0x1234..."; // an address

var meta;
MetaCoin.deployed().then(function(instance) {
  meta = instance;
  return meta.getBalance.call(account_one, {from: account_one});
}).then(function(balance) {
  // If this callback is called, the call was successfully executed.
  // Note that this returns immediately without any waiting.
  // Let's print the return value.
  console.log(balance.toNumber());
}).catch(function(e) {
  // There was an error! Handle it.
})