Smart Contracts
这里主要是关于智能合约。
- 搞明白 hardhat
- 用 hardhat 和 openzeplin 写 erc20 合约,部署、运行等
开发工具、框架
工欲善其事,必先利其器。
开发工具
Remix - 一个基于浏览器的 IDE,可以用来编写、编译、部署智能合约。
- Remix 内部也提供了一个交互式的学习 Solidity 的教程
Visiual Studio Code & Solidity Extension - 一个 VSCode 的插件,可以用来编写、编译、部署智能合约。
Jetbrains 系列 IDE & Solidity Extension - 一个 Jetbrains 系列 IDE 的插件,可以用来编写、编译、部署智能合约。
开发框架
- Hardhat
- OpenZeplin
- Truffle
- ether.js
- Ganache
- TypeScript & JavaScript & ES6 & Node.js
学习资源
Solidity Documents
smartcontract-apps - 分析市面上智能合约应用的架构与实现的仓库
语法
变量,数据类型和可见性
Solidity 有三种变量类型:
- 状态变量
- 本地变量
- 全局变量
在 Solidity 的全局命名空间中,存在一些特殊的变量,可以在任何地方访问,不需要声明;主要提供一些区块链信息和通用的处理函数。
- 区块和交易相关:
block.basefee
,msg.sender
,msg.data
(calldata),msg.value
,msg.sig
,tx.gasprice
,tx.origin
,block.gaslimit
,block.number
,block.timestamp
,block.difficulty
,block.coinbase
,block.chainid
,blockhash(uint blockNumber) returns (bytes32)
,gasleft() returns (uint256)
- abi 编解码函数
- 错误处理:
assert
,require
,revert
- 数学和加密函数:
keccak256
,sha256
,ripemd160
,ecrecover
,addmod
,mulmod
等等 - 地址类型:
<address>.balance
,<address>.code
等等 - 合约相关:
this
,selfdestruct(address recipient)
storage, memory, calldata
Solidity 中有几种变量的存储类型
- memory: 一些被临时使用的变量,比如函数参数、本地变量、在执行过程中动态创建的数组;一旦函数执行完毕,这些变量就会被销毁。
- storage
- calldata
- What is the difference between Memory and Calldata in Solidity?
- When to use Storage vs. Memory vs. Calldata in Solidity
函数 (function)
Payable function
合约安全
EIP
ERC20
我们首先需要熟悉 ERC20 标准协议,可以看 ERC20 Token Standard,非常重要。ERC20 标准规范可以获得更好的重用性,无论是对 web3 应用还是交易所。
接着可以了解 ERC20 的标准实现,可以看 OpenZeplin Contracts - ERC20 部分,代码在这里