“与其感慨路难行,不如马上出发。”
在同一地址部署不同合约
在 工厂合约 一文中,我们了解了两种创建合约的方式: CREATE 创建的合约地址由 创建者地址 和 创建者Nonce 确定 CREATE2 创建的合约地址由 创建者地址 和 salt 和 合约字节码 确定 在同一地址部署不同合约的步骤: 使用 CREA ...
工厂合约
在以太坊上,工厂合约可以用来部署和管理智能合约实例,并跟踪已部署合约的地址和其他相关信息。我们有两种方式实现工厂合约,分别对应 EVM 中有两个操作码:CREATE 和 CREATE2。这两种方式计算合约部署地址的方式不同: bytes20(keccak25 ...
合约交互
当我们已知合约接口和已部署合约地址时,可以通过合约实例调用合约方法 interface IContract { function x() public view returns (uint); } contract C { ...
接收以太币
无论是合约还是外部账户,目前都无法阻止有人向它们发送以太币。合约可以对普通的转账做出反应并拒绝,但有一些方法可以在不创建消息调用的情况下转移以太币。一种方法是将合约地址设置为接收挖矿奖励的地址,另一种方法是使用 selfdestruct(x) 函数。这个函数会 ...
发送以太币
有三种通过调用函数发送以太币的方式: <address payable>.transfer(uint256 amount) <address payable>.send(uint256 amount) returns (bool) & ...
异常处理
目前 Solidity 0.8.x 版本有三种方式处理异常:revert require assert。 error 声明自定义错误error 是 solidity 0.8.4 版本新加的内容,必须搭配 revert 命令使用。相比字符串错误信息,自定义 er ...
EIP-165 Example
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceI ...
EIP-712 Example
合约代码// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; struct Mail { address from; address to; string conte ...
以太坊中的数字签名和验证过程
非对称加密的应用场景之一是签名和验证。签名和验证是一种验证数据完整性和真实性的方法。在以太坊中,按照签名对象的不同,可以划分出两种类型:签名交易和签名消息。 概述以太坊中,可以根据 私钥 和 消息,通过 ECDSA 算法生成 签名。签名结果 r s v 可以拼 ...
智能合约工程师学习清单
为明晰学习路径和查漏补缺,不定期更新学习方向和需要掌握的技能。 以太坊 以太坊客户端 以太坊虚拟机 签名和交易 密码学:哈希算法、非对称加密、零知识证明 共识算法 EIP Layer2 智能合约 Solidity ethers Hardhat 通用场景 合约 ...
12