Smart Contracts

这里主要是关于智能合约。

  1. 搞明白 hardhat
  2. 用 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 有三种变量类型:

在 Solidity 的全局命名空间中,存在一些特殊的变量,可以在任何地方访问,不需要声明;主要提供一些区块链信息和通用的处理函数。

  1. 区块和交易相关: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)
  2. abi 编解码函数
  3. 错误处理:assert, require, revert
  4. 数学和加密函数:keccak256, sha256, ripemd160, ecrecover, addmod, mulmod 等等
  5. 地址类型:<address>.balance, <address>.code 等等
  6. 合约相关:this, selfdestruct(address recipient)

storage, memory, calldata

Solidity 中有几种变量的存储类型

  1. memory: 一些被临时使用的变量,比如函数参数、本地变量、在执行过程中动态创建的数组;一旦函数执行完毕,这些变量就会被销毁。
  2. storage
  3. calldata

函数 (function)

Payable function

合约安全

EIP

ERC20

我们首先需要熟悉 ERC20 标准协议,可以看 ERC20 Token Standard,非常重要。ERC20 标准规范可以获得更好的重用性,无论是对 web3 应用还是交易所。

接着可以了解 ERC20 的标准实现,可以看 OpenZeplin Contracts - ERC20 部分,代码在这里