Wie wird das Gas angegeben, wenn ein neuer Vertrag in Mist bereitgestellt wird?

Wenn ich Transaktionen an meinen Vertrag sende, teilt mir die Brieftasche mit, dass das Gas ausgeht. Wie kann ich also die Gasmenge angeben, wenn ich einen neuen Vertrag bereitstelle?

Antworten (1)

UPDATE 2. April 2017

Wie von @jeff im Kommentar unten hervorgehoben:

Eine Korrektur; Im zweiten Bild, wo Mist 113.250 Gas vorschlägt, kann dieser blaue Text tatsächlich bearbeitet werden (obwohl er überhaupt nicht klar ist). So können Sie das Gaslimit angeben :)

Danke @jeff!



Angenommen Ethereum Wallet

Ich gehe davon aus, dass sich das "Wallet" in Ihrer Frage auf Ethereum Wallet (Mist) bezieht, da in Ihrer ursprünglichen Frage "Mist" nicht angegeben wurde.

F : Wie wird das Gas angegeben, wenn ein neuer Vertrag in Mist bereitgestellt wird?

A : Wenn Sie einen Vertrag in Mist bereitstellen (Verträge -> Neuen Vertrag bereitstellen), können Sie die Gebühr auf dem Bildschirm ändern. Dies stellt das Gas x den geschätzten Gaspreis dar, wie im folgenden Bildschirm gezeigt:

Geben Sie hier die Bildbeschreibung ein

F : Wenn ich Transaktionen an meinen Vertrag sende, teilt mir die Brieftasche mit, dass das Gas aufgebraucht ist. Wie kann ich also die Gasmenge angeben, wenn ich einen neuen Vertrag bereitstelle?

A : Sie können das maximale Gas nicht in der Standard-Nebelschnittstelle angeben. Mist scheint zu versuchen, das benötigte Gas zu schätzen, und fügt seiner Schätzung 100.000 Gaseinheiten hinzu. Auf dem Bildschirm unten beträgt die Schätzung 13.250 Gas. Nebel gibt das Maximum von 113.250 Gas an:

Geben Sie hier die Bildbeschreibung ein



Wenn Sie verwendengeth

Wenn Sie verwenden geth, von 2 zugeordneten Strukturen mit einem Adressarray - Push funktioniert nicht :

So geben Sie Gas bei der Vertragserstellung an:

> var twoStructsContract = web3.eth.contract(twoStructsCompiled.TwoStructs.info.abiDefinition);
> var twoStructs = twoStructsContract.new({from:web3.eth.accounts[0], data: twoStructsCompiled.TwoStructs.code, gas: 1000000}, 
  function(e, contract) {
    if (!e) {
      if (!contract.address) {
        console.log("Contract transaction send: TransactionHash: " + 
          contract.transactionHash + " waiting to be mined...");
      } else {
        console.log("Contract mined! Address: " + contract.address);
        console.log(contract);
      }
    }
  }
)

So geben Sie Gas an, wenn Sie eine Transaktion an Ihren Vertrag senden:

> twoStructs.add(eth.accounts[0], 123, {
  from:web3.eth.accounts[0], 
  data: twoStructsCompiled.TwoStructs.code,
  gas: 1000000
});



Wenn Sie Ihren Vertrag in Mist erstellt haben und eine Transaktion per senden möchtengeth

In diesem Abschnitt habe ich den folgenden Code in Mist on Testnet bereitgestellt. Sie können dieses Beispiel auf Testnet unter Verwendung der folgenden Adresse und Informationen replizieren:

contract TestMistGas {
    uint256 number;

    function getNumber() constant returns (uint) {
        return number;
    }

    function setNumber(uint256 _number) {
        number = _number;
    }
}

Um dann die Vertragsdetails abzurufen und zu verwenden in geth:

  1. Rufen Sie die Adresse ab, an die Mist Ihren Vertrag geliefert hat. Klicken Sie dazu in Mist auf Ihren Vertrag und kopieren Sie die Adresse. Weisen Sie in gethdie Adresse einer Variablen zu:

    > var myContractAddress = "0xf5D623C03d245D36286D97689f8dE8B629c8f46a";
    undefined
    
  2. Holen Sie sich die JSON Application Binary Interface (ABI). Klicken Sie dazu in Mist auf Ihren Vertrag, klicken Sie auf Schnittstelle anzeigen. Weisen Sie in gethdiesen String einer Variablen zu:

    > var myContractABI = [ { "constant": false, "inputs": [ { "name": "_number", "type": "uint256" } ], "name": "setNumber", "outputs": [], "type": "function" }, { "constant": true, "inputs": [], "name": "getNumber", "outputs": [ { "name": "", "type": "uint256", "value": "12345" } ], "type": "function" } ];
    undefined
    
  3. Erstellen Sie eine Variable, die auf Ihre Vertragsadresse zeigt, wobei die ABI-Funktionen verfügbar gemacht werden, indem Sie den folgenden Befehl eingeben geth:

    > var myContract = eth.contract(myContractABI).at(myContractAddress);
    undefined
    
  4. Sie können überprüfen, ob Sie Ihre Variablen richtig zugewiesen haben, indem Sie den folgenden Befehl in eingeben geth:

    > myContract
    {
      address: "0xf5D623C03d245D36286D97689f8dE8B629c8f46a",
      allEvents: function(),
      getNumber: function(),
      setNumber: function()
    }
    
  5. Sie können eine Transaktion senden, um die setNumber()Funktion mit dem folgenden Befehl in aufzurufen geth:

    > myContract.setNumber(123, {from: eth.accounts[0], gas: 100000});
    

    "0xc8eeba52b5970c93e8d8be91632548b1d6400b74bd6dbbc7017e08bcc0b15648"

  6. Sie können den Status Ihrer Transaktion mit dem folgenden Befehl in überprüfen geth:

    > eth.getTransaction("0xc8eeba52b5970c93e8d8be91632548b1d6400b74bd6dbbc7017e08bcc0b15648")
    {
      blockHash: "0x964860acb5cd6af52ff01004ba471e2c5304ea47a788bc34462c973e9f969c80",
      blockNumber: 1000864,
      from: "0x3b449dfd7c15c60a45ce1d401b5a1a6081d2a400",
      gas: 90000,
      gasPrice: 20000000000,
      hash: "0xc8eeba52b5970c93e8d8be91632548b1d6400b74bd6dbbc7017e08bcc0b15648",
      input: "0x3fb5c1cb000000000000000000000000000000000000000000000000000000000000007b",
      nonce: 1048582,
      to: "0xf5d623c03d245d36286d97689f8de8b629c8f46a",
      transactionIndex: 1,
      value: 0
    }
    
  7. getNumber()Sie können die Funktion gethmit dem folgenden Befehl aufrufen :

    > myContract.getNumber()
    123
    
Wenn ich den Befehl "sendtransaction" verwende, warum er mir diese "ungültige Adresse" mitteilt, stelle ich diesen Vertrag mit Nebel bereit
Ich habe gerade ein Beispiel hinzugefügt, in dem ich den Vertrag in Mist bereitgestellt und die Vertragsfunktionen in aufgerufen habe geth.
Ich baue eine private Kette auf und stelle den Vertrag mit der Geth-CLI bereit. Warum gibt es keine Antwort? sogar keine Transaktion von der Kette gemäß dem Protokoll erhalten
Eine Korrektur; Im zweiten Bild, wo Mist 113.250 Gas vorschlägt, kann dieser blaue Text tatsächlich bearbeitet werden (obwohl er überhaupt nicht klar ist). So können Sie das Gaslimit angeben :)