智能合约学习资源
这些资源主要来自笔者的经历和学习,也参考了许多人的总结,作为自己的系统作结,应该对大家有帮助。
帮助和交流平台
- gitter 在线频道。
- reddit ethereum 讨论区
- 以太坊的 stackexchange
- stackoverflow
还有一些 discord 服务器,感兴趣可以加入。
优质社区
- 登链社区,许多翻译的文章质量很高,并且有一些文档翻译。
- 以太坊知识库,虽然许多东西没有更新,但是有些文章翻译的很好,例如 新手入门、以及它开发者提供的参考 都可以看出来是花了很长时间整理的,可以浏览,增长见识。比较可惜的是,后续没有继续更新,可能是小白成为大佬的过程常常写很多的文章,但是成为大佬后都应对复杂问题,就没有继续写下去了吧。
- layer2 方案的备忘录,以后深入以太坊拓展方案后可以很快对 layer2 有大致的认识。
- medium 虽然是英文社区,但是里面的优秀文章写的很好,建议翻译慢慢看。
- Eth2 展望和分享,作者经常分享自己对以太坊升级的看法和资讯。
入门参考
- 《以太坊的指南针》 ‒ 以太坊的指南针 1.0.0 documentation 面向 没接触过以太坊的人 的书。
- 以太坊的入门级简单文档
- 区块链概念和基础(基于比特币)
- 官方文档,内容可能比较简洁,相对深入,可以量力而行。
- 《精通以太坊》前面的内容适合入门,后面的内容需要一定的基础,可日后再回顾。开源书,有中文版。
智能合约合约教程
-
虽然这个教程比较老,但是比较有趣
-
介绍 Solidity 细节的视频(在 Youtube 上)
-
系统性的合约开发教程 (在 Youtube 上)
区块浏览器
- Etherscan – 中文、韩文、俄文和日文
- Etherchain
- Ethplorer - 支持中文、西班牙语、法语、土耳其语和俄语
- Blockchair –也有西班牙文、法文、意大利文、荷兰文、葡萄牙文、俄文、中文和波斯文
- Blockscout–区块链浏览器
- OKLink
- https://beaconcha.in/
- https://beaconscan.com/
- https://eth2stats.io/
- https://ethscan.org/(beaconcha.in 的分叉)
一些特殊的浏览器
合约库
- openzeppelin/contracts 提供了常见的合约库,实现了一些标准库,如 ERC20、ERC721,仓库中可阅读源码。
!
- HQ20 里提供里许多的合约和他们的测试脚本,可以作为自己开发的组件。
集成开发工具
使用开发环境可以加快重复性任务,例如 Truffle 主要完成以下工作:
- 编制合同
- 部署合约
- 调试合约
- 升级合约
- 运行单元测试
Ganache 最近升级后功能强大了许多,可以提供本地私链的测试环境,而且还支持其他功能。
其次,truffle 有很多的插件,
- truffle-plugin-verify - 验证 Etherscan 上的特定地址的智能合约代码是否和本地相同
- truffle -security - 对智能合约运行 MythX 安全分析。
- truffle-contract-size - 以千字节显示智能合约的大小。
- truffle-plugin-abigen - 生成与 Geth 兼容的abigen数据,用于为以太坊合约构建 Golang 绑定
- openzeppelin-upgrades 可升级合约插件
- solidity-coverage 检查测试的覆盖性。
官网中还介绍了其他的开发框架:
Hardhat
hardhat 的堆栈跟踪功能很强大,报错信息相对更具有可读性,而且主网分叉功能也很赞。
- hardhat.org,除了官网也有国人不完全的翻译。
- GitHub
**Brownie - **基于 Python 的开发环境和测试框架。
Embark - 开发环境、测试框架以及与以太坊、IPFS 和 Whisper 集成的其他工具。
Epirus - 在 JVM 上开发区块链应用程序的平台。
OpenZeppelin SDK - 工具包:一套帮助您开发、编译、升级、部署智能合约并与之交互的工具。
The Graph - 链上信息查询的 API
Alchemy - layer2 平台提供的开发套件。
Dapptools - 一套专注于以太坊的 CLI 工具,遵循 Unix 设计理念,倾向于可组合、可配置和可扩展性。
看官网朴实的介绍,确实很符合 unix 极简主义的哲学
关于其他集成开发工具的介绍,可以见 2022 十大智能合约开发工具
与合约交互的库
Web3.js - 是使用的非常广泛的库,包含完整的合约交互和查询函数
Ethers.js - 现在的主流库,hardhat 框架也主要用到它。
Graph - 比较新的使用 GraphQL 的信息查询的库,配套有信息查询平台。
Alchemyweb3 - 封装后的 Web3.js 的库,Alchemy 的配套生态
Web3j - Java 的 API
Web3.py - 用于与以太坊交互的 Python 库
DApp 的前端库
前端链接钱包往往需要阅读不同的钱包的文档,然后针对性的写代码,这是重复性的工作,因此有相应的库完成了这个工作。
- blocknative 不只提供了连接钱包的接口,而且还提供了监控内存池、交易池的接口。
- web3modal 提供链接钱包的 UI 和封装。
-
web3-react 为前端 React 提供的 DAPP 开发组件。
-
创建 Eth App - 一大量的创建 DApp 的模板
-
Scaffold-Eth - Ethers.js + Hardhat + React 的 DApp 模板
-
Drizzle 擅长大量状态管理的前端库。
安全审计
- Mythril 是 EVM 字节码的安全分析工具。它使用符号执行、SMT 解决和污点分析来检测各种安全漏洞。
- Slither 是一个用 Python 3 编写的 Solidity 静态分析框架。
- Manticore 是用于分析智能合约和二进制文件的符号执行工具。
- Echidna 是一个 Haskell 程序,旨在对以太坊智能合约进行模糊测试/基于属性的测试。
- tenderly 是集成、开发、测试模拟的平台,主网分叉的功能很赞。
这方面的内容,我会在后续合约审计文章中详细说明各种工具的使用和原理。
漏洞分析博客
- 慢雾科技的安全技术探究 里面会分享漏洞分析的报告。
- 合约漏洞赏金平台 immunefi,在上面提交漏洞报告,不仅可以得到丰厚的回报,也会收获行业声誉,也提供了智能合约安全的教程。
- rekt 是分享漏洞和攻击事件的平台。
各语言的区块链开发
以下资源包来自以太坊官网,主要是各种语言参与区块链开发的指导,虽然许多没有翻译,但是仍然很有参考意义,因此搬运过来了:
根据您的语言选择项目资源和虚拟社区:
- 面向 Java 开发者的以太坊资源
- 面向 Python 开发者的以太坊资源
- 面向 JavaScript 开发者的以太坊资源
- 面向 Go 开发者的以太坊资源
- 面向 Rust 开发者的以太坊资源
- 面向 .NET 开发者的以太坊资源
- 面向 Delphi 开发者的以太坊资源
- 面向 Dart 开发者的以太坊资源
底层源码参考
- 简书博客,最初发表的文章主要是以太坊源码分析,对以太坊的函数做了说明。
- 最近的源码分析文章
- GitHub - ZtesoftCS/go-ethereum-code-analysis 4 年前的源码分析汇总
- Ethereum-tutorial
- [go-ethereum 源码笔记(概览)](https://knarfeh.com/2018/03/10/go-ethereum 源码笔记(概览)/) 四年前的博客
- Introduction · Ethereum Development with Go 跟着用 Go 写简单区块链
- Geth Documentation | Go Ethereum geth 使用说明,调试程序,使用自带工具的参考。
- 操作码详解和模拟。
- 以太坊技术与实现,作者作了整体性的说明,适合作为大致参考。
- 笔者的源码分析和理论基础、调试实操。