on master help sign in
show actual cost of transaction once confirmed
commitbdcbeba2cdee85d2de6913f700cb75d646cb9e5b authorLiam Fitzgerald <liam@urizen.co> dateFri 6 Mar 2020, 14:04 (7 years ago) parenta941805
3 files changed+28−6
src/components/InlineEthereumTransaction.js+5−4 src/lib/txn.js+1 src/lib/useEthereumTransaction.js+22−2
src/components/InlineEthereumTransaction.js+5−4
@@ -50,6 +50,7 @@ export default function InlineEthereumTransaction({
5050 confirmationProgress,
5151 gasLimit,
5252 unsignedTransactions,
53+ finalCost,
5354
5455 // additional from parent
5556 label = 'Generate & Sign Transaction',
@@ -113,7 +114,7 @@ export default function InlineEthereumTransaction({
113114 {showReceipt && (
114115 <TransactionReceipt
115116 txHashes={txHashes}
116− maxCost={maxCost}
117+ finalCost={finalCost}
117118 onClose={toggleShowReceipt}
118119 />
119120 )}
@@ -184,7 +185,7 @@ export default function InlineEthereumTransaction({
184185 .mul(toBN(numTxs)),
185186 'gwei'
186187 ),
187− 'eth'
188+ 'ether'
188189 ),
189190 [gasLimit, gasPrice, numTxs]
190191 );
@@ -328,7 +329,7 @@ function SignedTransactionList({ serializedTxsHex, nonce, maxCost }) {
328329 ));
329330}
330331
331−function TransactionReceipt({ txHashes, maxCost, onClose }) {
332+function TransactionReceipt({ txHashes, finalCost, onClose }) {
332333 const txUrls = useExploreTxUrls(txHashes);
333334 return (
334335 <>
@@ -340,7 +341,7 @@ function TransactionReceipt({ txHashes, maxCost, onClose }) {
340341 </Grid.Item>
341342 <Grid.Item full as={Flex} justify="between" className="pv2 black f5">
342343 <Flex.Item>Transaction Cost</Flex.Item>
343− <Flex.Item className="mono">{maxCost} ETH</Flex.Item>
344+ <Flex.Item className="mono">{finalCost} ETH</Flex.Item>
344345 </Grid.Item>
345346 <Grid.Divider />
346347 <Grid.Item full as={Flex} col className="pv4">
src/lib/txn.js+1
@@ -160,6 +160,7 @@ const waitForTransactionConfirm = (web3, txHash) => {
160160 if (!success) {
161161 return bail(new Error('Transaction failed.'));
162162 }
163+ return receipt;
163164 }, RETRY_OPTIONS);
164165};
165166
src/lib/useEthereumTransaction.js+22−2
@@ -22,7 +22,7 @@ import { ensureFundsFor } from 'lib/tank';
2222import useDeepEqualReference from 'lib/useDeepEqualReference';
2323import useGasPrice from 'lib/useGasPrice';
2424import timeout from 'lib/timeout';
25−import { safeToWei } from 'lib/lib';
25+import { safeToWei, safeFromWei } from 'lib/lib';
2626
2727const STATE = {
2828 NONE: 'NONE',
@@ -73,6 +73,8 @@ export default function useEthereumTransaction(
7373 const [needFunds, setNeedFunds] = useState();
7474 const [confirmationProgress, setConfirmationProgress] = useState(0.0);
7575
76+ const [finalCost, setFinalCost] = useState();
77+
7678 const initializing = nonce === undefined || chainId === undefined;
7779 const constructed = !!unsignedTransactions;
7880 const isDefaultState = state === STATE.NONE;
@@ -186,10 +188,26 @@ export default function useEthereumTransaction(
186188
187189 setConfirmationProgress(0.2);
188190
189− await Promise.all(
191+ const receipts = await Promise.all(
190192 txHashes.map(txHash => waitForTransactionConfirm(_web3, txHash))
191193 );
192194
195+ setFinalCost(
196+ safeFromWei(
197+ safeToWei(
198+ receipts.reduce(
199+ (acc, receipt) =>
200+ toBN(receipt.gasUsed)
201+ .mul(toBN(gasPrice))
202+ .add(acc),
203+ toBN(0)
204+ ),
205+ 'gwei'
206+ ),
207+ 'ether'
208+ )
209+ );
210+
193211 setConfirmationProgress(0.9);
194212
195213 setState(STATE.CONFIRMED);
@@ -217,6 +235,7 @@ export default function useEthereumTransaction(
217235 setError(undefined);
218236 setNeedFunds(undefined);
219237 setConfirmationProgress(0.0);
238+ setFinalCost(undefined);
220239 }, [resetGasPrice, setError]);
221240
222241 useEffect(() => {
@@ -314,6 +333,7 @@ export default function useEthereumTransaction(
314333 needFunds,
315334 gasLimit,
316335 unsignedTransactions,
336+ finalCost,
317337 });
318338
319339 return { ...values, bind: values };