Changed references to money

This commit is contained in:
Nuno Santos 2023-05-22 12:54:43 +01:00 committed by GitHub
parent a2a00850ca
commit 02a07fdf46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 19 additions and 19 deletions

View File

@ -18,7 +18,7 @@ introduces a potential security risk. You may read
more about this on the :ref:`security_considerations` page. more about this on the :ref:`security_considerations` page.
The following is an example of the withdrawal pattern in practice in The following is an example of the withdrawal pattern in practice in
a contract where the goal is to send the most money to the a contract where the goal is to send the most of some compensation, e.g. Ether, to the
contract in order to become the "richest", inspired by contract in order to become the "richest", inspired by
`King of the Ether <https://www.kingoftheether.com/>`_. `King of the Ether <https://www.kingoftheether.com/>`_.

View File

@ -685,7 +685,7 @@ and ``assert`` for internal error checking.
addr.transfer(msg.value / 2); addr.transfer(msg.value / 2);
// Since transfer throws an exception on failure and // Since transfer throws an exception on failure and
// cannot call back here, there should be no way for us to // cannot call back here, there should be no way for us to
// still have half of the money. // still have half of the Ether.
assert(address(this).balance == balanceBeforeTransfer - msg.value / 2); assert(address(this).balance == balanceBeforeTransfer - msg.value / 2);
return address(this).balance; return address(this).balance;
} }

View File

@ -16,11 +16,11 @@ Simple Open Auction
=================== ===================
The general idea of the following simple auction contract is that everyone can The general idea of the following simple auction contract is that everyone can
send their bids during a bidding period. The bids already include sending money send their bids during a bidding period. The bids already include sending some compensation,
/ Ether in order to bind the bidders to their bid. If the highest bid is e.g. Ether, in order to bind the bidders to their bid. If the highest bid is
raised, the previous highest bidder gets their money back. After the end of raised, the previous highest bidder gets their Ether back. After the end of
the bidding period, the contract has to be called manually for the beneficiary the bidding period, the contract has to be called manually for the beneficiary
to receive their money - contracts cannot activate themselves. to receive their Ether - contracts cannot activate themselves.
.. code-block:: solidity .. code-block:: solidity
@ -92,19 +92,19 @@ to receive their money - contracts cannot activate themselves.
revert AuctionAlreadyEnded(); revert AuctionAlreadyEnded();
// If the bid is not higher, send the // If the bid is not higher, send the
// money back (the revert statement // Ether back (the revert statement
// will revert all changes in this // will revert all changes in this
// function execution including // function execution including
// it having received the money). // it having received the Ether).
if (msg.value <= highestBid) if (msg.value <= highestBid)
revert BidNotHighEnough(highestBid); revert BidNotHighEnough(highestBid);
if (highestBid != 0) { if (highestBid != 0) {
// Sending back the money by simply using // Sending back the Ether by simply using
// highestBidder.send(highestBid) is a security risk // highestBidder.send(highestBid) is a security risk
// because it could execute an untrusted contract. // because it could execute an untrusted contract.
// It is always safer to let the recipients // It is always safer to let the recipients
// withdraw their money themselves. // withdraw their Ether themselves.
pendingReturns[highestBidder] += highestBid; pendingReturns[highestBidder] += highestBid;
} }
highestBidder = msg.sender; highestBidder = msg.sender;
@ -182,7 +182,7 @@ the contract checks that the hash value is the same as the one provided during
the bidding period. the bidding period.
Another challenge is how to make the auction **binding and blind** at the same Another challenge is how to make the auction **binding and blind** at the same
time: The only way to prevent the bidder from just not sending the money after time: The only way to prevent the bidder from just not sending the Ether after
they won the auction is to make them send it together with the bid. Since value they won the auction is to make them send it together with the bid. Since value
transfers cannot be blinded in Ethereum, anyone can see the value. transfers cannot be blinded in Ethereum, anyone can see the value.

View File

@ -6,18 +6,18 @@ Safe Remote Purchase
Purchasing goods remotely currently requires multiple parties that need to trust each other. Purchasing goods remotely currently requires multiple parties that need to trust each other.
The simplest configuration involves a seller and a buyer. The buyer would like to receive The simplest configuration involves a seller and a buyer. The buyer would like to receive
an item from the seller and the seller would like to get money (or an equivalent) an item from the seller and the seller would like to get some compensation, e.g. Ether,
in return. The problematic part is the shipment here: There is no way to determine for in return. The problematic part is the shipment here: There is no way to determine for
sure that the item arrived at the buyer. sure that the item arrived at the buyer.
There are multiple ways to solve this problem, but all fall short in one or the other way. There are multiple ways to solve this problem, but all fall short in one or the other way.
In the following example, both parties have to put twice the value of the item into the In the following example, both parties have to put twice the value of the item into the
contract as escrow. As soon as this happened, the money will stay locked inside contract as escrow. As soon as this happened, the Ether will stay locked inside
the contract until the buyer confirms that they received the item. After that, the contract until the buyer confirms that they received the item. After that,
the buyer is returned the value (half of their deposit) and the seller gets three the buyer is returned the value (half of their deposit) and the seller gets three
times the value (their deposit plus the value). The idea behind times the value (their deposit plus the value). The idea behind
this is that both parties have an incentive to resolve the situation or otherwise this is that both parties have an incentive to resolve the situation or otherwise
their money is locked forever. their Ether is locked forever.
This contract of course does not solve the problem, but gives an overview of how This contract of course does not solve the problem, but gives an overview of how
you can use state machine-like constructs inside a contract. you can use state machine-like constructs inside a contract.

View File

@ -282,7 +282,7 @@ the source account is also not modified.
Furthermore, a transaction is always cryptographically signed by the sender (creator). Furthermore, a transaction is always cryptographically signed by the sender (creator).
This makes it straightforward to guard access to specific modifications of the This makes it straightforward to guard access to specific modifications of the
database. In the example of the electronic currency, a simple check ensures that database. In the example of the electronic currency, a simple check ensures that
only the person holding the keys to the account can transfer money from it. only the person holding the keys to the account can transfer some compensation, e.g. Ether, from it.
.. index:: ! block .. index:: ! block

View File

@ -447,7 +447,7 @@ so help through off-chain computations might be needed there.
If the self-check fails, the contract automatically switches into some kind of "failsafe" mode, If the self-check fails, the contract automatically switches into some kind of "failsafe" mode,
which, for example, disables most of the features, which, for example, disables most of the features,
hands over control to a fixed and trusted third party hands over control to a fixed and trusted third party
or just converts the contract into a simple "give me back my money" contract. or just converts the contract into a simple "give me back my Ether" contract.
Ask for Peer Review Ask for Peer Review
=================== ===================

View File

@ -263,7 +263,7 @@ reverts on failure.
There are some dangers in using ``send``: The transfer fails if the call stack depth is at 1024 There are some dangers in using ``send``: The transfer fails if the call stack depth is at 1024
(this can always be forced by the caller) and it also fails if the recipient runs out of gas. So in order (this can always be forced by the caller) and it also fails if the recipient runs out of gas. So in order
to make safe Ether transfers, always check the return value of ``send``, use ``transfer`` or even better: to make safe Ether transfers, always check the return value of ``send``, use ``transfer`` or even better:
use a pattern where the recipient withdraws the money. use a pattern where the recipient withdraws the Ether.
* ``call``, ``delegatecall`` and ``staticcall`` * ``call``, ``delegatecall`` and ``staticcall``

View File

@ -107,7 +107,7 @@ Block and Transaction Properties
Both the timestamp and the block hash can be influenced by miners to some degree. Both the timestamp and the block hash can be influenced by miners to some degree.
Bad actors in the mining community can for example run a casino payout function on a chosen hash Bad actors in the mining community can for example run a casino payout function on a chosen hash
and just retry a different hash if they did not receive any money. and just retry a different hash if they did not receive any compensation, e.g. Ether.
The current block timestamp must be strictly larger than the timestamp of the last block, The current block timestamp must be strictly larger than the timestamp of the last block,
but the only guarantee is that it will be somewhere between the timestamps of two but the only guarantee is that it will be somewhere between the timestamps of two
@ -282,7 +282,7 @@ For more information, see the section on :ref:`address`.
There are some dangers in using ``send``: The transfer fails if the call stack depth is at 1024 There are some dangers in using ``send``: The transfer fails if the call stack depth is at 1024
(this can always be forced by the caller) and it also fails if the recipient runs out of gas. So in order (this can always be forced by the caller) and it also fails if the recipient runs out of gas. So in order
to make safe Ether transfers, always check the return value of ``send``, use ``transfer`` or even better: to make safe Ether transfers, always check the return value of ``send``, use ``transfer`` or even better:
Use a pattern where the recipient withdraws the money. Use a pattern where the recipient withdraws the Ether.
.. warning:: .. warning::
Due to the fact that the EVM considers a call to a non-existing contract to always succeed, Due to the fact that the EVM considers a call to a non-existing contract to always succeed,