随笔分类 - solidity
合约编程语言
摘要:前言 在智能合约开发中,我们经常会看到类似 变量名_slot 这样的神秘标识符,它与我们声明的状态变量有什么关系呢?本文将深入探讨 Solidity 的存储机制。 什么是 Storage Slot? 在 EVM(以太坊虚拟机)中,智能合约的持久化数据存储在一个键值存储系统中。 理论地址空间 vs 实
阅读全文
摘要:我来为你写一篇关于 bytecode 和 deployedBytecode 的博客文章: 深入理解 Solidity 中的 bytecode 和 deployedBytecode 引言 在以太坊和 BSC 等区块链生态中,智能合约的部署和执行涉及两个重要的概念:bytecode 和 deployed
阅读全文
摘要:深入理解状态变量的真实权限边界 引言 在 Solidity 开发中,我们常看到这样的代码: solidity uint256 public turnLength; // 声明为 public 变量 许多开发者误以为 public 意味着“任何人都可修改”,甚至认为持有合约地址即可随意操控它。这是智能
阅读全文
摘要:在 Solidity 智能合约开发中,block 对象是开发者与区块链交互的核心窗口。它提供了当前区块的链上环境信息,这些数据由以太坊节点在交易执行时动态注入,是构建去中心化应用的基石。本文将深入解析 block 的奥秘,并探讨实际应用场景。 一、block 对象全景图:区块链的身份证 当合约被执行
阅读全文
摘要:在搭建 自定义以太坊兼容公链 时,开发者通常会面临一个关键选择:直接 Fork 原版 Go-Ethereum (Geth),还是 基于 Binance Smart Chain (BSC) 的优化版 Geth? 本文将从 共识机制、性能、开发难度、适用场景 等方面对比两者的差异,帮助你做出最佳选择。
阅读全文
摘要:基本原则: 事件日志会被存储在触发该事件的合约地址下 事件日志与合约地址是强绑定的关系 日志会永久存储在区块链上,但与状态存储(storage)分开 跨合约调用场景(A调用B): // 场景示例 Safe(代理钱包A) -> execTransaction -> VaultFactory(B) ->
阅读全文
摘要:在智能合约开发中,override 关键字与 virtual 形成完美搭档,共同构建了 Solidity 安全可靠的继承体系。如果说 virtual 是"允许扩展"的绿灯,那么 override 就是"安全重写"的质量保证书。 一、override 的核心使命 override 关键字明确表示当前函
阅读全文
摘要:在智能合约开发中,我们常常需要构建既有稳定核心功能,又能灵活扩展的合约体系。Solidity 的 virtual 关键字正是实现这一目标的魔法钥匙。本文将用最清晰的方式带你掌握这个重要特性。 一、初识 virtual:合约的"可扩展开关" 想象你设计了一个电子设备,有些部件允许用户自行升级,有些则必
阅读全文
摘要:引言 Uniswap V2 作为去中心化金融(DeFi)领域的里程碑协议,其简洁而精妙的设计一直值得深入研究。本文将结合两个核心问题,全面解析 Uniswap V2 的工作原理和设计哲学: Uniswap V2 的基本流程是怎样的? 为什么 swap 函数要设计成输出导向(out-first)? 一
阅读全文
摘要:概述 在以太坊生态中,EOA(Externally Owned Account)和Safe代理钱包是两种常见的账户类型。它们在交易nonce的处理机制上有着本质的区别,这直接影响了它们在并行执行交易时的行为。 EOA的nonce机制 1. 网络协议层面的实现 EOA的nonce是由以太坊网络协议直接
阅读全文
摘要:介绍 在Solidity智能合约开发中,函数返回值是一个重要的概念,但它的用法与其他编程语言有一些不同。本文将详细介绍Solidity中返回值的各种用法和最佳实践。 返回值的声明方式 Solidity中有两种声明返回值的方式: 未命名返回值 function getValue() public pu
阅读全文
摘要:在使用 Solidity 开发合约时,我们通常会使用 constructor(构造函数)来初始化合约的状态。然而,在开发**可升级合约(Upgradeable Contracts)**时,这种做法就不再适用了。 本文将介绍一种替代构造函数的初始化方法 —— initialize() 函数,并结合代码
阅读全文
摘要:在 Solidity 中,构造函数(constructor)是一种特殊函数,只在合约部署时执行一次,常用于设置初始状态。而当一个合约继承了父合约之后,构造函数也承担了初始化父类的职责。 本文将介绍 Solidity 中如何在构造函数中初始化父类构造函数,并结合示例帮助理解。 🧱 基础语法:构造函数
阅读全文
摘要:在多签合约(如 Gnosis Safe)中,初始化时设置多个 Owner 是非常常见的操作。每添加一个 Owner 都会消耗一定的 Gas。如果一次设置 50 个 Owner,我们可以大致估算一下总的 Gas 消耗及其在不同链上的费用对比。 📐 Gas 消耗预估 根据实际测试,设置一个 Owner
阅读全文
摘要:在 Solidity 的开发中,调试往往是最令人头疼的部分。由于合约执行失败会导致交易回滚,常规的日志手段(如 emit 事件)无法保留失败前的状态。而 Hardhat 提供的 console.sol 则是一个非常实用的调试工具,可以像传统编程语言中的 console.log 一样输出中间变量,极大
阅读全文
摘要:在以太坊区块链网络中,nonce机制是交易处理的核心部分,它确保交易的顺序性和防止重放攻击。本文将深入解析nonce的工作原理、更新机制,以及在实际开发中如何正确管理nonce,特别是在出块较慢的网络环境下。 一、Nonce的两种类型 以太坊生态系统中存在两种不同的nonce概念: 1. 链上账户n
阅读全文
摘要:引言 在区块链生态系统中,多链部署已成为常态。然而,跨链部署合约时面临的一个关键挑战是如何确保合约地址在不同链上保持一致。多链通用工厂合约(Universal Factory Contract)正是为解决这一问题而生的创新方案。 核心原理 多链通用工厂合约的核心在于利用 CREATE2 操作码和固定
阅读全文
摘要:引言 在 Solidity 智能合约开发中,事件(Event)是合约与外部世界(如前端应用)通信的重要机制。而 indexed关键字则是事件参数的一个重要修饰符,它显著影响了事件的检索效率和可用性。本文将深入探讨 indexed 的作用、原理以及实际应用场景。 一、Solidity 事件基础 Sol
阅读全文
摘要:什么是预检函数? 预检函数(View Function)是智能合约中的只读函数,它不会修改区块链状态,只用于查询数据。这种函数不需要支付 gas 费用,也不需要等待区块确认,可以立即得到结果。 预检函数的特点 不修改状态 不需要支付 gas 可以立即返回结果 适合用于数据查询 简单示例 让我们通过一
阅读全文
摘要:一、基础角色控制合约 1. 最简单的管理员权限控制 solidity 复制 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract BasicRoleControl { address public admin; mappin
阅读全文

浙公网安备 33010602011771号