新書推薦:
《
万千心理·我的精神分析之道:复杂的俄狄浦斯及其他议题
》
售價:NT$
475.0
《
荷马:伊利亚特(英文)-西方人文经典影印21
》
售價:NT$
490.0
《
我的心理医生是只猫
》
售價:NT$
225.0
《
股权控制战略:如何实现公司控制和有效激励(第2版)
》
售價:NT$
449.0
《
汉译名著·哲学经典十种
》
售價:NT$
3460.0
《
成吉思汗传:看历代帝王将相谋略 修炼安身成事之根本
》
售價:NT$
280.0
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:NT$
349.0
《
人生解忧:佛学入门四十讲
》
售價:NT$
490.0
|
內容簡介: |
本书从零开始介绍Solidity程序开发,从Solidity语言中基础的关键字和语句开始介绍,逐步深入到高级应用,包括设计模式、合约可升级的设计、合约的安全性问题及对策等,并结合EVM的实现,讨论Solidity语句的汇编实现;对一些原理的讲解,提供了相对应的实例,以期更易于理解原理的实现机理;同时,对Solidity应用于DApp开发,及使用区块链上的去中心化存储(IPFS)也有详细的介绍。
本书可作为对区块链感兴趣的程序开发人员、高校师生等的参考书,也可作为相关课程的培训教材。
|
目錄:
|
目录
前言
第1章以太坊简介1
11以太坊1
111不对称加密体系2
112密码学哈希函数4
113对称点对点网络4
114区块链4
115以太坊虚拟机5
116节点5
117矿工5
118工作量证明6
119去中心化应用6
1110Solidity6
12智能合约6
13燃料7
131为什么需要燃料?8
132燃料组成8
14ether9
15账户9
16交易10
第2章预备知识11
21简单的例子11
22工具准备12
221编程环境准备12
222编程工具准备16
223区块链浏览器26
23测试环境26
231MetaMask访问测试环境27
232测试环境领取测试用币27
233开发时连接测试环境28
24以太坊源码编译29
第3章Solidity编程基础31
31sol文件结构31
311编译开关31
312引用其他源文件31
313注释31
314合约32
315库32
316接口33
32合约文件结构33
33变量类型33
331值类型34
332引用类型35
333字典映射37
334特殊情况37
34操作符38
35语句39
351条件语句39
352循环语句40
353其他40
36修饰符40
361标准修饰符40
362自定义修饰符44
37数据位置46
38事件47
381智能合约返回值给用户接口48
382异步的带数据的触发器49
383一种比较便宜的存储49
384事件里的Indexed参数50
39继承51
391单继承51
392多重继承51
310其他52
3101内置52
3102特殊单位54
3103类型转换及推断55
3104异常56
3105汇编56
第4章Solidity编程的高级话题59
41This关键字59
42ERC20标准接口59
421方法61
422事件62
423OpenZepplin框架62
43ERC721标准接口63
431ERC721接口定义63
432元数据扩展75
433可枚举扩展77
434ERC165标准81
44合约间调用82
441函数调用82
442依赖注入84
443消息调用84
444获取合约间调用的返回值88
45基础算法90
46用Go与合约交互93
461创建项目93
462创建一个简单的以太坊合约93
463用Go访问以太坊合约94
464本地测试94
465连接到一个以太坊节点98
466为账户创建加密的JSON钥匙98
467最后验证98
第5章ABI接口102
51内存结构102
52函数选择子102
53类型的定义102
54EVM里的数据表示103
541固定长度数据类型的表示104
542动态长度数据类型的表示105
55编码108
551简单的例子108
552外部调用例子109
553外部方法调用的ABI编码112
56基于ABI的编程116
第6章智能合约运行原理118
61设计模式118
611合约自毁118
612工厂合约模式119
613名字登录120
614映射迭代121
615撤出模式122
62省燃料122
621注意数据类型123
622以字节编码的形式存储值123
623利用SOLC编译器压缩变量123
624使用汇编代码压缩变量124
625合并函数参数125
626使用默克尔树证明减少存储成本125
627无状态的合约127
628在IPFS上存储数据127
629位压缩127
6210批处理128
6211Storage结构类型读写分离129
6212uint256和直接内存存储130
6213汇编代码优化130
63汇编代码130
631栈131
632调用数据131
633内存132
634存储133
64解构智能合约134
641合约创建138
642合约本体通用部分141
643合约本体特定代码145
第7章可升级的合约147
71方法147
711代理合约147
712分离逻辑和数据147
713通过键值对来分离数据和逻辑147
714部分升级148
715比较148
716简单的代理合约例子148
72通用的代理模式150
73Storage154
731继承存储154
732永久存储154
733非结构化存储155
74Augur156
741合约部署156
742存储部署157
75Colony158
751存储部署158
752合约部署159
76总结159
第8章编写安全的合约161
81以太坊已知常见漏洞 161
811上溢和下溢161
812Solidity可见性修饰符的差别165
813重入问题166
814出乎意料的ether操作170
815代理调用174
816默认可见性修饰符178
817熵随机源180
818外部合约引用180
819短地址参数攻击184
8110未验证的CALL返回值185
8111竞争条件186
8112阻塞攻击188
8113操纵块时间戳190
8114谨慎使用构造函数191
8115未初始化的存储指针192
8116浮点数精度193
8117交易授权194
82以太坊一些奇怪的特性195
821没有Key的ether195
822一次性地址197
823一个交易的空投197
83以太坊智能合约——最佳安全开发指南198
831尽早且明确的暴露问题198
832在支付时使用(pull)模式而不是(push)模式199
833函数代码的顺序:条件,行为,交互200
834留意平台局限性201
835测试用例203
836容错及自动b
|
內容試閱:
|
随着区块链技术浪潮的方兴未艾,基于以太坊的智能合约编程也成为一个广为人知的热门话题。本书写作的目的就是从零开始,由浅入深地介绍Solidity这一热门的智能合约编程语言的使用。希望本书可以一站式地为读者提供Solidity编程所需的所有信息。Solidity的设计使用了很多面向对象编程的概念,比如继承、重载等。所以,本书适合学习过至少一门面向对象编程的大学生和开发人员。
在现有的智能合约编程语言里,无论是编程语言社区数、使用者数量、使用范围,还是活跃的合约数量, 以及大众的辨识度,Solidity都当之无愧地雄踞榜首。虽然目前智能合约编程的前沿已经转向Web Assembly,但是在可预见的将来,Solidity仍将在智能合约编程领域占有举足轻重的地位。
Solidity不仅仅是一门新的编程语言,它和传统的Java、C++最显著的不同是:Solidity编写智能合约是在完全去中心化的环境里运行,而且由以太坊虚拟机(EVM解释执行。因此,Solidity的编程、设计、调试和传统编程是完全不同的。传统的编程语言有解释型和编译型,而且代码在绝大部分的情况下是不公开的。而Solidity的智能合约编程,是部署到以太坊公链上,源代码公开透明。每一位有计算机基础知识的用户都可以通过各种各样的工具(比如区块链浏览器)看到Solidity的源代码。这种公开透明的特性给智能合约编程带来巨大的挑战:如何编写安全的、没有漏洞的合约?同时,传统的程序一般是基于某种体系架构,比如WindowsIntel, LinuxAMD等,而Solidity编程是基于以太坊虚拟机(以太坊虚拟机是一个栈机器,没有WindowsIntel架构里的寄存器)。EVM具有很多独特的特性,而这些特性都会无形地影响Solidity编程,比如编程模式、内存格式、地址寻址方式。本书对EVM进行了详细的探讨,帮助程序员编写更有效、耗费更低、功能更强大的程序。
本书的结构如下:
预备篇
第1章介绍了以太坊上的一些基础概念和术语。
第2章介绍了Solidity开发测试环境的配置和安装。
基础篇
第3章介绍了Solidity编程语言的基础知识:关键字、语句、修饰符以及特殊特性。
第4章介绍了流行的ERC20、ERC721协议家族以及合约间如何调用,编程语言如何与智能合约交互。
高级篇(本书的重点)
第5章介绍了二进制接口(ABI)规范以及数据的编码。
第6章介绍了Solidity编程的一些高级话题:设计模式,如何省GAS,以及Solidity语句的汇编实现。
第7章讨论了如何设计可升级的智能合约。
第8章讨论了智能合约编程的安全性以及最佳实践方案总结。
应用篇
第9章介绍了基于Solidity智能合约的DApp编程,以及如何使用去中心化的存储。
第10章介绍了Solidity的测试工具和使用示例。
致谢
首先感谢本书的合著者管健先生、李万胜先生在编写本书时付出的努力以及贡献的宝贵意见。其次感谢催生本书的出版界的朋友:朱伟博士以及机械工业出版社的吉玲编辑。最后,这本书也献给我的母亲,本书大部分内容编写于母亲卧病陪床之际,相信母亲知道本书顺利出版,她在天国也会感到很安慰。
嘉文
|
|