合约开发用到的工具、平台
- Solidity - 合约主要开发语言,必须熟悉。
- Gas-Optimization - 节省 Gas 妙招汇总,可以减少很多 SB 操作。
- DeFi MOOC - 伯克利一个博士发起的 Defi 课程,可以算是全网讲的最好的了。
- Hardhat - 以 Nodejs 为基础的和合约开发工具,生态非常好,不过和 EVM 交互不好,断点调试只能将数据传到 Tenderly 分析。
- Foundry - Rust 写的合约开发工具,可以用 Solidity 写测试用例和做断点调试,
个人认为这必将是以后 Solidity 开发的趋势
。 - Tenderly - 合约分析平台,断点调试、Gas 分析利器。
- EthTx Transaction Decoder - 合约交易分析利器,相比 tenderly 使用更加简单,但是使用方便。
- Openzeppelin - 合于模版,行业规范。
- UseDApp - React 合约全家桶,可以让我这种不靠谱的前端快速搭建交互。
合约地址是如何计算出来的
以太坊合约的地址是根据创建者(sender)的地址以及创建者发送过的交易数量(nonce)来计算确定的。 sender 和 nonce 进行 RLP 编码,然后用 Keccak-256 进行 hash 计算
SDK 计算
由于算法是确定的,也可以使用各种 SDK 计算出确定的合约地址
Solidity
EIP 1014 提出了 create2
方法可以在Solidity
中创建合约,这种方法已经在合约中大量使用。
以下代码取自 Uniswap V2 UniswapV2Factory.sol
// 提取 UniswapV2Pair 合约编译的字节码
bytes memory bytecode = type(UniswapV2Pair).creationCode;
// 用配对的地址计算 HASH
bytes32 salt = keccak256(abi.encodePacked(token0, token1));
// 内联汇编 - Inline Assembly
// 可以调用相对底层的代码
// https://docs.soliditylang.org/en/latest/assembly.html
// https://solidity-by-example.org/app/create2/
// https://docs.soliditylang.org/en/develop/yul.html?highlight=create2#evm-dialect
// https://eips.ethereum.org/EIPS/eip-1014
assembly {
// create2 部署合约
pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
}
有哪些必须要知道的链
BTC
BTC 是币圈的信仰,不用用多说。详细设计可以阅读 白皮书 与 源码。
Ethereum
Ethereum 可以在链上运行自己编写代码,区块链的社区由此打开。其 黄皮书 与 源码 也是非常值得阅读的。
Hyperledger
FISCO BCOS
趣链
蚂蚁链
腾讯区块链
Ethereum 扩容方案
现有的以太坊主链已经非常的拥挤,在上面进行交易的成本非常高,急需对优化起性能,现在市面上主要由 3 种方法:
- 在主链上进行拓展, ETH2 就是采用这种方案
- 在 ETH 主链上 再加一层网络 Later2
- 在 ETH 主链上 再加一侧构建侧链(Siderchain)
Ethereum GAS 是怎么计算的
以太坊上每个炒作由固定的 Gas , 存储的内存也会计算 Gas https://docs.google.com/spreadsheets/d/1n6mRqkBz3iWcOlRem_mO09GtSKEKrAsfO7Frgx18pNU/edit#gid=0 https://github.com/crytic/evm-opcodes