aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-08-30 05:48:54 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-09-02 02:09:07 +0800
commit8743b2ceadd4a50e7137aca99b4fceeef780b55c (patch)
treef5cfe64297a3f9c06eeb725fea8eea12cf1e84a2
parentbf294253bb455a051c6e84bd95856dffab461b23 (diff)
downloaddexon-solidity-8743b2ceadd4a50e7137aca99b4fceeef780b55c.tar.gz
dexon-solidity-8743b2ceadd4a50e7137aca99b4fceeef780b55c.tar.zst
dexon-solidity-8743b2ceadd4a50e7137aca99b4fceeef780b55c.zip
Document call/gas modifiers properly
-rw-r--r--docs/frequently-asked-questions.rst17
-rw-r--r--docs/types.rst12
2 files changed, 12 insertions, 17 deletions
diff --git a/docs/frequently-asked-questions.rst b/docs/frequently-asked-questions.rst
index 5f1a981e..ed09044e 100644
--- a/docs/frequently-asked-questions.rst
+++ b/docs/frequently-asked-questions.rst
@@ -503,23 +503,6 @@ Note2: Optimizing storage access can pull the gas costs down considerably, becau
currently do not work across loops and also have a problem with bounds checking.
You might get much better results in the future, though.
-What does ``p.recipient.call.value(p.amount)(p.data)`` do?
-==========================================================
-
-Every external function call in Solidity can be modified in two ways:
-
-1. You can add Ether together with the call
-2. You can limit the amount of gas available to the call
-
-This is done by "calling a function on the function":
-
-``f.gas(2).value(20)()`` calls the modified function ``f`` and thereby sending 20
-Wei and limiting the gas to 2 (so this function call will most likely go out of
-gas and return your 20 Wei).
-
-In the above example, the low-level function ``call`` is used to invoke another
-contract with ``p.data`` as payload and ``p.amount`` Wei is sent with that call.
-
What happens to a ``struct``'s mapping when copying over a ``struct``?
======================================================================
diff --git a/docs/types.rst b/docs/types.rst
index aa4589de..098d0380 100644
--- a/docs/types.rst
+++ b/docs/types.rst
@@ -127,6 +127,18 @@ the function ``call`` is provided which takes an arbitrary number of arguments o
``call`` returns a boolean indicating whether the invoked function terminated (``true``) or caused an EVM exception (``false``). It is not possible to access the actual data returned (for this we would need to know the encoding and size in advance).
+It is possible to adjust the supplied gas with the ``.gas()`` modifier::
+
+ namReg.call.gas(1000000)("register", "MyName");
+
+Similarly, the supplied Ether value can be controlled too::
+
+ nameReg.call.value(1 ether)("register", "MyName");
+
+Lastly, these modifiers can be combined. Their order does not matter::
+
+ nameReg.call.gas(1000000).value(1 ether)("register", "MyName");
+
In a similar way, the function ``delegatecall`` can be used: the difference is that only the code of the given address is used, all other aspects (storage, balance, ...) are taken from the current contract. The purpose of ``delegatecall`` is to use library code which is stored in another contract. The user has to ensure that the layout of storage in both contracts is suitable for delegatecall to be used. Prior to homestead, only a limited variant called ``callcode`` was available that did not provide access to the original ``msg.sender`` and ``msg.value`` values.
All three functions ``call``, ``delegatecall`` and ``callcode`` are very low-level functions and should only be used as a *last resort* as they break the type-safety of Solidity.