Skip to content

Commit

Permalink
Update translation based on latest version.
Browse files Browse the repository at this point in the history
Version up to 20180626, commit: 503eb8caa53c1f6ef00cec1fee099b2457c304f4
  • Loading branch information
riversyang committed Jun 27, 2018
1 parent 3c02553 commit b1e0278
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions security-considerations.rst
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ gas 限制和循环
必须谨慎使用没有固定迭代次数的循环,例如依赖于 |storage| 值的循环:
由于区块 gas 有限,交易只能消耗一定数量的 gas。
无论是明确指出的还是正常运行过程中的,循环中的数次迭代操作所消耗的 gas 都有可能超出区块的 gas 限制,从而导致整个合约在某个时刻骤然停止。
这可能不适用于只被用来从区块链中读取数据的 ``constant`` 函数。
这可能不适用于只被用来从区块链中读取数据的 ``view`` 函数。
尽管如此,这些函数仍然可能会被其它合约当作 |on_chain| 操作的一部分来调用,并使那些操作骤然停止。
请在合约代码的说明文档中明确说明这些情况。

Expand Down Expand Up @@ -211,8 +211,6 @@ tx.origin

- 在 ``for (var i = 0; i < arrayName.length; i++) { ... }`` 中, ``i`` 的类型会变为 ``uint8`` ,
因为这是保存 ``0`` 值所需的最小类型。如果数组超过 255 个元素,则循环不会终止。
- ``constant`` 关键字并不是编译器强制的,另外也不是 |evm| 强制的,
因此一个“声明”为 ``constant`` 的函数可能仍然会发生状态发生变化。
- 不占用完整 32 字节的类型可能包含“脏高位”。这在当你访问 ``msg.data`` 的时候尤为重要 —— 它带来了延展性风险:
你既可以用原始字节 ``0xff000001`` 也可以用 ``0x00000001`` 作为参数来调用函数 ``f(uint8 x)`` 以构造交易。
这两个参数都会被正常提供给合约,并且 ``x`` 的值看起来都像是数字 ``1``,
Expand All @@ -222,6 +220,17 @@ tx.origin
推荐做法
***************

认真对待警告
=======================

如果编译器警告了你什么事,你最好修改一下,即使你不认为这个特定的警告不会产生安全隐患,因为那也有可能埋藏着其他的问题。
我们给出的任何编译器警告,都可以通过轻微的修改来去掉。

同时也请尽早添加 ``pragma experimental "v0.5.0";`` 来允许 0.5.0 版本的安全特性。
注意在这种情况下,``experimental`` 并不意味着任何有风险的安全特性,
它只是可以允许一些在当前版本还不支持的 Solidity 特性,来提供向后的兼容。


限定 |ether| 的数量
============================

Expand Down

0 comments on commit b1e0278

Please sign in to comment.