自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 收藏
  • 关注

原创 Uniswap v1、v2、v3 全面对比

Uniswap发展历程:从AMM雏形到专业做市工具 V1(2018)首创x*y=k模型,仅支持ETH-Token交易,验证AMM可行性但功能有限;V2(2020)实现任意Token交易,新增Flash Swap和预言机,成为DeFi基础设施;V3(2021)创新性引入集中流动性机制,允许LP自选价格区间(资金效率提升4000倍),采用多费率池和NFT仓位,大幅提升资本效率但增加了操作复杂度。三代版本呈现"从简到繁、从粗到精"的演进路径,逐步从通用协议转向专业化做市工具。

2025-09-12 15:49:09 799

原创 区块链里的 “信标” 是啥?

摘要: 信标(Beacon)是区块链中的“中央公告牌”,用于统一管理多个代理合约的实现地址。类比连锁超市,信标相当于总部公告牌,所有分店(代理合约)通过查询信标获取最新系统版本,实现一键升级。其核心优势包括:1)集中升级,无需逐个修改代理合约;2)权限统一管理;3)确保系统一致性。适用于多代理场景(如NFT钱包)、复杂DeFi协议或需频繁升级的合约。信标通过简化升级流程和降低维护成本,成为区块链开发中的高效工具。

2025-09-08 17:07:02 393

原创 Solidity 结构体优化,大幅降低 Gas 消耗

优化以太坊智能合约结构体设计可大幅节省Gas费用。核心策略包括:1.按字段大小排序(小字段优先),使存储槽利用率最大化;2.用uint256位操作合并多个小字段;3.避免动态类型,改用固定长度;4.临时结构体使用packed修饰;5.按功能拆分大结构体。通过合理排序和压缩,可减少30-60%的Gas消耗,高频交互合约长期节省显著。关键是将相关小字段组合填充32字节存储槽,避免空间浪费。

2025-09-04 15:52:23 621

原创 如何在 Solidity 中编写高效的 gas 循环?

摘要:Solidity智能合约中优化gas循环的关键技巧包括:1)限制循环迭代次数;2)使用unchecked块处理计数器;3)缓存存储变量到内存;4)避免循环内频繁存储写入;5)减少循环内外部合约调用;6)优先使用映射而非数组;7)考虑小循环展开。核心原则是减少存储操作、利用内存缓存、限制迭代次数,并通过工具分析gas消耗选择最佳实现方案。这些优化能显著降低交易成本并避免gas限制问题。

2025-09-03 11:11:14 271

原创 Solidity 转账三函数:call、transfer、send 精简指南

摘要: ETH转账方法transfer、send、call的核心差异: 错误处理:transfer失败回滚,send返回false需手动检查,call返回状态+数据,灵活性高但需防重入。 Gas限制:transfer/send固定2300,易失败;call无限制,支持复杂操作。 功能:call可同时调用合约函数,适合DeFi;前两者仅转账。 2025推荐:优先call(需防重入),简单场景用transfer,避免send。关键:查返回值、防重入、多测试。 (字数:150)

2025-09-03 10:53:12 385

原创 fallback 和 receive 到底咋区分?啥时候该用哪个?

要分清 fallback 和 receive,关键看两个维度:1. 是否给合约转 ETH;2. 是否携带函数调用数据(比如调用某个函数时,会传函数名、参数等数据,单纯转 ETH 没有这些数据)

2025-09-03 10:22:59 1058

原创 Slither 审计自己写的智能合约

Slither 是一款非常好用的自动化审计工具,可以帮你快速找出大部分常见风险。这篇文章专门讲 “只审计自己写的合约” 怎么做,流程简单、注意事项清楚,帮你高效定位风险。

2025-08-22 15:54:42 783

原创 SQL LIMIT 10000000, 10和 LIMIT 10哪个更快?

摘要:LIMIT分页查询的性能瓶颈主要在于偏移量参数,当偏移量较大时(如LIMIT 10000000,10),数据库需要先扫描并丢弃前1000万条记录,导致查询变慢。相比之下,LIMIT 10只需返回前10条记录,速度更快。优化大偏移量分页的方法是用主键范围查询替代偏移量(如WHERE id>10000000 LIMIT 10),直接通过索引定位数据。这种方案适合顺序翻页,但不适合直接跳转大页码的场景,且需注意主键连续性和索引优化问题。

2025-08-19 10:00:53 492

原创 智能合约里的 “拒绝服务“ 攻击:让你的合约变成 “死机的手机“

智能合约DoS攻击防护指南 摘要:智能合约可能遭受拒绝服务(DoS)攻击,导致核心功能瘫痪。常见攻击方式包括:1)利用批量操作强制失败;2)通过gas炸弹耗尽资源;3)控制关键权限。防范措施:1)拆分批量操作为小批次;2)限制计算复杂度,避免遍历长数组;3)采用多签钱包或DAO治理替代单一管理员。核心原则是避免单点依赖,控制操作复杂度,为系统预留后路,确保合约在部分功能受阻时仍可运行。

2025-08-17 17:30:56 759

原创 重入攻击:区块链世界里的「先上车后买票」骗局

重入攻击是智能合约安全的主要威胁,其核心是利用状态更新滞后进行重复调用套利。本文分析了三种典型重入攻击:1)单函数重入,通过回调函数反复调用同一取款函数;2)跨函数重入,利用关联函数间接实现重复操作;3)跨合约重入,通过多个合约的信任关系形成连锁攻击。防御方案包括:1)采用"检查-生效-交互"模式,先更新状态再转账;2)使用ReentrancyGuard锁机制;3)限制外部调用gas。开发者应遵循"先更新后交互"原则,并善用安全工具,以有效防范重入风险。

2025-08-17 17:08:23 877

原创 合约低级调用三兄弟:call、delegatecall、staticcall

摘要:以太坊提供三种低级调用方式:call(灵活调用合约函数及转账)、delegatecall(借用外部代码但保持自身数据)和staticcall(仅查询不修改数据)。call适合通用调用和转账,delegatecall用于合约升级,staticcall用于安全查询。使用需谨慎,需手动处理错误和安全检查,避免资产损失。高级调用更安全,仅在特殊需求时使用低级调用。

2025-08-16 18:20:02 915

原创 一文看懂 ethers.js:区块链开发

ethers.js 就是一个 JavaScript 库(可以理解为一堆写好的工具函数),专门用来帮你和以太坊(以及类似的区块链,比如 BSC、Polygon 这些)打交道。

2025-08-16 17:53:35 575

原创 如何将 Vue 前端、Hardhat 合约和 Node.js 后端集成到一个项目中

在区块链开发中,DApp(去中心化应用)的开发往往涉及到多个层次:前端、合约和后端。今天我们将演示如何将 Vue 前端、Hardhat 合约 和 Node.js 后端 放在一个项目中,来打造一个完整的区块链应用。

2025-08-08 10:56:03 412

原创 网页中 MetaMask 钱包钱包交互核心功能详解

下面将详细讲解 MetaMask 钱包交互的四个核心功能,并提供独立的代码实现。

2025-08-07 14:14:59 441

原创 PyTorch topk() 用法详解:取最大值

torch.topk(input, k) 返回张量中最大的 k 个元素以及它们在原张量中的 索引。

2025-06-24 17:19:43 475

原创 深入浅出 iOS 对象模型:isa 指针 与 Swift Metadata

在iOS开发中,isa指针和Metadata是两个关键概念,分别源自Objective-C和Swift的对象系统。isa指针是Objective-C对象的“身份证”,指向其类对象,支持动态消息发送和运行时方法调度。Swift的Metadata则描述了类型的详细信息,如类名、方法表等,支持静态和动态方法调度。两者在内存效率和方法调用上各有优势,isa指针在64位系统中通过合并结构节省内存,而Metadata通过只读共享减少全局开销。在混合开发中,继承自NSObject的Swift类会同时拥有isa指针和Met

2025-05-12 16:15:12 1047

原创 哈希表扩容怎么处理新插入的值?Swift 是怎么做的?

如果在扩容的过程中,又有新的值要插入怎么办?1. 等扩容完再插入 2. 扩容和插入同时进行(并发)3. 渐进式扩容

2025-05-09 15:11:05 926

原创 SwiftData 用泛型查任意表

不用@Query,自己封装了一个泛型查询函数能查任何表、加任何条件、按任何顺序封装成服务类,解耦 UI 和数据层最重要的是,写得开心,用得自由SwiftData 是个不错的工具,但你没必要被它框死。只要你能掌握它的底层逻辑,就可以根据自己的方式来使用它,哪怕是“非主流”的方式。

2025-05-08 16:31:51 367

原创 SwiftData 数据持久化解决方案

SwiftData 是苹果在 WWDC23 上推出的全新数据持久化框架,它构建在 Core Data 之上,但提供了更加 Swift 友好的 API。SwiftData 旨在简化数据模型的创建和管理,让开发者能够以更少的代码实现强大的数据持久化功能。@Model@Model宏会自动为你的类添加持久化能力,无需手动处理 Core Data 的复杂设置。SwiftData 为 Swift 开发者提供了一种更现代、更简洁的数据持久化方案。

2025-05-08 16:13:48 474

原创 模板模式 VS 建造者模式

模板模式和建造者模式是两种不同的设计模式,下面从定义、结构、应用场景等方面介绍它们的区别,并给出 Python 示例代码。

2025-05-06 17:08:42 510

原创 状态模式 VS 策略模式

在软件开发的世界里,设计模式如同工匠手中的精良工具,能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来,我们会详细剖析它们的区别、适用场景,并给出 Python 代码示例

2025-05-06 16:10:36 789

原创 SwiftUI 音频播放器:AVPlayer 在线播放 + 播放进度条 + 音量调节 + 后台播放

在 iOS 应用中,如果你想实现一个简洁优雅的音乐播放器组件,Apple 的 AVPlayer 是一个非常可靠的工具。本文将带你用 SwiftUI 构建一个支持:

2025-04-21 16:32:38 4987

原创 使用 Google ML Kit 实现图片文字识别(提取美国驾照信息)

Google ML Kit 是一个现代、功能强大、跨平台的机器学习 SDK。在这篇文章中,我们将使用 ML Kit 在 Android 应用中识别图片文字,以提取美国驾照上的关键信息:DL(驾照号) 和 EXP(有效日期)。

2025-04-08 17:40:22 451

原创 使用 SwiftUI 和 Vision 框架识别美国驾照信息

我们将使用 SwiftUI 结合 Vision 框架,实现从图片中提取文字

2025-04-08 16:54:22 426

原创 Swift 并发任务的协作式取消

在 Swift 并发(Swift Concurrency)中,任务(Task)不会被强行终止,而是采用**协作式取消(cooperative cancellation)**机制。这意味着任务会被标记为“已取消”,但是否真正停止执行,取决于任务本身的逻辑处理。

2025-03-21 10:59:28 588

原创 Vue3中集成Chart.js实现柱状图

我们将介绍如何在Vue 3项目中集成Chart.js并使用其功能绘制一个柱状图。Chart.js是一个流行的开源JavaScript库,可以帮助我们轻松创建美观的图表。

2025-03-20 15:19:16 813

原创 JS中Object与Map的区别

Object 和 Map 均可用来存储键值对,但它们存在诸多不同之处。下面为你详细介绍两者的区别并给出示例代码。

2025-03-19 13:58:22 228

原创 JS中let和var变量区别

作用域:var 是函数作用域,let 是块级作用域。提升:var 会被提升并初始化为 undefined,let 也会提升,但在声明前访问会导致错误。重声明:var 允许在同一作用域内重复声明,let 不允许。循环中的行为:在 for 循环中,使用 let 会创建一个新的作用域,而 var 只会有一个作用域。

2025-02-28 10:09:09 456

原创 Android CustomTextField

在 Compose 中开发用户界面时,需要处理输入框和键盘的交互,例如在键盘弹出时调整布局位置,避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能

2025-01-15 17:30:32 673

原创 SwiftUI 中的 navigationBarTitleDisplayMode 使用区别:.automatic、.inline 和 .large

SwiftUI 提供了navigationBarTitleDisplayMode修饰符来控制导航栏标题的显示模式。这三种模式(.automatic、.inline和.large)主要决定了标题的外观和布局方式,本文将介绍它们的使用场景和区别

2025-01-13 14:55:43 537

原创 SwiftUI 导航:通过 NavigationStack 和 NavigationDestination 实现路径管理

在 SwiftUI 开发中,实现灵活且功能丰富的导航系统是构建优秀用户界面的关键。本文将深入解析一段 SwiftUI 代码,展示如何利用NavigationStack和枚举来实现多界面导航,并在不同界面之间传递参数

2025-01-11 17:22:06 736

原创 Xcode 正则表达式实现查找替换

在软件开发过程中,查找和替换文本是一项常见的任务。正则表达式(Regular Expressions)是一种强大的工具,可以帮助我们在复杂的文本中进行精确的匹配和替换。Xcode 作为一款流行的开发工具,提供了对正则表达式的支持。本文将详细介绍如何在 Xcode 中利用正则表达式实现查找替换功能。

2025-01-11 14:42:42 1410

原创 Python 桌面时钟

学习如何使用 Python 的 tkinter 模块创建一个动态时钟。通过这个项目,你将熟悉 tkinter 的基本用法,掌握画布绘图和动态更新的技巧

2025-01-09 15:32:26 554

原创 Python 爬取 B 站视频弹幕

B 站的弹幕数据是通过视频的cid(弹幕 ID)来获取的。每个视频对应一个cid,而弹幕存储在一个 XML 文件中。只需要知道视频的cid,就能通过 API 获取对应的弹幕

2025-01-08 19:26:36 2695 10

原创 Python 用 PrettyTable 让你的数据展示更美观

PrettyTable是一个用于在 Python 中以表格形式展示数据的模块,提供简单易用的接口,可以轻松创建格式化的表格

2025-01-08 15:43:56 443

原创 深入理解 Python 线程:多线程编程的实践与技巧

在Python编程中,线程是一个强大的工具,它允许我们在程序中同时执行多个任务,从而提高程序的效率和响应性。本文将深入探讨Python线程的概念、使用方法以及在实际应用中需要注意的问题。

2025-01-07 18:01:29 502

原创 Python 协程:用 asyncio 和 Task 实现并发

Python的协程提供了一种高效处理异步任务的方式,使我们可以轻松实现并发编程。在实际开发中,asyncio 和 Task 是协程并发的核心工具。本文将介绍协程的基本概念,并通过代码示例演示如何使用 asyncio 和 Task 来实现并发。

2025-01-07 18:00:46 589

原创 Python 代理的使用:突破网络限制,提升数据获取效率

在当今数字化的世界中,网络数据的获取和处理变得越来越重要。在使用Python进行网络请求时,有时候我们会遇到网络限制、访问速度慢等问题。这时候,代理(Proxy)就成为了解决这些问题的有力工具。本文将详细介绍如何在Python中使用代理,让你的网络请求更加顺畅。

2025-01-07 15:17:53 569

原创 使用 Python 和 BeautifulSoup 进行网页数据抓取

网页数据抓取(WebScraping)是从网页上提取数据的技术。Python提供了许多库来完成这项任务,其中BeautifulSoup是一个非常流行且易用的选择。本文将介绍如何使用BeautifulSoup抓取网页数据,并提供详细的代码示例。

2025-01-07 14:51:29 304

原创 Python 与 Xpath 解析小说网站

try:resp.raise_for_status() # 检查请求是否成功,如果状态码不是200,引发异常print(f"网络请求错误: {e}")return ""这个函数url(要请求的网页地址)和headers(请求头信息)。在函数内部,使用方法发送 GET 请求获取网页内容,并通过with语句确保请求完成后资源能够正确关闭。用于检查请求是否成功,如果状态码不是 200,会引发异常,捕获异常后打印错误信息并返回空字符串。

2025-01-03 16:44:54 418

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除