Solana中的程序派生地址(PDAs):是什么,为什么,以及如何?
程序派生地址 (PDA) 在 Solana 中的应用:什么、为什么和如何?
在学习 Solana 时,你会经常听到关于 程序派生地址 (PDAs) 的讨论。它们就像这样 —— 强大、多功能,而且最重要的是,稍微被误解。如果你是一个开发者,试图理解它们,不用担心。我们将在本文中一起揭开 PDAs 的面纱。
在本文中,我将从基础开始解释 PDAs,假设你刚刚开始接触 Solana。因此,不需要任何先前的知识 —— 让我们开始吧。
什么是 PDA?
让我们简单开始。程序派生地址 (PDA) 是 Solana 中一种特殊的地址。我们都知道 Solana 使用账户存储所有数据,而 Solana 程序天生是无状态的。与普通账户(如你的钱包)不同,PDAs 没有私钥。相反,它们是 在运行时由程序生成和管理的。
可以把 PDAs 想象成 程序控制的储物柜:
• 每个储物柜 (PDA) 属于特定的程序。
• 只有程序可以访问、控制它,并使用它来存储数据。
• 没有人类可以直接为 PDA 签名交易,因为没有私钥可丢失或被盗。
PDAs 是通过以下方式生成的:
-  种子:输入数据(如用户 ID 或自定义字符串)。 
-  程序 ID:控制 PDA 的程序。 
-  哈希函数:确保 PDA 是唯一和安全的。 
重要提示 — PDA 是 确定性的:相同的输入将始终生成相同的 PDA。
PDA 与普通账户有什么不同?
你可能会想,“如果 PDA 只是一个地址,那它和我的钱包或其他账户有什么不同呢?”
下面是一个对比,让它更清晰:

普通账户是你用于钱包或与应用程序交互的账户。而 PDA 则是 程序拥有的账户 —— 只有程序可以与之交互。
PDA 何时以及如何使用?
以下是 PDA 常见的使用时机和方式:
1. 数据存储
程序通常使用 PDA 来存储数据。由于 PDA 是以可预测的方式生成的,因此程序不需要跟踪它们的地址。
它可以在需要时计算它们。
示例:一个游戏程序可以为每个玩家创建一个 PDA,以存储他们的分数、库存和成就。
2. 代币账户
许多程序使用 PDA 来管理代币账户。例如,质押程序创建 PDA 来表示你的质押,这直接与你的钱包相关,并且只有质押程序会对此拥有控制权。
为什么选择 PDA? 因为它们安全,并且完全由程序控制 —— 没有用户可以篡改它们。
3. 资金托管和多签名
PDA 非常适合临时持有资金(例如,在托管系统中)或管理多签名钱包。它们充当公正的账户,仅在满足程序规则时执行交易。
如何创建 PDA?
PDA 是使用 find_program_address 函数创建的。其工作原理如下:
-  提供 种子(如“user123”或 user_pubkey)。 
-  将其与 程序 ID 组合。 
-  该函数输出 PDA 和一个 增量种子(以避免冲突)。 
以下是 Rust 语言中的示例:
let (pda, bump_seed) = Pubkey::find_program_address(&[b"user-seed", user_pubkey.as_ref()],program_id
);
这将生成一个只有程序可以控制的 PDA。同样的输入对于 user-seed 和公钥将始终导致相同的 PDA —— 没有意外!
静态程序拥有账户的问题:
- 本质上是静态的:
— 程序拥有的账户通常在程序初始化时手动创建。
— 每个账户需要明确资助(以免租金)并存储。
- 每个用户或用例的唯一账户:
— 如果你的程序需要为许多用户提供单独的账户(例如,特定于用户的托管或质押账户),使用普通程序拥有账户将会要求:
— 为每个用户预生成许多账户。
— 手动跟踪每个账户地址。
— 在前期产生额外的费用(租金豁免)对每个账户。
- 灵活性有限:
使用普通程序拥有账户,程序无法根据用户输入或事件动态生成新地址。
这些限制使普通程序拥有账户不适合动态、可扩展的应用,如质押池、流动性协议或特定于用户的数据管理。
PDA 的安全隐患
PDA 是酷炫而强大的,但它们并非没有奇怪之处。如果使用不当,可能会导致严重的安全问题。让我们讨论一些需要注意的陷阱。
1. 不应将 PDA 用于授权
这是黄金法则。PDA 没有私钥,这意味着它们无法签署交易。如果你使用 PDA 来授权敏感操作(如转账),你就邀请了麻烦。攻击者可以轻松计算 PDA 并绕过你的检查。
注意:始终使用密码学签名进行用户授权。
2. 唯一的种子至关重要
在生成 PDA 时,确保你的种子是唯一的。如果两个 PDA 产生相同的种子,你将覆盖数据。这就像给两个人相同的储物柜钥匙 —— 混乱将随之而来。
3. 不要在 PDA 中存储敏感数据
PDA 是公共的。任何人都可以计算地址并查看里面的内容。如果你需要存储敏感数据,请先加密它。
结论
程序派生地址 (PDA) 是 Solana 的一个独特特性,为智能合约带来了确定性控制。它们灵活、强大且安全 —— 只要你负责任地使用它们。通过了解它们的工作原理和局限性,你可以在你的 Solana 程序中解锁全新的功能级别。
记住:PDA 没有私钥。因此,如果你在等待一个来签署某个东西,你将永远等下去,请,https://t.me/+_QibemQqIIg1OTY1
相关文章:
 
Solana中的程序派生地址(PDAs):是什么,为什么,以及如何?
程序派生地址 (PDA) 在 Solana 中的应用:什么、为什么和如何? 在学习 Solana 时,你会经常听到关于 程序派生地址 (PDAs) 的讨论。它们就像这样 —— 强大、多功能,而且最重要的是,稍微被误解。如果你是一个开发者&…...
 
利用FatJar彻底解决Jar包冲突(一)
利用FatJar彻底解决Jar包冲突 序FatJar的加载与隔离⼀、 FatJar概念⼆、FatJar的加载三、FatJar的隔离四、隔离机制验证五、 FatJar的定位六、 打包注意点 序 今天整理旧电脑里的资料,偶然翻到大概10年前实习时写的笔记,之前经常遇到Java依赖冲突的问题…...
Spring MVC笔记
01 什么是Spring MVC Spring MVC 是 Spring 框架中的一个核心模块,专门用于构建 Web 应用程序。它基于经典的 MVC 设计模式(Model-View-Controller),但通过 Spring 的特性(如依赖注入、注解驱动)大幅简化了…...
 
BurpSuite插件jsEncrypter使用教程
一、前言 在当今Web应用安全测试中,前端加密已成为开发者保护敏感数据的常用手段。然而,这也给安全测试人员带来了挑战,传统的抓包方式难以获取明文数据,测试效率大打折扣。BurpSuite作为一款强大的Web安全测试工具,其…...
 
【C#实现手写Ollama服务交互,实现本地模型对话】
前言 C#手写Ollama服务交互,实现本地模型对话 最近使用C#调用OllamaSharpe库实现Ollama本地对话,然后思考着能否自己实现这个功能。经过一番查找,和查看OllamaSharpe源码发现确实可以。其实就是开启Ollama服务后,发送HTTP请求&a…...
Android Glide 框架线程管理模块原理的源码级别深入分析
一、引言 在现代的 Android 应用开发中,图片加载是一个常见且重要的功能。Glide 作为一款广泛使用的图片加载框架,以其高效、灵活和易用的特点受到了开发者的青睐。其中,线程管理模块是 Glide 框架中至关重要的一部分,它负责协调…...
每天记录一道Java面试题---day32
MySQL索引的数据结构、各自优劣 回答重点 B树:是一个平衡的多叉树,从根节点到每个叶子节点的高度差不超过1,而且同层级的节点间有指针相互连接。在B树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大…...
 
Vue3 Pinia 符合直觉的Vue.js状态管理库
Pinia 符合直觉的Vue.js状态管理库 什么时候使用Pinia 当两个关系非常远的组件,要传递参数时使用Pinia组件的公共参数使用Pinia...
深度学习与大模型基础-向量
大家好!今天我们来聊聊向量(Vector)。别被这个词吓到,其实向量在我们的生活中无处不在,只是我们没注意罢了。 1. 向量是什么? 简单来说,向量就是有大小和方向的量。比如你从家走到学校&#x…...
【网络编程】完成端口 IOCP
10.11 完成端口 10.11.1 基本概念 完成端口的全称是I/O 完成端口,英文为IOCP(I/O Completion Port) 。IOCP是一个异 步I/O 的 API, 可以高效地将I/O 事件通知给应用程序。与使用select() 或是其他异步方法不同 的是,一个套接字与一个完成端口关联了起来…...
 
《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)
目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…...
管理网络安全
防火墙在 Linux 系统安全中有哪些重要的作用? 防火墙作为网络安全的第一道防线,能够根据预设的规则,对进出系统的网络流量进行严格筛选。它可以阻止未经授权的外部访问,只允许符合规则的流量进入系统,从而保护系统免受…...
 
明日直播|Go IoT 开发平台,开启万物智联新征程
在物联网技术飞速发展的当下,物联网行业却深受协议碎片化、生态封闭、开发低效等难题的困扰。企业和开发者们渴望找到一个能突破这些困境,实现高效、便捷开发的有力工具。 3 月 11 日(星期二)19:00,GitCode 特别邀请独…...
 
系统架构设计师—系统架构设计篇—软件架构风格
文章目录 概述经典体系结构风格数据流风格批处理管道过滤器对比 调用/返回风格主程序/子程序面向对象架构风格层次架构风格 独立构件风格进程通信事件驱动的系统 虚拟机风格解释器基于规则的系统 仓库风格(数据共享风格)数据库系统黑板系统超文本系统 闭…...
 
【MySQL_04】数据库基本操作(用户管理--配置文件--远程连接--数据库信息查看、创建、删除)
文章目录 一、MySQL 用户管理1.1 用户管理1.11 mysql.user表详解1.12 添加用户1.13 修改用户权限1.14 删除用户1.15 密码问题 二、MySQL 配置文件2.1 配置文件位置2.2 配置文件结构2.3 常用配置参数 三、MySQL远程连接四、数据库的查看、创建、删除4.1 查看数据库4.2 创建、删除…...
【Zinx】Day5-Part4:Zinx 的连接属性设置
目录 Day5-Part4:Zinx 的连接属性设置给连接添加连接配置的接口连接属性方法的实现 测试 Zinx-v1.0总结 Day5-Part4:Zinx 的连接属性设置 在 Zinx 当中,我们使用 Server 来开启服务并监听指定的端口,当接收到来自客户端的连接请求…...
 
【英伟达AI论文】多模态大型语言模型的高效长视频理解
摘要:近年来,基于视频的多模态大型语言模型(Video-LLMs)通过将视频处理为图像帧序列,显著提升了视频理解能力。然而,许多现有方法在视觉主干网络中独立处理各帧,缺乏显式的时序建模,…...
 
小程序事件系统 —— 32 事件系统 - 事件分类以及阻止事件冒泡
在微信小程序中,事件分为 冒泡事件 和 非冒泡事件 : 冒泡事件:当一个组件的事件被触发后,该事件会向父节点传递;(如果父节点中也绑定了一个事件,父节点事件也会被触发,也就是说子组…...
全球首款 5G-A 人形机器人发布
全球首款 5G-A 人形机器人于世界移动通信大会(MWC2025)上由中国移动、华为、乐聚联合发布。以下是关于这款机器人的详细介绍: 名称与背景 名称9:这款人形机器人名为 “夸父”,是中国移动、华为与乐聚机器人在 GTI 平台…...
Tomcat 新手入门指南
Tomcat 新手入门指南 Apache Tomcat 是一个开源的 Java Servlet 容器和 Web 服务器,广泛用于部署和运行 Java Web 应用程序。以下是 Tomcat 的入门指南,帮助你快速上手。 1. 安装 Tomcat 步骤 1: 下载 Tomcat 访问 Apache Tomcat 官网。选择适合的版…...
 
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
 
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
 
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
 
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
 
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
 
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
 
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
 
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
