Ich habe ein Ethereum-Konto, das mit Ether geladen ist, und ich muss sie alle ausgeben , sodass der Kontosaldo genau bei null Weis bleibt . Ist das möglich?
Ich weiß, dass die Methode verwendet und damit eth_estimateGas()
multipliziert wird , aber gibt es wirklich eine Garantie dafür, dass dies die tatsächliche Gebühr meiner nächsten Transaktion ist? Die Gasschätzung könnte sich gemäß https://github.com/ethereum/go-ethereum/issues/2395 ändern und der Gaspreis ist weder festgelegt noch vorhersehbar https://etherscan.io/charts/gaspricegasPrice
txCost
Gibt es eine Möglichkeit, eine Transaktion durchzuführen , bei der der endgültige Saldo des Absenders vor dem Senden genau bekannt ist?
Ja , wenn Sie auf ein Externally Owned Account (EOA) überweisen.
Nein , wenn Sie auf ein Vertragskonto überweisen.
gasPrice
Sie können das ( ) angeben, das x gas
Sie für Ihre Transaktion zu zahlen bereit sind, und der Miner entscheidet, ob Ihre Transaktion abgebaut wird.
Bei einem EOA beträgt das Gas immer 21000, sodass Sie die Gebühr genau angeben können.
Bei einem Vertragskonto estimateGas(...)
wird nicht immer genau das Gas zurückgegeben, das für die Ausführung Ihrer Transaktion erforderlich ist (siehe Welche Einschränkungen gibt es bei der Schätzung von Gas und wann wäre die Schätzung erheblich falsch? ), sodass Sie die Gebühr nicht genau angeben können.
Von Gas und Transaktionskosten :
Das Gaslimit soll Sie vor fehlerhaftem Code schützen, bis Ihr Guthaben aufgebraucht ist. Das Produkt aus gasPrice und gas stellt den maximalen Wei-Betrag dar, den Sie für die Ausführung der Transaktion zu zahlen bereit sind. Was Sie als gasPrice angeben, wird von Minern verwendet, um Transaktionen für die Aufnahme in die Blockchain einzustufen. Es ist der Preis in Wei für eine Einheit Gas, in dem VM-Operationen bepreist werden.
Hier ist ein Beispiel:
> eth.gasPrice
20000000000
// Specify a lower gasPrice
> eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[2], gasPrice: 15000000000, value: web3.toWei(1, "ether")});
"0x9e53cb0268ae6b75303c46a20d869e2a6f95a93269a5c07bf5bf1f37ff6fea80"
Die Transaktion wird abgebaut. Der Transaktionsbeleg zeigt das verbrauchte Gas 21000:
> eth.getTransactionReceipt("0x9e53cb0268ae6b75303c46a20d869e2a6f95a93269a5c07bf5bf1f37ff6fea80");
{
blockHash: "0xd0bd16c0a3064a5ee1d45762030080b1791d14ec80504f01c839577881696e60",
blockNumber: 5706,
contractAddress: "0x39236bc7d128340b345138d997854981eb4948e7",
cumulativeGasUsed: 21000,
from: "0x4d5bbe7fbc80933ffa90ece988a764e41ee6d018",
gasUsed: 21000,
logs: [],
root: "86edc80b49786b7dc101c54f85659715661121a22e36dcfd90bf2c0961142493",
to: null,
transactionHash: "0x9e53cb0268ae6b75303c46a20d869e2a6f95a93269a5c07bf5bf1f37ff6fea80",
transactionIndex: 0
}
Und der Gaspreis beträgt 15000000000, wie in der Transaktion angegeben:
> eth.getTransaction("0x9e53cb0268ae6b75303c46a20d869e2a6f95a93269a5c07bf5bf1f37ff6fea80");
{
blockHash: "0xd0bd16c0a3064a5ee1d45762030080b1791d14ec80504f01c839577881696e60",
blockNumber: 5706,
from: "0x4d5bbe7fbc80933ffa90ece988a764e41ee6d018",
gas: 90000,
gasPrice: 15000000000,
hash: "0x9e53cb0268ae6b75303c46a20d869e2a6f95a93269a5c07bf5bf1f37ff6fea80",
input: "0x",
nonce: 6,
to: null,
transactionIndex: 0,
value: 1000000000000000000
}
Überprüfen Sie das Konto des Bergmanns im Block vor der geschürften Transaktion und im Block, als die Transaktion geschürft wurde:
> web3.fromWei(eth.getBalance(eth.accounts[0], 5705),"ether")
28522.81130279
> web3.fromWei(eth.getBalance(eth.accounts[0], 5706),"ether")
28527.81161779
Und hier ist die Differenz, die die 5 ETH-Mining-Belohnung + die gesammelten Transaktionsgebühren zeigt:
> web3.fromWei(eth.getBalance(eth.accounts[0], 5706).minus(eth.getBalance(eth.accounts[0], 5705)),"wei")
5000315000000000000
Und die Bestätigung, dass die verdienten Transaktionsgebühren sind gas x specified gasPrice
:
> new BigNumber(21000).times(15000000000)
315000000000000
gasPrice
höheren Wert als den Strom angeben gasPrice
?Also hier ist die gleiche Information mit der Angabe gasPrice
höher als die aktuelle gasPrice
:
> eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[2], gasPrice: 25000000000, value: web3.toWei(1, "ether")});
"0xcbd2a112c77baeca47550f49181fd2fcb05b3551b71f6180a30a55672c6aab3d"
Der Transaktionsbeleg:
> eth.getTransactionReceipt("0xcbd2a112c77baeca47550f49181fd2fcb05b3551b71f6180a30a55672c6aab3d")
{
blockHash: "0x58ba7819f778f482930e67a2914c0174aaf92bfb680b407fa9bcd55cfe5e4e80",
blockNumber: 5808,
contractAddress: "0xc5c9b0194bb6184db6a278f96525718a45d310a5",
cumulativeGasUsed: 21000,
from: "0x4d5bbe7fbc80933ffa90ece988a764e41ee6d018",
gasUsed: 21000,
logs: [],
root: "68774aad53457e6cd4cd3b9344235e43a021366ff9763156224dbf07101b55af",
to: null,
transactionHash: "0xcbd2a112c77baeca47550f49181fd2fcb05b3551b71f6180a30a55672c6aab3d",
transactionIndex: 0
}
Die Transaktionsdetails:
> eth.getTransaction("0xcbd2a112c77baeca47550f49181fd2fcb05b3551b71f6180a30a55672c6aab3d")
{
blockHash: "0x58ba7819f778f482930e67a2914c0174aaf92bfb680b407fa9bcd55cfe5e4e80",
blockNumber: 5808,
from: "0x4d5bbe7fbc80933ffa90ece988a764e41ee6d018",
gas: 90000,
gasPrice: 25000000000,
hash: "0xcbd2a112c77baeca47550f49181fd2fcb05b3551b71f6180a30a55672c6aab3d",
input: "0x",
nonce: 7,
to: null,
transactionIndex: 0,
value: 1000000000000000000
}
Die Veränderung des Kontostands zeigt, dass der Miner Ihre angegebenen verwenden gasPrice
und die höheren Transaktionsgebühren einstreichen wird:
> web3.fromWei(eth.getBalance(eth.accounts[0], 5808).minus(eth.getBalance(eth.accounts[0], 5807)),"wei")
5000525000000000000
Bestätigen, dass die Transaktion Ihre angegebenen verwendet hat gasPrice
:
> new BigNumber(21000).times(25000000000)
525000000000000
Nick Johnson
Juan Ignacio Pérez Sakristán
Nick Johnson