合约开发用到的工具、平台

  • 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

Hyperledger

FISCO BCOS

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