aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/_templates/layout.html6
-rw-r--r--docs/assembly.rst2
-rw-r--r--docs/conf.py4
-rw-r--r--docs/contracts.rst7
-rw-r--r--docs/introduction-to-smart-contracts.rst8
-rw-r--r--docs/requirements.txt1
-rw-r--r--docs/types.rst11
-rw-r--r--docs/utils/SolidityLexer.py82
8 files changed, 30 insertions, 91 deletions
diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html
new file mode 100644
index 00000000..c5886276
--- /dev/null
+++ b/docs/_templates/layout.html
@@ -0,0 +1,6 @@
+{% extends "!layout.html" %}
+
+ {% block menu %}
+ <a href="genindex.html">Keyword Index</a>
+ {{ super() }}
+ {% endblock %}
diff --git a/docs/assembly.rst b/docs/assembly.rst
index 443cb7da..f7b721ab 100644
--- a/docs/assembly.rst
+++ b/docs/assembly.rst
@@ -115,7 +115,7 @@ you really know what you are doing.
// Iterate until the bound is not met.
for
- { let end := add(data, len) }
+ { let end := add(data, mul(len, 0x20)) }
lt(data, end)
{ data := add(data, 0x20) }
{
diff --git a/docs/conf.py b/docs/conf.py
index 7e107f2a..fdb67367 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -24,7 +24,7 @@ import re
def setup(sphinx):
thisdir = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, thisdir + '/utils')
- from SolidityLexer import SolidityLexer
+ from pygments_lexer_solidity import SolidityLexer
sphinx.add_lexer('Solidity', SolidityLexer())
# -- General configuration ------------------------------------------------
@@ -112,7 +112,7 @@ highlight_language = 'Solidity'
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-html_theme = 'default'
+html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
diff --git a/docs/contracts.rst b/docs/contracts.rst
index b73fe2ca..7f1899fa 100644
--- a/docs/contracts.rst
+++ b/docs/contracts.rst
@@ -526,9 +526,14 @@ In addition to the list of state modifying statements explained above, the follo
It is not possible to prevent functions from reading the state at the level
of the EVM, it is only possible to prevent them from writing to the state
(i.e. only ``view`` can be enforced at the EVM level, ``pure`` can not).
+ It is a non-circumventable runtime checks done by the EVM.
.. warning::
Before version 0.4.17 the compiler didn't enforce that ``pure`` is not reading the state.
+ It is a compile-time type check, which can be circumvented doing invalid explicit conversions
+ between contract types, because the compiler can verify that the type of the contract does
+ not do state-changing operations, but it cannot check that the contract that will be called
+ at runtime is actually of that type.
.. index:: ! fallback function, function;fallback
@@ -802,7 +807,7 @@ as topics. The event call above can be performed in the same way as
log3(
bytes32(msg.value),
bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20),
- bytes32(msg.sender),
+ bytes32(uint256(msg.sender)),
_id
);
}
diff --git a/docs/introduction-to-smart-contracts.rst b/docs/introduction-to-smart-contracts.rst
index d1789c44..71f9bd8e 100644
--- a/docs/introduction-to-smart-contracts.rst
+++ b/docs/introduction-to-smart-contracts.rst
@@ -33,7 +33,7 @@ Storage
The first line simply tells that the source code is written for
Solidity version 0.4.0 or anything newer that does not break functionality
(up to, but not including, version 0.5.0). This is to ensure that the
-contract does not suddenly behave differently with a new compiler version. The keyword ``pragma`` is called that way because, in general,
+contract does not suddenly behave differently with a new compiler version. The keyword ``pragma`` is called that because, in general,
pragmas are instructions for the compiler about how to treat the
source code (e.g. `pragma once <https://en.wikipedia.org/wiki/Pragma_once>`_).
@@ -62,7 +62,7 @@ so that only you can alter the number.
the ASCII character set. It is possible to store UTF-8 encoded data in string variables.
.. warning::
- Be careful with using Unicode text as similarly looking (or even identical) characters can
+ Be careful with using Unicode text, as similar looking (or even identical) characters can
have different code points and as such will be encoded as a different byte array.
.. index:: ! subcurrency
@@ -75,7 +75,7 @@ cryptocurrency. It is possible to generate coins out of thin air, but
only the person that created the contract will be able to do that (it is trivial
to implement a different issuance scheme).
Furthermore, anyone can send coins to each other without any need for
-registering with username and password - all you need is an Ethereum keypair.
+registering with username and password — all you need is an Ethereum keypair.
::
@@ -88,7 +88,7 @@ registering with username and password - all you need is an Ethereum keypair.
address public minter;
mapping (address => uint) public balances;
- // Events allow light clients to react on
+ // Events allow light clients to react to
// changes efficiently.
event Sent(address from, address to, uint amount);
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 0607b1ef..5fba631c 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1 +1,2 @@
sphinx_rtd_theme>=0.3.1
+pygments-lexer-solidity>=0.3.1
diff --git a/docs/types.rst b/docs/types.rst
index 5c20dc67..3f799c32 100644
--- a/docs/types.rst
+++ b/docs/types.rst
@@ -762,7 +762,7 @@ Members
// Create a dynamic byte array:
bytes memory b = new bytes(200);
for (uint i = 0; i < b.length; i++)
- b[i] = byte(i);
+ b[i] = byte(uint8(i));
return b;
}
}
@@ -975,6 +975,15 @@ cut off::
uint32 a = 0x12345678;
uint16 b = uint16(a); // b will be 0x5678 now
+Since 0.5.0 explicit conversions between integers and fixed-size byte arrays
+are only allowed, if both have the same size. To convert between integers and
+fixed-size byte arrays of different size, they first have to be explicitly
+converted to a matching size. This makes alignment and padding explicit::
+
+ uint16 x = 0xffff;
+ bytes32(uint256(x)); // pad on the left
+ bytes32(bytes2(x)); // pad on the right
+
.. index:: ! type;deduction, ! var
.. _type-deduction:
diff --git a/docs/utils/SolidityLexer.py b/docs/utils/SolidityLexer.py
deleted file mode 100644
index 50f51cf4..00000000
--- a/docs/utils/SolidityLexer.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-import copy
-
-from pygments.lexer import RegexLexer, ExtendedRegexLexer, bygroups, using, \
- include, this
-from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
- Number, Other, Punctuation, Literal
-
-__all__ = ['SolidityLexer']
-
-class SolidityLexer(RegexLexer):
- name = "Solidity"
- aliases = ['sol', 'solidity']
- filenames = ['*.sol']
- mimetypes = []
- flags = re.DOTALL
- tokens = {
- 'commentsandwhitespace': [
- (r'\s+', Text),
- (r'<!--', Comment),
- (r'///', Comment.Special, 'docstringsingle'),
- (r'//.*?\n', Comment.Single),
- (r'/\*\*', Comment.Special, 'docstringmulti'),
- (r'/\*.*?\*/', Comment.Multiline)
- ],
- 'natspec': [
- (r'@author|@dev|@notice|@return|@param|@title', Keyword),
- (r'.[^@*\n]*?', Comment.Special)
- ],
- 'docstringsingle': [
- (r'\n', Comment.Special, '#pop'),
- include('natspec')
- ],
- 'docstringmulti': [
- (r'\*/', Comment.Special, '#pop'),
- include('natspec')
- ],
- 'slashstartsregex': [
- include('commentsandwhitespace'),
- (r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/'
- r'([gim]+\b|\B)', String.Regex, '#pop'),
- (r'(?=/)', Text, ('#pop', 'badregex')),
- (r'', Text, '#pop')
- ],
- 'badregex': [
- (r'\n', Text, '#pop')
- ],
- 'root': [
- (r'^(?=\s|/|<!--)', Text, 'slashstartsregex'),
- include('commentsandwhitespace'),
- (r'\+\+|--|\*\*|~|&&|\?|:|\|\||\\(?=\n)|'
- r'(<<|>>>?|==?|!=?|[-<>+*%&\|\^/])=?', Operator, 'slashstartsregex'),
- (r'[{(\[;,]', Punctuation, 'slashstartsregex'),
- (r'[})\].]', Punctuation),
- (r'(anonymous|as|assembly|break|constant|continue|do|delete|else|external|for|hex|if|'
- r'indexed|internal|import|is|mapping|memory|new|payable|public|pragma|'
- r'private|pure|return|returns|storage|super|this|throw|using|view|while)\b', Keyword, 'slashstartsregex'),
- (r'(var|function|event|modifier|struct|enum|contract|library|interface)\b', Keyword.Declaration, 'slashstartsregex'),
- (r'(bytes|string|address|uint|int|bool|byte|' +
- '|'.join(
- ['uint%d' % (i + 8) for i in range(0, 256, 8)] +
- ['int%d' % (i + 8) for i in range(0, 256, 8)] +
- ['bytes%d' % (i + 1) for i in range(0, 32)] +
- ['ufixed%dx%d' % ((i), (j + 8)) for i in range(0, 256, 8) for j in range(0, 256 - i, 8)] +
- ['fixed%dx%d' % ((i), (j + 8)) for i in range(0, 256, 8) for j in range(0, 256 - i, 8)]
- ) + r')\b', Keyword.Type, 'slashstartsregex'),
- (r'(wei|szabo|finney|ether|seconds|minutes|hours|days|weeks|years)\b', Keyword.Type, 'slashstartsregex'),
- (r'(abstract|after|case|catch|default|final|in|inline|let|match|'
- r'null|of|relocatable|static|switch|try|type|typeof)\b', Keyword.Reserved),
- (r'(true|false)\b', Keyword.Constant),
- (r'(block|msg|tx|now|suicide|selfdestruct|addmod|mulmod|sha3|keccak256|log[0-4]|'
- r'sha256|ecrecover|ripemd160|assert|revert|require)', Name.Builtin),
- (r'[$a-zA-Z_][a-zA-Z0-9_]*', Name.Other),
- (r'[0-9][0-9]*\.[0-9]+([eE][0-9]+)?', Number.Float),
- (r'0x[0-9a-fA-F]+', Number.Hex),
- (r'[0-9]+([eE][0-9]+)?', Number.Integer),
- (r'"(\\\\|\\"|[^"])*"', String.Double),
- (r"'(\\\\|\\'|[^'])*'", String.Single),
- ]
- }