随笔分类 -  solidity

合约编程语言
摘要:一、结构体核心概念解析 1.1 结构体的双重特性 Solidity中的结构体具有独特的双重特性: 编译期类型定义:不占用存储空间,仅作为数据蓝图 运行时实例对象:实例化后按规则占用存储槽 solidity 复制 // 类型定义(不占用存储) struct Person { string name; 阅读全文
posted @ 2025-03-25 17:32 若-飞 阅读(190) 评论(0) 推荐(0)
摘要:引言 在区块链开发中,代理合约模式是一种流行的设计模式,允许我们升级智能合约的逻辑而不改变其地址和存储。本文将深入解析代理合约的核心原理:代理只借用逻辑合约的代码,而存储数据始终保留在代理合约自己的存储空间中。 代理合约的核心机制:delegatecall 在Solidity中,delegateca 阅读全文
posted @ 2025-03-24 13:47 若-飞 阅读(167) 评论(0) 推荐(0)
摘要:在 Solidity 中,可以编写同名但参数不同的函数,这称为函数重载(Function Overloading)。但当你通过 Node.js 或其他外部工具调用合约时,可能会出现 ambiguous function description 错误,因为调用方无法自动确定要调用哪个重载函数。以下是解 阅读全文
posted @ 2025-03-20 09:10 若-飞 阅读(76) 评论(0) 推荐(0)
摘要:在 Solidity 中,交易确实是原子性的(要么全部成功,要么全部回滚),但这依赖于开发者正确的代码实现。以下是针对「ERC20 扣款成功但 ERC721 转移失败」问题的详细分析和解决方案: 一、问题本质分析 1. 原子性保障机制 区块链特性:以太坊交易天然具有原子性,若交易中任何操作失败(触发 阅读全文
posted @ 2025-03-19 10:45 若-飞 阅读(130) 评论(0) 推荐(0)
摘要:在 Solidity 中确保唯一性和防止重入攻击是智能合约安全的重要课题。以下是几种关键机制的详细说明和代码示例: 一、确保唯一性机制 1. Nonce 计数器 solidity 复制 mapping(address => uint256) public nonces; function execu 阅读全文
posted @ 2025-03-19 10:30 若-飞 阅读(117) 评论(0) 推荐(0)
摘要:双花攻击是指同一笔数字货币在区块链网络中被多次花费或使用的攻击行为。这是数字货币(特别是像比特币这样的去中心化系统)面临的一大挑战,因为在没有中央权威机构的情况下,无法依赖传统的银行来检查是否已经消费了相同的金额。 举个简单的例子: 假设Alice想用比特币向Bob支付100币,并且通过网络广播这个 阅读全文
posted @ 2025-03-17 11:32 若-飞 阅读(860) 评论(0) 推荐(0)
摘要:在智能合约开发中,理解Solidity的存储模型对于编写高效合约至关重要。今天,我们将探索Solidity中结构体的存储机制,并与传统C++语言进行对比,揭示区块链存储与传统程序设计的本质区别。 Solidity中的结构体:类型定义而非数据实体 首先,让我们重新审视Counters库中的结构体定义: 阅读全文
posted @ 2025-03-17 11:12 若-飞 阅读(67) 评论(0) 推荐(0)
摘要:前言 以太坊智能合约的核心特性之一是其状态存储能力。然而,这种存储并非随意实现,而是遵循着一套精确的规则 - 我们称之为"存储槽"机制。本文将深入探讨存储槽的工作原理、优化技术以及在实际合约中的应用。 什么是存储槽? 以太坊虚拟机(EVM)中的合约存储本质上是一个巨大的键值映射:mapping(ui 阅读全文
posted @ 2025-03-17 09:33 若-飞 阅读(255) 评论(0) 推荐(0)
摘要:共同点 基础目标相同 两种模式都旨在实现合约的可升级性 都遵循代理模式的基本原理:将存储与逻辑分离 存储标准统一 都使用EIP-1967定义的存储槽存储实现地址: // EIP-1967定义的存储槽 bytes32 private constant _IMPLEMENTATION_SLOT = 0x 阅读全文
posted @ 2025-03-14 10:24 若-飞 阅读(136) 评论(0) 推荐(0)
摘要:1. 代理模式简介 在以太坊上,智能合约一旦部署就无法修改。这种不可变性虽然提供了安全保障,但在实际应用中也带来了挑战,尤其是当我们需要修复bug或升级功能时。代理模式应运而生,它允许我们将合约逻辑与数据存储分离,实现合约的可升级性。 透明代理(Transparent Proxy)是最流行的代理模式 阅读全文
posted @ 2025-03-14 10:02 若-飞 阅读(312) 评论(0) 推荐(0)
摘要:在可升级智能合约的设计中,UUPS(Universal Upgradeable Proxy Standard) 是一种高效且安全的升级模式。与 透明代理(Transparent Proxy) 方案相比,UUPS 代理合约更加轻量级,减少了额外的存储消耗,同时逻辑合约本身控制升级权限,增强了安全性。本 阅读全文
posted @ 2025-03-10 18:45 若-飞 阅读(360) 评论(0) 推荐(0)
摘要:在以太坊和智能合约开发中,签名是验证信息的完整性和真实性的一个重要部分。它常用于证明消息来源的合法性,以及确保消息未被篡改。本文将深入介绍签名的结构,重点讲解如何解析签名中的 v、r 和 s 部分,并演示如何从签名中恢复签名者的地址。 1. 签名的基本结构 以太坊的签名遵循 ECDSA(椭圆曲线数字 阅读全文
posted @ 2025-03-10 14:37 若-飞 阅读(285) 评论(0) 推荐(0)
摘要:1. internal 调用方式(不需要单独部署) internal 调用是最常见的方式,库函数在编译时直接嵌入到合约中,不会产生额外的 delegatecall 开销。 // 定义一个 MathUtils 库 library MathUtils { function add(uint256 a, 阅读全文
posted @ 2025-03-10 14:17 若-飞 阅读(141) 评论(0) 推荐(0)
摘要:1. 基本概念和功能 permit: EIP-2612 定义的机制,允许代币持有者通过签名来授权第三方(spender)消费一定数量的代币,而无需调用传统的 approve 函数。 使用离线签名签署授权,代币持有者可以授权某个 spender 在特定的截止日期前,代为消费一定额度的代币。 提供了 签 阅读全文
posted @ 2025-03-10 10:43 若-飞 阅读(182) 评论(0) 推荐(0)
摘要:在以太坊的 ERC20 代币标准中,代币持有者通常通过 approve 和 transferFrom 两个函数来实现授权和转账。随着 EIP-2612 的提出,permit 函数作为一种新的授权方式,利用了离线签名的机制,简化了交易流程并提高了效率。本文将详细对比 approve 和 transfe 阅读全文
posted @ 2025-03-10 10:38 若-飞 阅读(396) 评论(0) 推荐(0)
摘要:在 Solidity 的可升级合约(Upgradeable Contracts)中,存储槽(Storage Slots)管理至关重要。如果不正确管理存储槽,升级合约时可能会覆盖已有数据,导致数据损坏甚至合约不可用。因此,在升级合约时,我们需要合理规划存储布局,并通过 __gap 变量预留存储槽,以确 阅读全文
posted @ 2025-03-10 10:21 若-飞 阅读(156) 评论(0) 推荐(0)
摘要:在 Solidity 中,interface(接口)是一种定义合约标准的方式,主要用于抽象化合约方法,确保不同合约之间可以互操作。本文将介绍 interface 的作用、使用方式,并提供实际示例,帮助你理解其应用场景。 1. interface 的作用 在 Solidity 中,interface 阅读全文
posted @ 2025-03-10 09:55 若-飞 阅读(194) 评论(0) 推荐(0)
摘要:目的是发起ERC20合约转账, 以下是手动调用合约形式: // tokenTransfer3:可以运行,手动写代码的方式 async tokenTransfer3( safeAddress: string, tokenAddress: string, to: string, amount: stri 阅读全文
posted @ 2025-03-05 00:03 若-飞 阅读(43) 评论(0) 推荐(0)
摘要:1. 以太坊黄皮书中的交易结构 以太坊黄皮书定义了交易的核心结构。以下是相关部分的摘要: 交易格式(Transaction Format) 一个以太坊交易由以下字段组成: nonce: 交易序列号,用于防止重放攻击。 gasPrice: 每单位gas的价格(以wei为单位)。 gasLimit: 交 阅读全文
posted @ 2025-03-04 23:59 若-飞 阅读(163) 评论(0) 推荐(0)
摘要:在 Solidity 中,fallback 函数是一个特殊函数,主要用于处理两种情况: 合约接收到以太币时触发。 当调用一个合约中不存在的函数时触发。 为了更好地理解 fallback 函数的作用,我们将结合一个实际的代码实例——SafeProxy 合约来讲解它在智能合约中的应用。 什么是 Fall 阅读全文
posted @ 2025-03-04 22:54 若-飞 阅读(118) 评论(0) 推荐(0)