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?
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!
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:
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:
geth
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
});
geth
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
:
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 geth
die Adresse einer Variablen zu:
> var myContractAddress = "0xf5D623C03d245D36286D97689f8dE8B629c8f46a";
undefined
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 geth
diesen 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
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
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()
}
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"
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
}
getNumber()
Sie können die Funktion geth
mit dem folgenden Befehl aufrufen :
> myContract.getNumber()
123
Wang
Datenschutz ist ein Menschenrecht.eth
geth
.Wang
Jeff