https://zhuanlan.zhihu.com/p/54169418
随着solidity 0.5.0 nightly build版本的稳步推进,正式版也将在不久的将来与开发者见面.作为一个大版本更新,新版引入了很多特性,也废弃了很多关键字,比如
.call()不仅可以获知远程调用执行成功与否,还将获得远程调用执行的返回值
ABI解码做了新的处理规范,有效防御了"短地址攻击"
address地址类型细分成 address和 address payable
uintY和 bytesX不能直接转换
回退函数必须显式声明为 external可见性
构造函数必须用 constructor关键字定义
用于抛出异常的 throw关键字弃用, 函数状态可变性修饰符必须用 view,不能混用 constant和 view
…
下面我们将对这些改变一一予以介绍,最后给出一个示例代码,对比展示新旧版solidity代码写法的区别,供大家参考.
显式声明
函数可见性
函数可见性必须显式声明. 之前, 函数如果不显式声明,将默认 public可见性.
public: constructor构造函数必须声明为 public可见性,否则编译报错.
external: 回退函数(fallback function), 接口(interface)的函数必须声明为 external可见性,否则编译报错.
存储位置
结构体(struct),数组(array),映射(mapping)类型的变量必须显式声明存储位置( storage, memeory, calldata),包括函数参数和返回值变量都必须显式声明.
external 的函数参数需显式声明为 calldata.
合约与地址
contract合约类型不再包括 address类型的成员函数,必须显式转换成 address地址类型才能使用 send(), transfer(), balance等与之相关的成员函数/变量成员.
address地址类型细分为 address和 address payable,只有 address payable可以使用 transfer(), send()函数.
address payable类型可以直接转换为 address类型, 反之不能.
但是 address x可以通过 address(uint160(x)),强制转换成 address payable类型.
https://www.etherniti.org/blog/development/swagger/
http://dev.proxy.etherniti.org/swagger/
https://docs.etherniti.org/architecture/benchmarks/performance_test/
https://docs.etherniti.org/architecture/optimizations/address-validation/
package main import ( "fmt" "regexp" ) var ( re := regexp.MustCompile("^0x[0-9a-fA-F]{40}$") ) func IsValidAddress(v string) bool { return re.MatchString(v) } func main() { fmt.Println(IsValidAddress("0x323b5d4c32345ced77393b3530b1eed0f346429d")) // true fmt.Println(IsValidAddress("0xXYZb5d4c32345ced77393b3530b1eed0f346429d")) // false }
創世區塊 g
30 seconds
“period”: 30,
why-ethereum-transfers-are-so-slow-how-fix
https://born2invest.com/articles/why-ethereum-transfers-are-so-slow-how-fix/
Slow and steady
Ethereum only processes 10 to 15 transactions per second, in large part because all nodes are required to help process all transactions made through the database. By comparison, a credit card company like Visa can process around 45,000 transactions per second.
uint256 => 2^256
byte32 => 2^8^32 (byte=2^8) or 32個byte 放32字元(ascii)
0x => HEX 16進位
0x64 => 6 * (16^1) + 4 * (16^0) = 100
0x0164 => 1 * (16^2) + 6 * (16^1) + 4 * (16^0) = 365
0x HEX 16進位 最小0 最大F
回到最上面byte32 轉成 0x HEX 為了避免太長,2^8 = 256 => 16^2 => 16位元顯示要兩位 0~256 => 00~FF || FF => 15 * (16^1) + 15 * (16^0)
所以 0x0164,通常都是兩位處理 0x 01 64
https://medium.com/joyso/solidity-%E5%A3%93%E7%B8%AE%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84%E7%9A%84%E8%BC%B8%E5%85%A5%E8%B3%87%E6%96%99-65a870d1f04e