- 博客(30)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 区块链中的密码学 —— 非对称加密
非对称加密使用一对密钥公钥(Public Key):可以公开,用于加密数据或验证签名私钥(Private Key):必须保密,用于解密数据或生成签名特点公钥和私钥是数学上相关联的,但无法从公钥反推出私钥(基于数学难题的单向性)适合在不安全的网络环境中安全交换信息对比对称加密特性对称加密非对称加密密钥数量单个密钥一对密钥(公钥 + 私钥)加解密速度快慢密钥分发需要安全信道公钥可公开应用场景数据批量加密身份认证、签名、密钥交换非对称加密在区块链中不仅是安全的基石。
2025-09-23 08:06:42
540
原创 区块链中的密码学 —— 概述
需求密码学技术示例数据完整性哈希函数比特币区块哈希身份认证非对称加密+数字签名以太坊交易签名隐私保护零知识证明去中心化信任共识算法+密码学验证PoW/PoS安全密钥管理阈值签名/多方计算跨链资产托管助记词生成密钥派生函数钱包助记词生成。
2025-09-23 08:05:25
482
原创 区块链基础知识 —— 交易的签名与验证过程(无数学公式)
步骤Alice(签名者)网络(验证者)1. 哈希用哈希函数处理原始消息,得到摘要。用相同的哈希函数处理收到的原始消息,得到自己的摘要_B。2. 加密/验证用私钥对摘要进行“盖章”(签名),得到签名。用Alice的公钥去验证收到的签名和摘要_B是否匹配。3. 发送/接收发送原始消息签名。接收并验证。根据结果接受或拒绝交易。为什么这个过程安全?私钥永不泄露:Alice的私钥(印章)从未被发送或暴露。签名只是证明她拥有私钥,而不透露私钥本身。完整性。
2025-09-23 08:03:43
1257
原创 以太坊交易类型详解(地表最全)
以太坊作为智能合约平台的领军者,其交易机制经历了持续的演进与创新。从最初的简单转账到如今支持复杂交互的多类型交易体系,每一次升级都代表着区块链技术在用户体验、安全性和功能性上的重大突破。通过这篇指南,您将掌握如何根据具体需求选择最优的交易类型,在保证安全性的同时最大化效率。无论您是开发DeFi协议、NFT平台还是钱包应用,对交易机制的深入理解都将成为您构建下一代区块链应用的重要基石。
2025-09-22 10:47:57
1674
原创 区块链钱包开发(二十一)—— 一次交易的全流程分析
本文将详细分析一次转账交易在钱包中是如何处理的,包括“创建交易→展示确认→用户确认→发布上链→确认落链”的端到端全流程分析。
2025-09-22 08:43:50
1209
原创 区块链钱包开发(二十)—— 前端框架和页面
源码: https://github.com/MetaMask/metamask-extension/tree/main/uiMetaMask UI端采用了分层架构设计,每一层都有明确的职责:ControllersServicesUtilssubmitRequestToBackgroundonNotificationsetBackgroundConnectionRedux StoreRoot ReducerMiddlewareMetamask DuckApp State DuckSend DuckSwaps
2025-09-22 08:43:37
883
原创 区块链钱包开发(十九)—— 构建账户控制器(AccountsController)
账户控制器是 MetaMask 中负责管理所有用户账户的核心组件。它充当了一个统一的账户管理层,将不同来源的账户(如 HD 钱包、简单钱包等)统一转换为标准的内部账户格式,并提供统一的接口进行管理。源码: https://github.com/MetaMask/core/blob/main/packages/accounts-controller/src/AccountsController.ts。
2025-09-22 08:41:04
1165
原创 区块链钱包开发(十八)—— 构建批准控制器(ApprovalController)
负责管理所有需要用户审批的请求。它提供了一个统一的接口来处理各种类型的审批流程,包括交易签名、权限授予、连接请求等。源码:https://github.com/MetaMask/core/blob/main/packages/approval-controller/src/ApprovalController.ts。
2025-09-22 08:40:20
824
原创 区块链钱包开发(十七)—— 构建密钥管理控制器(KeyringController)
是 MetaMask 生态系统的核心组件,负责管理用户身份和密钥,处理各种签名操作。它是连接用户私钥和区块链交互的桥梁,确保私钥的安全存储和正确使用。源码位置。
2025-09-21 21:10:06
619
原创 区块链钱包开发(十六)—— 构建网络控制器(NetworkController)
NetworkController 是 MetaMask 中负责管理多链网络连接的核心控制器,它提供了完整的网络管理功能,包括网络切换、RPC 端点管理、网络状态监控等。源码位置// 自定义URL: string[];// 备用URLname?: string;// 端点名称// 添加Polygon网络}],});// 切换到新添加的网络多网络管理: 支持 Infura 和自定义 RPC 端点网络切换: 无缝切换不同网络状态监控: 实时监控网络状态和可用性故障转移。
2025-09-21 21:09:27
689
原创 区块链钱包开发(十五)—— 构建交易控制器(TransactionController)
TransactionController 是 MetaMask 交易管理的核心模块之一,负责从用户发起交易到交易最终确认的完整生命周期管理。本章聚焦 TransactionController 的设计思想、状态机、主要流程、关键组件与工程实践,并通过示例代码与流程图把抽象逻辑落地为可复用实现思路。源码: https://link.juejin.cn/?TransactionController 的核心价值在于把复杂的交易生命周期(并发、替换、重试、跟踪)工程化为可管理的模块;成功的实现需要在。
2025-09-21 21:08:43
1151
原创 区块链钱包开发(十四)—— 构建NonceTracker
本节介绍钱包开发中管理交易 nonce 的关键工具 NonceTracker。在以太坊钱包开发中,正确分配和追踪 nonce 对于防止交易冲突、确保交易顺序和链上状态一致性至关重要。NonceTracker 正是为此而生,帮助开发者安全、高效地管理账户的 nonce。源码:https://github.com/MetaMask/nonce-tracker/blob/main/src/NonceTracker.ts。
2025-09-21 21:08:06
642
原创 区块链钱包开发(十三)—— 构建BlockTracker
我们这一节介绍下钱包开发中必不可少的工具。在钱包开发中,实时感知区块链状态变化(如新块产生)对于账户余额、交易状态等功能至关重要,BlockTracker 正是为此而生。
2025-09-21 21:07:20
1018
原创 区块链钱包开发(十二)—— 前后端状态同步机制
我们希望所有前端操作(例如账户或网络的切换)引起的状态变化都可以同步到后端以及所有打开的页面(例如同时打开了popup和全屏页,在popup上的操作引起的变化要实时同步到全屏页)。同时我们也希望所有的控制器内部状态的主动变化例如账户余额,gas费等,都可以在UI界面实时同步显示。我们这一节将讨论如何实现这一前后端双向状态同步机制。
2025-09-20 22:41:26
931
原创 区块链钱包开发(十)—— 构建主控制器metamask-controller.js
metamask-controller.js可以说是钱包中最重要的同时也是最复杂的脚本,它就像大脑里的中枢神经,负责管理整个钱包的核心业务逻辑和状态。这个文件实现了一个庞大的 MetamaskController 类,整合了账户管理、网络切换、交易处理、权限控制、硬件钱包支持、通知、钓鱼检测等所有核心功能,并对外暴露统一的 API 和事件流。所有前端页面、内容脚本、DApp 以及后台服务的交互,最终都要经过这个控制器。
2025-09-20 22:40:00
1188
原创 区块链钱包开发(九)—— 构建后台主服务background.js
连接监听器会根据不同来源(内部页面、钓鱼警告、DApp、营销页面)分流到不同的通信通道。初始化主控制器(metamask-controller.js)。下章我们会深入讲讲主控制器 metamask-controller.js,带你看看钱包的“中枢神经”到底是怎么运作的。
2025-09-20 22:39:15
1250
原创 区块链钱包开发(八)—— 创建内容脚本contentscript.js
值得注意的是我们之前讲的是这些文件在service worker后台会被加载,这里在内容脚本又被加载一遍,因为content scripts和service worker的运行环境是隔离的,我们需要保证它们各自的执行环境都是安全的。它和上面的contentscript脚本的区别是运行环境不一样,inpage.js运行在和网页相同的上下文环境,而contentscript.js运行在单独的隔离环境。从 BFCache 恢复的页面,之前的流连接可能已经断开,扩展后台可能已经清理了相关连接。其实就是禁用控制台。
2025-09-20 22:38:18
800
原创 区块链钱包开发(七)—— 创建注入到网页的Provider
Provider是一个注入到网页上下文的对象,通过它可以建立网页DAPP和钱包之间的通信桥梁。它实现了EIP-1193标准接口,允许网页应用通过对象与区块链交互,包括发送交易、签名消息、读取区块链数据等。实现EIP-1193标准建立和钱包的通信如何把provider注入到页面。
2025-09-19 20:10:54
788
原创 区块链钱包开发(六)—— 构建各个控制器间的通信框架
模块化: 每个控制器专注于一个功能领域可组合: 控制器可以灵活组合成更大的应用状态类型安全: 利用TypeScript的高级类型系统确保通信安全权限隔离: 精细控制哪些控制器可以访问哪些功能状态管理: 提供不可变状态更新和状态变更通知这种架构使MetaMask能够构建一个复杂但可维护的钱包应用,同时保持高度的安全性和可扩展性。
2025-09-19 19:48:01
744
原创 区块链钱包开发(五)—— 构建json RPC框架
在 MetaMask 的实现中,JSON RPC 框架通过中间件机制来处理请求和响应,支持多种以太坊(后面也将支持 Solana 和 BTC)相关的操作,如账户管理、交易发送和事件订阅等。中间件可以在请求处理的不同阶段插入自定义逻辑,从而实现功能扩展和错误处理。通过这种方式,开发者可以灵活地构建和管理与以太坊区块链的交互。
2025-09-19 19:28:30
626
原创 区块链钱包开发(四.2)—— stream通信框架的使用
上一节我们介绍了钱包中主要的stream通信组件,这一节我们看他们具体是如何在钱包通信模块大显身手的。本章涉及到的源码文件地址:本章有一定的复杂性,需要对照源码去理解,如果还是不理解可以参考对应的视频讲解。这其实还只是请求响应流的传递过程,实际中间还包括很多RPC中间件的处理过程,控制器间的通信过程,元数据的存取过程,前后端的状态实时同步等等,可见一个好的钱包框架是非常复杂的,不过不用担心,我们后面会一一详细讲解。
2025-09-19 19:25:44
600
原创 区块链钱包开发(三)—— 钱包的初始化(入口文件加载)
为了使service worker一直正常运行,我们在background.js中通过每隔两秒触发事件的方式保活,如果出现意外情况我们可以通过判断self.serviceWorker的状态是否是activated复活service worker,如果这里意外没有触发复活,我们通过监听chrome.runtime.onMessage事件重新触发复活。
2025-09-19 19:23:39
736
原创 区块链钱包开发(四.1)—— 搭建stream风格的通信框架
在前面的章节中我们讲过浏览器插件中各个组件(网页,contentscript,background)之间的通信方法(window.postMessage/chrome.runtime.connect)Metamask并没有直接使用这些原生通信API,而是把API使用Stream统一进行封装,这样可以提升可维护性,内部还实现了握手,多路复用等机制,提高安全性。MetaMask的流式通信架构是其安全、可扩展设计的核心组成部分。统一抽象层。
2025-09-18 15:39:07
524
原创 区块链钱包开发(二)—— 创建manifest文件
主要针对Metamask的扩展程序snap做权限限制,这里不做讲解。以下是 Chrome 扩展中。只允许加载扩展包内的脚本(如。
2025-09-18 15:32:18
181
原创 区块链钱包开发(一)—— 浏览器插件开发
行业标准Chrome 浏览器占据全球浏览器市场 65% 以上的份额(2024年统计)2024年1月起,Chrome 应用商店已全面下架所有 Manifest V2 插件,仅接受 MV3 版本上架学习聚焦本教程针对区块链钱包开发场景,插件作为载体只需掌握核心功能:通信相关存储相关基础组件(content-script,service worker,popup等)延伸学习Chrome插件开发全攻略。
2025-09-18 15:31:00
1189
原创 区块链钱包开发(零)—— 前言
本系列教程是以浏览器插件的形式开发去中心化钱包,文章主要参考。本系列教程一共大概30章,每周更新2-3章。保留钱包最关键的框架和功能实现。
2025-09-18 15:22:00
172
原创 关于Greenplum中索引失效的记录
关于Greenplum中索引失效的记录使用jdbc在Greenplum数据库某个列存储空表中不断批量添加数据(一次添加多条数据),完成后在bigint类型的列上添加btree索引,执行查询sql(比大小),查看执行计划,发现没有走索引,只有等于的条件下才会走索引,这显然是不合理的。经过大量测试发现,如果一直一次添加多条这样写入时只有等于的条件下才会走索引,而如果第一次添加数据只添加一条,然后在批...
2019-01-15 11:07:20
1589
1
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅