mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Corrected underline lengths
This commit is contained in:
parent
49f5bc7ce9
commit
2112f6239c
@ -72,7 +72,7 @@ Contracts on the blockchain should have their original source
|
|||||||
code published if they are to be used by third parties.
|
code published if they are to be used by third parties.
|
||||||
|
|
||||||
Does ``selfdestruct()`` free up space in the blockchain?
|
Does ``selfdestruct()`` free up space in the blockchain?
|
||||||
============================================================
|
========================================================
|
||||||
|
|
||||||
It removes the contract bytecode and storage from the current block
|
It removes the contract bytecode and storage from the current block
|
||||||
into the future, but since the blockchain stores every single block (i.e.
|
into the future, but since the blockchain stores every single block (i.e.
|
||||||
@ -109,7 +109,7 @@ The trick is to create the contract with ``{from:someaddress, value: web3.toWei(
|
|||||||
See `endowment_retriever.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/30_endowment_retriever.sol>`_.
|
See `endowment_retriever.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/30_endowment_retriever.sol>`_.
|
||||||
|
|
||||||
Use a non-constant function (req ``sendTransaction``) to increment a variable in a contract
|
Use a non-constant function (req ``sendTransaction``) to increment a variable in a contract
|
||||||
===============================================================================================
|
===========================================================================================
|
||||||
|
|
||||||
See `value_incrementer.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/20_value_incrementer.sol>`_.
|
See `value_incrementer.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/20_value_incrementer.sol>`_.
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ Its type is the type of the contract. Since any contract type basically inherits
|
|||||||
its own address.
|
its own address.
|
||||||
|
|
||||||
What is the difference between a function marked ``constant`` and one that is not?
|
What is the difference between a function marked ``constant`` and one that is not?
|
||||||
======================================================================================
|
==================================================================================
|
||||||
|
|
||||||
``constant`` functions can perform some action and return a value, but cannot
|
``constant`` functions can perform some action and return a value, but cannot
|
||||||
change state (this is not yet enforced by the compiler). In other words, a
|
change state (this is not yet enforced by the compiler). In other words, a
|
||||||
@ -140,21 +140,21 @@ That is, because they can change state, they have to have a gas
|
|||||||
payment sent along to get the work done.
|
payment sent along to get the work done.
|
||||||
|
|
||||||
Get a contract to return its funds to you (not using ``selfdestruct(...)``).
|
Get a contract to return its funds to you (not using ``selfdestruct(...)``).
|
||||||
================================================================================
|
============================================================================
|
||||||
|
|
||||||
This example demonstrates how to send funds from a contract to an address.
|
This example demonstrates how to send funds from a contract to an address.
|
||||||
|
|
||||||
See `endowment_retriever <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/30_endowment_retriever.sol>`_.
|
See `endowment_retriever <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/30_endowment_retriever.sol>`_.
|
||||||
|
|
||||||
What is a ``mapping`` and how do we use them?
|
What is a ``mapping`` and how do we use them?
|
||||||
=================================================
|
=============================================
|
||||||
|
|
||||||
A mapping is very similar to a K->V hashmap.
|
A mapping is very similar to a K->V hashmap.
|
||||||
If you have a state variable of type ``mapping (string -> uint) x;``, then you can
|
If you have a state variable of type ``mapping (string -> uint) x;``, then you can
|
||||||
access the value by ``x["somekeystring"]``.
|
access the value by ``x["somekeystring"]``.
|
||||||
|
|
||||||
How can I get the length of a ``mapping``?
|
How can I get the length of a ``mapping``?
|
||||||
==============================================
|
==========================================
|
||||||
|
|
||||||
Mappings are a rather low-level data structure. It does not store the keys
|
Mappings are a rather low-level data structure. It does not store the keys
|
||||||
and it is not possible to know which or how many values are "set". Actually,
|
and it is not possible to know which or how many values are "set". Actually,
|
||||||
@ -167,13 +167,13 @@ If you want to have a "sized mapping", you can use the iterable mapping
|
|||||||
(see below) or just a dynamically-sized array of structs.
|
(see below) or just a dynamically-sized array of structs.
|
||||||
|
|
||||||
Are ``mapping``'s iterable?
|
Are ``mapping``'s iterable?
|
||||||
===============================
|
===========================
|
||||||
|
|
||||||
Mappings themselves are not iterable, but you can use a higher-level
|
Mappings themselves are not iterable, but you can use a higher-level
|
||||||
datastructure on top of it, for example the `iterable mapping <https://github.com/ethereum/dapp-bin/blob/master/library/iterable_mapping.sol>`_.
|
datastructure on top of it, for example the `iterable mapping <https://github.com/ethereum/dapp-bin/blob/master/library/iterable_mapping.sol>`_.
|
||||||
|
|
||||||
Can I put arrays inside of a ``mapping``? How do I make a ``mapping`` of a ``mapping``?
|
Can I put arrays inside of a ``mapping``? How do I make a ``mapping`` of a ``mapping``?
|
||||||
===================================================================================================
|
=======================================================================================
|
||||||
|
|
||||||
Mappings are already syntactically similar to arrays as they are, therefore it doesn't make much sense to store an array in them. Rather what you should do is create a mapping of a mapping.
|
Mappings are already syntactically similar to arrays as they are, therefore it doesn't make much sense to store an array in them. Rather what you should do is create a mapping of a mapping.
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ An example of this would be::
|
|||||||
}
|
}
|
||||||
|
|
||||||
Can you return an array or a ``string`` from a solidity function call?
|
Can you return an array or a ``string`` from a solidity function call?
|
||||||
==========================================================================
|
======================================================================
|
||||||
|
|
||||||
Yes. See `array_receiver_and_returner.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/60_array_receiver_and_returner.sol>`_.
|
Yes. See `array_receiver_and_returner.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/60_array_receiver_and_returner.sol>`_.
|
||||||
|
|
||||||
@ -204,12 +204,12 @@ This is a limitation of the EVM and will be solved with the next protocol update
|
|||||||
Returning variably-sized data as part of an external transaction or call is fine.
|
Returning variably-sized data as part of an external transaction or call is fine.
|
||||||
|
|
||||||
How do you represent ``double``/``float`` in Solidity?
|
How do you represent ``double``/``float`` in Solidity?
|
||||||
==============================================================
|
======================================================
|
||||||
|
|
||||||
This is not yet possible.
|
This is not yet possible.
|
||||||
|
|
||||||
Is it possible to in-line initialize an array like so: ``string[] myarray = ["a", "b"];``
|
Is it possible to in-line initialize an array like so: ``string[] myarray = ["a", "b"];``
|
||||||
=============================================================================================
|
=========================================================================================
|
||||||
|
|
||||||
Yes. However it should be noted that this currently only works with statically sized memory arrays. You can even create an inline memory
|
Yes. However it should be noted that this currently only works with statically sized memory arrays. You can even create an inline memory
|
||||||
array in the return statement. Pretty cool, huh?
|
array in the return statement. Pretty cool, huh?
|
||||||
@ -224,7 +224,7 @@ Example::
|
|||||||
}
|
}
|
||||||
|
|
||||||
What are ``event``'s and why do we need them?
|
What are ``event``'s and why do we need them?
|
||||||
=================================================
|
=============================================
|
||||||
|
|
||||||
Let us suppose that you need a contract to alert the outside world when
|
Let us suppose that you need a contract to alert the outside world when
|
||||||
something happens. The contract can fire an event, which can be listened to
|
something happens. The contract can fire an event, which can be listened to
|
||||||
@ -279,7 +279,7 @@ Is a constructor required?
|
|||||||
No. If there is no constructor, a generic one without arguments and no actions will be used.
|
No. If there is no constructor, a generic one without arguments and no actions will be used.
|
||||||
|
|
||||||
Are timestamps (``now,`` ``block.timestamp``) reliable?
|
Are timestamps (``now,`` ``block.timestamp``) reliable?
|
||||||
===============================================================
|
=======================================================
|
||||||
|
|
||||||
This depends on what you mean by "reliable".
|
This depends on what you mean by "reliable".
|
||||||
In general, they are supplied by miners and are therefore vulnerable.
|
In general, they are supplied by miners and are therefore vulnerable.
|
||||||
@ -297,19 +297,19 @@ Never use ``now`` or ``block.hash`` as a source of randomness, unless you know
|
|||||||
what you are doing!
|
what you are doing!
|
||||||
|
|
||||||
Can a contract function return a ``struct``?
|
Can a contract function return a ``struct``?
|
||||||
================================================
|
============================================
|
||||||
|
|
||||||
Yes, but only in ``internal`` function calls.
|
Yes, but only in ``internal`` function calls.
|
||||||
|
|
||||||
If I return an ``enum``, I only get integer values in web3.js. How to get the named values?
|
If I return an ``enum``, I only get integer values in web3.js. How to get the named values?
|
||||||
===============================================================================================
|
===========================================================================================
|
||||||
|
|
||||||
Enums are not supported by the ABI, they are just supported by Solidity.
|
Enums are not supported by the ABI, they are just supported by Solidity.
|
||||||
You have to do the mapping yourself for now, we might provide some help
|
You have to do the mapping yourself for now, we might provide some help
|
||||||
later.
|
later.
|
||||||
|
|
||||||
What is the deal with ``function () { ... }`` inside Solidity contracts? How can a function not have a name?
|
What is the deal with ``function () { ... }`` inside Solidity contracts? How can a function not have a name?
|
||||||
================================================================================================================
|
============================================================================================================
|
||||||
|
|
||||||
This function is called "fallback function" and it
|
This function is called "fallback function" and it
|
||||||
is called when someone just sent Ether to the contract without
|
is called when someone just sent Ether to the contract without
|
||||||
@ -369,7 +369,7 @@ Examples::
|
|||||||
}
|
}
|
||||||
|
|
||||||
What is the ``modifier`` keyword?
|
What is the ``modifier`` keyword?
|
||||||
=====================================
|
=================================
|
||||||
|
|
||||||
Modifiers are a way to prepend or append code to a function in order
|
Modifiers are a way to prepend or append code to a function in order
|
||||||
to add guards, initialisation or cleanup functionality in a concise way.
|
to add guards, initialisation or cleanup functionality in a concise way.
|
||||||
@ -377,7 +377,7 @@ to add guards, initialisation or cleanup functionality in a concise way.
|
|||||||
For examples, see the `features.sol <https://github.com/ethereum/dapp-bin/blob/master/library/features.sol>`_.
|
For examples, see the `features.sol <https://github.com/ethereum/dapp-bin/blob/master/library/features.sol>`_.
|
||||||
|
|
||||||
How do ``struct``'s work?
|
How do ``struct``'s work?
|
||||||
=============================
|
=========================
|
||||||
|
|
||||||
See `struct_and_for_loop_tester.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/65_struct_and_for_loop_tester.sol>`_.
|
See `struct_and_for_loop_tester.sol <https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/65_struct_and_for_loop_tester.sol>`_.
|
||||||
|
|
||||||
@ -403,7 +403,7 @@ utf-8 is recommended. Identifiers (variables, functions, ...) can only use
|
|||||||
ASCII.
|
ASCII.
|
||||||
|
|
||||||
What are some examples of basic string manipulation (``substring``, ``indexOf``, ``charAt``, etc)?
|
What are some examples of basic string manipulation (``substring``, ``indexOf``, ``charAt``, etc)?
|
||||||
==============================================================================================================
|
==================================================================================================
|
||||||
|
|
||||||
There are some string utility functions at `stringUtils.sol <https://github.com/ethereum/dapp-bin/blob/master/library/stringUtils.sol>`_
|
There are some string utility functions at `stringUtils.sol <https://github.com/ethereum/dapp-bin/blob/master/library/stringUtils.sol>`_
|
||||||
which will be extended in the future.
|
which will be extended in the future.
|
||||||
@ -430,7 +430,7 @@ Can I concatenate two strings?
|
|||||||
You have to do it manually for now.
|
You have to do it manually for now.
|
||||||
|
|
||||||
Why is the low-level function ``.call()`` less favorable than instantiating a contract with a variable (``ContractB b;``) and executing its functions (``b.doSomething();``)?
|
Why is the low-level function ``.call()`` less favorable than instantiating a contract with a variable (``ContractB b;``) and executing its functions (``b.doSomething();``)?
|
||||||
========================================================================================================================================================================================
|
=============================================================================================================================================================================
|
||||||
|
|
||||||
If you use actual functions, the compiler will tell you if the types
|
If you use actual functions, the compiler will tell you if the types
|
||||||
or your arguments do not match, if the function does not exist
|
or your arguments do not match, if the function does not exist
|
||||||
@ -446,7 +446,7 @@ Is unused gas automatically refunded?
|
|||||||
Yes and it is immediate, i.e. done as part of the transaction.
|
Yes and it is immediate, i.e. done as part of the transaction.
|
||||||
|
|
||||||
When returning a value of say ``uint`` type, is it possible to return an ``undefined`` or "null"-like value?
|
When returning a value of say ``uint`` type, is it possible to return an ``undefined`` or "null"-like value?
|
||||||
====================================================================================================================
|
============================================================================================================
|
||||||
|
|
||||||
This is not possible, because all types use up the full value range.
|
This is not possible, because all types use up the full value range.
|
||||||
|
|
||||||
@ -496,7 +496,7 @@ you have to look in the overall transaction. This is also the reason why several
|
|||||||
block explorer do not show Ether sent between contracts correctly.
|
block explorer do not show Ether sent between contracts correctly.
|
||||||
|
|
||||||
What is the ``memory`` keyword? What does it do?
|
What is the ``memory`` keyword? What does it do?
|
||||||
====================================================
|
================================================
|
||||||
|
|
||||||
The Ethereum Virtual Machine has three areas where it can store items.
|
The Ethereum Virtual Machine has three areas where it can store items.
|
||||||
|
|
||||||
@ -599,7 +599,7 @@ No. Non-contract accounts "exist" as long as the private key is known by
|
|||||||
someone or can be generated in some way.
|
someone or can be generated in some way.
|
||||||
|
|
||||||
What is the difference between ``bytes`` and ``byte[]``?
|
What is the difference between ``bytes`` and ``byte[]``?
|
||||||
================================================================
|
========================================================
|
||||||
|
|
||||||
``bytes`` is usually more efficient: When used as arguments to functions (i.e. in
|
``bytes`` is usually more efficient: When used as arguments to functions (i.e. in
|
||||||
CALLDATA) or in memory, every single element of a ``byte[]`` is padded to 32
|
CALLDATA) or in memory, every single element of a ``byte[]`` is padded to 32
|
||||||
@ -671,7 +671,7 @@ currently do not work across loops and also have a problem with bounds checking.
|
|||||||
You might get much better results in the future, though.
|
You might get much better results in the future, though.
|
||||||
|
|
||||||
What does ``p.recipient.call.value(p.amount)(p.data)`` do?
|
What does ``p.recipient.call.value(p.amount)(p.data)`` do?
|
||||||
==============================================================
|
==========================================================
|
||||||
|
|
||||||
Every external function call in Solidity can be modified in two ways:
|
Every external function call in Solidity can be modified in two ways:
|
||||||
|
|
||||||
@ -688,7 +688,7 @@ 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.
|
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``?
|
What happens to a ``struct``'s mapping when copying over a ``struct``?
|
||||||
==============================================================================
|
======================================================================
|
||||||
|
|
||||||
This is a very interesting question. Suppose that we have a contract field set up like such::
|
This is a very interesting question. Suppose that we have a contract field set up like such::
|
||||||
|
|
||||||
@ -732,7 +732,7 @@ This is not yet implemented for external calls and dynamic arrays -
|
|||||||
you can only use one level of dynamic arrays.
|
you can only use one level of dynamic arrays.
|
||||||
|
|
||||||
What is the relationship between ``bytes32`` and ``string``? Why is it that ``bytes32 somevar = "stringliteral";`` works and what does the saved 32-byte hex value mean?
|
What is the relationship between ``bytes32`` and ``string``? Why is it that ``bytes32 somevar = "stringliteral";`` works and what does the saved 32-byte hex value mean?
|
||||||
====================================================================================================================================================================================
|
========================================================================================================================================================================
|
||||||
|
|
||||||
The type ``bytes32`` can hold 32 (raw) bytes. In the assignment ``bytes32 samevar = "stringliteral";``,
|
The type ``bytes32`` can hold 32 (raw) bytes. In the assignment ``bytes32 samevar = "stringliteral";``,
|
||||||
the string literal is interpreted in its raw byte form and if you inspect ``somevar`` and
|
the string literal is interpreted in its raw byte form and if you inspect ``somevar`` and
|
||||||
@ -754,7 +754,7 @@ string, respectively.
|
|||||||
|
|
||||||
|
|
||||||
Can a contract pass an array (static size) or string or ``bytes`` (dynamic size) to another contract?
|
Can a contract pass an array (static size) or string or ``bytes`` (dynamic size) to another contract?
|
||||||
=========================================================================================================
|
=====================================================================================================
|
||||||
|
|
||||||
Sure. Take care that if you cross the memory / storage boundary,
|
Sure. Take care that if you cross the memory / storage boundary,
|
||||||
independent copies will be created::
|
independent copies will be created::
|
||||||
@ -783,7 +783,7 @@ to create an independent copy of the storage value in memory
|
|||||||
and not a copy is passed.
|
and not a copy is passed.
|
||||||
|
|
||||||
Sometimes, when I try to change the length of an array with ex: ``arrayname.length = 7;`` I get a compiler error ``Value must be an lvalue``. Why?
|
Sometimes, when I try to change the length of an array with ex: ``arrayname.length = 7;`` I get a compiler error ``Value must be an lvalue``. Why?
|
||||||
==========================================================================================================================================================
|
==================================================================================================================================================
|
||||||
|
|
||||||
You can resize a dynamic array in storage (i.e. an array declared at the
|
You can resize a dynamic array in storage (i.e. an array declared at the
|
||||||
contract level) with ``arrayname.length = <some new length>;``. If you get the
|
contract level) with ``arrayname.length = <some new length>;``. If you get the
|
||||||
@ -813,7 +813,7 @@ no matter whether ``T`` itself is an array or not (this is not the
|
|||||||
case in C or Java).
|
case in C or Java).
|
||||||
|
|
||||||
Is it possible to return an array of strings (``string[]``) from a Solidity function?
|
Is it possible to return an array of strings (``string[]``) from a Solidity function?
|
||||||
===========================================================================================
|
=====================================================================================
|
||||||
|
|
||||||
Not yet, as this requires two levels of dynamic arrays (``string`` is a dynamic array itself).
|
Not yet, as this requires two levels of dynamic arrays (``string`` is a dynamic array itself).
|
||||||
|
|
||||||
@ -840,7 +840,7 @@ After a successful CREATE operation's sub-execution, if the operation returns x,
|
|||||||
|
|
||||||
|
|
||||||
How do I use ``.send()``?
|
How do I use ``.send()``?
|
||||||
=============================
|
=========================
|
||||||
|
|
||||||
If you want to send 20 Ether from a contract to the address ``x``, you use ``x.send(20 ether);``.
|
If you want to send 20 Ether from a contract to the address ``x``, you use ``x.send(20 ether);``.
|
||||||
Here, ``x`` can be a plain address or a contract. If the contract already explicitly defines
|
Here, ``x`` can be a plain address or a contract. If the contract already explicitly defines
|
||||||
|
Loading…
Reference in New Issue
Block a user