随笔分类 - solidity
合约编程语言
摘要:1. 引言 在 Solidity 智能合约开发中,using A for B; 是一种 扩展类型接口(Extending Type Interface) 的用法,它允许类型 B 直接使用库 A 中的函数。这种机制可以提高代码的可读性、可复用性,并减少冗余代码。 本文将深入解析 using A for
阅读全文
摘要:Delegatecall 简介 1.1.什么是 delegatecall ? .delegatecall() 是 Solidity 中的一个方法,用于从一个原始合约中调用目标合约中的一个函数。然而,与其他方法不同的是,当使用.delegatecall()在目标合约中执行函数时,上下文从原始合约中传递
阅读全文
摘要:1. 什么是 CREATE2? CREATE2 是以太坊虚拟机(EVM)中的一个操作码(opcode),用于确定性地创建合约,使合约地址可预测。这与 CREATE 操作码不同,CREATE2 允许在合约部署前 计算出合约的地址,这对于智能合约钱包、工厂合约和 Layer 2 解决方案至关重要。 CR
阅读全文
摘要:在使用 Hardhat 和 Ethers.js 进行智能合约开发时,我们经常会看到 artifacts/ 目录,这个目录里存放的是 Solidity 合约的编译产物,包括 ABI、字节码和元数据。本篇博客将详细介绍 artifacts 是什么、它的目录结构,以及如何在部署合约时使用它。 1. 什么是
阅读全文
摘要:问题描述 在开发 ERC20 代币时,我们经常会遇到代币精度(decimals)与实际显示数值不一致的困惑。以下是一个具体案例分析。 合约代码 contract ERC20Coin is ERC20 { uint8 private immutable _decimals; uint256 priva
阅读全文
摘要:在以太坊和其他 EVM 区块链上,执行智能合约需要支付 Gas 费用。Gas 是衡量智能合约计算成本的单位,用户需要为合约执行支付费用,费用由 Gas 消耗量和当前 Gas 价格决定。高效的智能合约设计可以显著降低 Gas 消耗,从而为用户和开发者节约成本,提升合约的可用性。 在实际应用中,以下场景
阅读全文
摘要:在以太坊智能合约开发中,理解 storage、memory 和 calldata 的区别是优化合约性能、节省 Gas 成本的关键。本篇文章将详细对比这三种数据存储方式,结合其工作原理、性能特点和实际使用场景,帮助开发者写出更高效的智能合约。 1. 概述 类型 描述 持久性 Gas 成本 常见用途 S
阅读全文
摘要:列出 OpenZeppelin 的 ERC20 合约中主要的内部和公共方法: 主要内部方法(以_开头): solidity 复制 // 内部方法(合约内部和继承的合约可以使用) _mint(address account, uint256 amount) // 铸造代币 _burn(address
阅读全文
摘要:在区块链智能合约的世界里,安全性是至关重要的,尤其是当涉及到资金转移时。一个常见的安全问题是重入攻击(Reentrancy Attack)。这种攻击允许攻击者在合约执行过程中反复调用合约,可能导致意外的资金丧失或状态不一致。幸运的是,我们可以通过使用 nonReentrant 修饰符来有效防止这种攻
阅读全文
摘要:1. 什么是 Restake? Restake 是一种机制,允许用户将其质押收益自动再质押,从而最大化其投资回报。质押通常涉及将资产锁定在区块链网络中,以获取区块奖励,而 Restake 机制通过自动化再质押过程,使得用户能够持续增加其质押资产,而无需手动操作。 2. Restake 的工作原理 R
阅读全文
摘要:LST(Liquid Staking Token)简介与合约实现 1. 什么是 LST? LST,即 Liquid Staking Token,是一种新兴的数字资产类型,旨在解决传统质押(Staking)中的流动性问题。在传统的质押机制中,用户将其代币锁定在区块链网络中,以获得区块奖励,但在锁定期间
阅读全文
摘要:如何实现 NFT 合约 1. 什么是 NFT 和 NFT 合约 NFT(Non-Fungible Token,非同质化代币)是一种具有唯一性、不可互换的数字资产,通常用于区块链上实现资产的认证与交易。NFT 合约通过智能合约来管理资产的所有权、交易和访问权限,广泛应用于艺术品、游戏道具和虚拟地产等领
阅读全文
摘要:需要参与签名的solidity结构是这样的: // 定义一个结构体来存储代币地址和数量 struct ReceiverInfo { address tokenAddress; // 代币合约地址 uint256 amount; // 要分发的代币数量 } function distributeHas
阅读全文
摘要:1.solidity实现: 1.1.引入eip712合约: // SPDX-License-Identifier: MIT pragma solidity ^ 0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a
阅读全文
摘要:直接上代码: // SPDX-License-Identifier: MIT pragma solidity ^ 0.8.0; abstract contract EIP712 { event LogValues(bytes32 domainSeparator, bytes32 structHash
阅读全文
摘要:探索 Solidity 中的各种修饰符 在智能合约开发中,确保代码的安全性、可读性和高效性至关重要。Solidity 作为以太坊上最广泛使用的编程语言,提供了一系列的修饰符来帮助开发者实现这些目标。本文将深入探讨 Solidity 中的各种修饰符,包括可见性修饰符、状态可变性修饰符以及自定义修饰符,
阅读全文
摘要:在智能合约开发中,代码的可读性和安全性至关重要。Solidity 作为以太坊上最常用的编程语言,为开发者提供了一种强大的工具——修饰器(modifiers)。修饰器可以在函数调用前后执行特定的代码,简化逻辑并增强合约的安全性。本文将深入探讨修饰器的概念、定义及其在实际开发中的应用。 什么是修饰器(M
阅读全文
摘要:在智能合约开发中,尤其是涉及到 ERC-20 代币交互时,开发者常常需要将一个地址类型转换为 IERC20 接口类型。这样做的目的是为了调用接口中的函数,如 transfer 和 approve。本文将详细讲解这一过程,并简要介绍相关的背景知识。 什么是 ERC-20 和 IERC20? ERC-2
阅读全文
摘要:在 Solidity 中,calldata 是一种数据位置标识符,用于指定函数参数的存储位置。calldata 特别适用于函数的外部调用参数,并且是只读的。以下是对 Solidity 中数据位置的一些说明: storage: 用于状态变量,数据持久存储在区块链上。修改状态变量会消耗gas。 memo
阅读全文
摘要:1.Delegatecall 简介 1.1.什么是 delegatecall ? delegatecall() 是 Solidity 中的一个方法,用于从一个原始合约中调用目标合约中的一个函数。然而,与其他方法不同的是,当使用.delegatecall()在目标合约中执行函数时,上下文从原始合约中传
阅读全文