├── resource ├── end.md ├── images │ ├── Readme.md │ ├── solana-1.png │ └── solana-2.png ├── rust │ ├── rust-basic.md │ ├── rust-advanced.md │ ├── rust-of-web3.md │ ├── web-project.md │ ├── solana-json-rpc.md │ └── rpc-servcer-client.md ├── solanna │ ├── svm_detail.md │ ├── wallet.md │ ├── issure-token.md │ ├── project │ │ ├── drng.md │ │ ├── event.md │ │ ├── nft.md │ │ ├── appchain.md │ │ ├── dex.md │ │ └── staking-lending.md │ ├── solana-account.md │ ├── anchor-first-project.md │ ├── solana-contracts.md │ ├── token-and-nft.md │ ├── anchor-introdution.md │ ├── blockchain-organization-structure.md │ └── consensus-and-block-production.md ├── start.md ├── blockchain-basic.md └── web3-hisitory-now-future.md ├── contributor └── contributor.md ├── .gitignore ├── LICENSE ├── README.md ├── CONTRIBUTING.md └── project └── wallet.md /resource/end.md: -------------------------------------------------------------------------------- 1 | # 第二十五讲:课程总结 2 | -------------------------------------------------------------------------------- /resource/images/Readme.md: -------------------------------------------------------------------------------- 1 | # 图片目录 2 | -------------------------------------------------------------------------------- /contributor/contributor.md: -------------------------------------------------------------------------------- 1 | # Contribute 2 | 3 | -------------------------------------------------------------------------------- /resource/rust/rust-basic.md: -------------------------------------------------------------------------------- 1 | # 第四讲:Rust 核心语法与基础编程 2 | -------------------------------------------------------------------------------- /resource/solanna/svm_detail.md: -------------------------------------------------------------------------------- 1 | # 第十一讲:SVM 详解介绍 2 | -------------------------------------------------------------------------------- /resource/solanna/wallet.md: -------------------------------------------------------------------------------- 1 | # 第十四讲:Solana 钱包开发实战 2 | -------------------------------------------------------------------------------- /resource/rust/rust-advanced.md: -------------------------------------------------------------------------------- 1 | # 第五讲:Rust 进阶与高级特性 2 | -------------------------------------------------------------------------------- /resource/rust/rust-of-web3.md: -------------------------------------------------------------------------------- 1 | # 第三讲:Rust Web3 行业的地位分析 2 | -------------------------------------------------------------------------------- /resource/rust/web-project.md: -------------------------------------------------------------------------------- 1 | # 第六讲:基于 Web 框架的项目目实战 2 | -------------------------------------------------------------------------------- /resource/solanna/issure-token.md: -------------------------------------------------------------------------------- 1 | # 第十八讲:Soalan 发行自己的第一个代币 2 | -------------------------------------------------------------------------------- /resource/solanna/project/drng.md: -------------------------------------------------------------------------------- 1 | # 第二十讲:Solana 去中心化随机数开发实战 2 | -------------------------------------------------------------------------------- /resource/solanna/project/event.md: -------------------------------------------------------------------------------- 1 | # 第二十一讲:Solana 合约事件监听开发实战 2 | -------------------------------------------------------------------------------- /resource/solanna/project/nft.md: -------------------------------------------------------------------------------- 1 | # 第十九讲:Solana 上 NFT 项目开发实战 2 | -------------------------------------------------------------------------------- /resource/solanna/project/appchain.md: -------------------------------------------------------------------------------- 1 | # 第二十四讲:基于 Solana 开发应用链项目实战 2 | -------------------------------------------------------------------------------- /resource/solanna/project/dex.md: -------------------------------------------------------------------------------- 1 | # 第二十二讲:基于 Solana 开发 Dex 项目实战 2 | -------------------------------------------------------------------------------- /resource/solanna/solana-account.md: -------------------------------------------------------------------------------- 1 | # 第十二讲:Solana 账户体系介绍 2 | 3 | -------------------------------------------------------------------------------- /resource/rust/solana-json-rpc.md: -------------------------------------------------------------------------------- 1 | # 第八讲:使用 Rust 开发 Solana json-rpc 实战 2 | -------------------------------------------------------------------------------- /resource/solanna/anchor-first-project.md: -------------------------------------------------------------------------------- 1 | # 第十六讲:基于 anchor 开发自己的第一个项目 2 | -------------------------------------------------------------------------------- /resource/solanna/solana-contracts.md: -------------------------------------------------------------------------------- 1 | # 第十三讲:Solana 智能合约简介 2 | 3 | 4 | -------------------------------------------------------------------------------- /resource/rust/rpc-servcer-client.md: -------------------------------------------------------------------------------- 1 | # 第七讲:Rust 实现 grpc server 和 client 2 | -------------------------------------------------------------------------------- /resource/solanna/project/staking-lending.md: -------------------------------------------------------------------------------- 1 | # 第二十三讲:基于 Solana 开发质押借贷协议项目实战 2 | -------------------------------------------------------------------------------- /resource/solanna/token-and-nft.md: -------------------------------------------------------------------------------- 1 | # 第十七讲:Spl-Token 和 NFT详细节介绍 2 | 3 | 4 | -------------------------------------------------------------------------------- /resource/solanna/anchor-introdution.md: -------------------------------------------------------------------------------- 1 | # 第十五讲:Anchor 框架基础概念讲解 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /resource/solanna/blockchain-organization-structure.md: -------------------------------------------------------------------------------- 1 | # 第九讲:Solana 区块数据组织结构 2 | -------------------------------------------------------------------------------- /resource/solanna/consensus-and-block-production.md: -------------------------------------------------------------------------------- 1 | # 第十讲:Solana 共识算法和出块流程详解 2 | 3 | -------------------------------------------------------------------------------- /resource/images/solana-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-web3/the-web3-solana/HEAD/resource/images/solana-1.png -------------------------------------------------------------------------------- /resource/images/solana-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-web3/the-web3-solana/HEAD/resource/images/solana-2.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # If you prefer the allow list template instead of the deny list, see community template: 2 | # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore 3 | # 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | 11 | # Test binary, built with `go test -c` 12 | *.test 13 | 14 | # Output of the go coverage tool, specifically when used with LiteIDE 15 | *.out 16 | 17 | # Dependency directories (remove the comment below to include it) 18 | # vendor/ 19 | 20 | # Go workspace file 21 | go.work 22 | go.work.sum 23 | 24 | # env file 25 | .env 26 | .idea 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 the-job-org 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /resource/start.md: -------------------------------------------------------------------------------- 1 | # 第零讲:课程启动 2 | 3 | ## 一.The Web3 社区介绍 4 | 5 | ### 1.技术培训,专注产品,研发 6 | - 个人技术培训 7 | - 产品模块 8 | - 产品经理 9 | - 测试开发 10 | - 投研 11 | - 研发 12 | - 钱包,合约加公链技术大课程 13 | - 企业培训 14 | - 企业 Web2 转型 Web3 15 | ### 2.安全审计 16 | - 磐石安全实验室更名为 The Web3 安全实验室 17 | 18 | ### 3.二级市场的投资 19 | - 私募量化---->灰度中 20 | 21 | ### 4.The Web3 账号情况 22 | - the-web-book: 集区块链基础,产品,钱包,智能合约和公链系列丛书 23 | - The web3 24 | - 主 github: https://github.com/the-web3 25 | - 合约github: https://github.com/the-web3-contracts 26 | - 公链的 gihub:https://github.com/the-web3-chain 27 | - 产品的 github: https://github.com/the-web3-product 28 | 29 | - 约 200 人,约 30 人产品经理 30 | - 社区体量 31 | - 公众号粉丝:1 万多人 32 | - 推特:6000 多人 33 | - 小红书:660 34 | - B 站:400 35 | - The Web3 Event 36 | 37 | ## 二.DappLink 38 | - 一键发钱包 39 | - 一键发链 40 | - 一键发组合的 Dapp 41 | - 模块化可组合 Layer2 42 | - 基础版本和商业版本 43 | - 基础版本是开源 44 | - 商业版本是闭源 45 | 46 | - 社交账号 47 | - 推特:https://x.com/0xdapplink 48 | - 官网:https://www.dapplink.xyz/zh 49 | - 文档:https://docs.dapplink.xyz/ 50 | 51 | ## 三. Solana 课程大纲的梳理 52 | - Web3 过去, 现在和未来全面解析 53 | - 什么是区块链,区块链的构成元素 54 | - Rust 编程语言学习 55 | - Rust Web3 行业的地位分析 56 | - Rust 核心语法与基础编程 57 | - Rust 进阶与高级特性 58 | - Rust 项目实战 59 | - 基于 web 框架的项目目实战 60 | - 实现 grpc server 和 client 61 | - 使用 Rust 开发 solana json-rpc 实战 62 | - Solana 基本原理解析 63 | - 区块数据组织结构 64 | - 共识算法和出块流程详解 65 | - SVM 详解介绍 66 | - Solana 账户体系介绍 67 | - Solana 智能合约 68 | - Solana 钱包开发实战(开发语言 TypeScritpt) 69 | - 离线地址生成 70 | - 离线签名 71 | - 构建一笔交易发送到链上 72 | - Anchor 框架基础概念讲解 73 | - 基于 anchor 开发自己的第一个项目 74 | - Spl-Token 和 NFT详细节介绍 75 | - Soalan 发行自己的第一个代币 76 | - Solana 上 NFT 项目开发实战 77 | - Solana 去中心化随机数开发实战 78 | - Solana 合约事件监听开发实战 79 | - 基于 Solana 开发 Dex 项目实战 80 | - 基于 Solana 开发质押借贷协议项目实战 81 | - 基于 Solana 开发应用链项目实战(看课程时间进行安排,时间不够的话会取消) 82 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Web3 社区 Solana 开发者训练营课程 2 | 3 | - [开课](./resource/start.md) 4 | 5 | ------------------------------------------------------------------------ 6 | 7 | ## 第一部分:区块链基础 8 | - [Web3 过去, 现在和未来全面解析](./resource/web3-hisitory-now-future.md) 9 | - [什么是区块链,区块链的构成元素](./resource/blockchain-basic.md) 10 | 11 | ## 第二部分:Rust 编程语言学习 12 | - [Rust Web3 行业的地位分析](./resource/rust/rust-of-web3.md) 13 | - [Rust 核心语法与基础编程](./resource/rust/rust-basic.md) 14 | - [Rust 进阶与高级特性](./resource/rust/rust-advanced.md) 15 | 16 | ## 第三部分:项目实战 17 | - [基于 Web 框架的项目目实战](./resource/rust/web-project.md) 18 | - [实现 grpc server 和 client](./resource/rust/rpc-servcer-client.md) 19 | - [使用 Rust 开发 Solana json-rpc 实战](./resource/rust/solana-json-rpc.md) 20 | 21 | 22 | ## 第四部分:Solana 基本原理解析 23 | - [区块数据组织结构](./resource/solana/blockchain-organization-structure.md) 24 | - [共识算法和出块流程详解](./resource/solana/consensus-and-block-production.md) 25 | - [SVM 详解介绍](./resource/solana/svm_detail.md) 26 | - [Solana 账户体系介绍](./resource/solana/solana-account.md) 27 | - [Solana 智能合约](./resource/solana/solana-contracts.md) 28 | 29 | 30 | ## 第五部分:Solana 项目实战 31 | - [Solana 钱包开发实战](./project/wallet.md) 32 | - [Anchor 框架基础概念讲解](./project/anchor-introdution.md) 33 | - [基于 anchor 开发自己的第一个项目](./project/anchor-first-project.md) 34 | - [Spl-Token 和 NFT详细节介绍](./project/token-and-nft.md) 35 | - [Soalan 发行自己的第一个代币](./project/issure-token.md) 36 | - [Solana 上 NFT 项目开发实战](./project/nft.md) 37 | - [Solana 去中心化随机数开发实战](./project/drng.md) 38 | - [Solana 合约事件监听开发实战](./project/event.md) 39 | - [基于 Solana 开发 Dex 项目实战](./project/dex.md) 40 | - [基于 Solana 开发质押借贷协议项目实战](./project/appchain.md) 41 | - [基于 Solana 开发应用链项目实战(看课程时间进行安排,时间不够的话会取消)](./resource/solana/) 42 | 43 | ------------------------------------------------------------------------------------------------------------ 44 | 45 | - [课程总结](./resource/end.md) 46 | 47 | ------------------------------------------------------------------------------------------------------------ 48 | 49 | [欢迎贡献](./contributor/contributor.md) 50 | 51 | 52 | *** 注意:目前该课程属于免费课程,只要帮忙推广课程就可以获得免费学习名额 *** 53 | -------------------------------------------------------------------------------- /resource/blockchain-basic.md: -------------------------------------------------------------------------------- 1 | # 第二讲:什么是区块链,区块链的构成元素 2 | 3 | ## 一.什么区块链(以 Solana 为例子) 4 | 5 | ### 1. 区块链组织形式 6 | 7 | 区块链(Blockchain)是一种分布式账本技术,本质上是以加密技术链接的区块组成的链状数据结构。每个区块都包含一系列经过加密处理的数据(通常是交易),通过特定的共识机制来确保链上数据的安全性和不可篡改性。 8 | 9 | 区块链的组织形式一般分为两个核心部分: 10 | 11 | [![Dapplink](./images/solana-1.png)](https://github.com/the-web3) 12 | 13 | 14 | ### 1.1. 区块头(Block Header) 15 | 区块头通常包含以下信息: 16 | 17 | - Slot(插槽):每个区块在链上都有一个唯一的插槽编号,标记区块产生的位置。 18 | - Parent Slot(父插槽):表示上一个区块的位置,形成链式结构。 19 | - Hash(区块哈希):当前区块的唯一标识,通过哈希算法得出。 20 | - Previous Hash(前一个区块的哈希):确保区块之间的紧密连接。 21 | - Transaction Hash(交易列表的哈希):对区块中所有交易的摘要,确保数据的完整性。 22 | 23 | ### 1.2.区块体(Block Body) 24 | - 区块体包括:交易列表(TxList):包含当前区块的所有交易信息。 25 | 26 | ## 二.区块链的核心特性 27 | 28 | ### 1.去中心化(Decentralization) 29 | 区块链的网络不依赖于中心服务器,而是由分散在全球各地的众多节点共同维护。节点共同参与交易的验证和出块决策过程,通过共识算法(如 Solana 的 PoH + PoS)确保没有单一实体控制网络。 30 | 31 | 32 | ### 2.不可篡改性(Immutability) 33 | 区块链上每一个区块的哈希值均依赖于前一区块,一旦某一区块的数据发生变化,将导致其后的所有区块哈希值发生变更。这种链式哈希结构与共识算法相结合,有效保证了数据记录的不可篡改性。 34 | 35 | ### 3.可追溯性(Traceability) 36 | 区块链的链式结构明确记录每一次数据状态的变化历史,因此每笔交易都能被清晰追踪与审计。这种特性不仅对金融系统至关重要,在供应链、版权保护等领域同样有广泛应用。 37 | 38 | ### 4.数字资产可追踪性 39 | 区块链网络天然支持数字资产的透明记录与流动追踪。这为监管、反洗钱(AML)和交易合规性提供了强大 40 | 41 | ## 三.以 Solana 为例:区块链网络构成元素详解 42 | 43 | Solana 是新一代高性能区块链网络,因其极高的吞吐量(TPS)和低延迟而闻名,特别适用于高频金融交易和实时应用。Solana 网络结构包括以下核心元素: 44 | 45 | ### 1.节点(Validators) 46 | Solana 网络中的验证节点负责接收交易请求,验证交易,打包交易到区块并参与共识过程。任何符合硬件条件的个体或组织都可运行节点参与共识过程,维持网络的去中心化与安全性。 47 | 48 | ### 2.共识机制(Proof of History + Proof of Stake) 49 | 50 | Solana 采用独特的混合共识机制: 51 | 52 | - 历史证明(Proof of History, PoH):由一个可验证的时间序列对事件顺序进行标记,大幅提高交易处理速度。 53 | - 权益证明(Proof of Stake, PoS):验证者质押代币以保障网络安全,权益越高的节点出块权重越大,激励节点保持诚信行为。 54 | 55 | 56 | ### 3. 区块结构(Block Structure) 57 | Solana 网络的区块结构严格而高效: 58 | 59 | - Block Header 包括: 60 | - Slot(当前区块插槽) 61 | - Parent Slot(前一区块插槽) 62 | - Block Hash(区块哈希) 63 | - Previous Hash(前一区块哈希) 64 | - Transactions Hash(区块交易哈希) 65 | 66 | - Block Body: 67 | - 包含大量的交易数据 (TxList),由于 Solana 的优化,单个区块可支持成千上万的交易。 68 | 69 | 70 | ### 4.账户与状态管理(Account State) 71 | Solana 网络将数据以账户(Account)的形式进行存储,类似于文件系统的方式组织数据: 72 | 73 | - System Account:存储基础的账户余额信息。 74 | - Program Account:存储智能合约逻辑的程序代码。 75 | - Data Account:用于储存特定程序运行所需的数据。 76 | 77 | 账户系统的高效管理,使 Solana 可以快速且低成本地执行状态变更。 78 | 79 | ### 5.智能合约与 Solana 虚拟机(SVM) 80 | Solana 使用 Rust 编写智能合约,通过 Solana 虚拟机(SVM)执行程序: 81 | 82 | - 智能合约在链上运行实现去中心化应用(DApp)的逻辑。 83 | - SVM 高效的并行执行能力使网络可同时处理多个智能合约调用。 84 | 85 | ### 6. 网络通信协议(Gossip Protocol) 86 | Solana 使用 Gossip 协议实现节点间信息快速传播: 87 | 88 | - 节点自动发现网络中的其他节点。 89 | - 节点间高效交换交易和区块信息。 90 | 91 | 这一机制确保网络状态的快速同步与共识的高效达成。 92 | 93 | ## 四.总结与展望 94 | 95 | 区块链是一种颠覆性的底层技术,它的核心价值在于去中心化、安全、透明、不可篡改与高效可追溯性。而以 Solana 为代表的现代区块链,更在性能和扩展性方面实现巨大突破,正迅速推动区块链技术迈向大规模商业应用。 96 | 97 | 理解区块链网络的结构和特性,不仅有助于开发者构建更好的应用,也有助于公众更清晰地看待区块链如何重塑世界。区块链的未来,值得每个人期待。 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /resource/web3-hisitory-now-future.md: -------------------------------------------------------------------------------- 1 | # 第一讲:Web3 过去, 现在和未来全面解析 2 | 3 | ## 一.过去与现在:从实验到生态繁荣 4 | 5 | ### 比特币:一切的起点 6 | 2008 年中本聪发布了白皮书,2009 年比特币诞生。这标志着区块链时代正式开启。比特币的去中心化、无需信任的数字货币理念,为后来的 Web3 铺下基石。尽管人们争议不断,但比特币仍然稳步向前,成为了数字黄金的代名词。 7 | 8 | ### HyperLedger Fabric:联盟链的尝试 9 | IBM 主导的 HyperLedger Fabric 是联盟链的重要代表。尽管未成为大众共识,但它在企业级应用中推动了区块链技术的普及与落地,使区块链从理念走向商业应用。 10 | 11 | ### Ethereum 2015 年:智能合约时代 12 | 2015 年,以太坊主网上线,智能合约的概念被广泛接受。Ethereum 创造了去中心化应用(DApp)的可能性,开启了 ICO 浪潮,也奠定了区块链技术作为一种基础设施的地位。 13 | 14 | ### 2017 年 9.4 事件与区块链分化 15 | 2017 年,中国监管升级,“9.4” 事件成为分水岭,数字货币交易所遭遇重大洗牌。此后,区块链世界逐渐分化为合规的区块链技术应用(链圈)与充满投机性的数字货币市场(币圈)。 16 | 17 | ### 2018 年熊市:区块链的反思期 18 | 2018 年年底,市场进入深度熊市,比特币、以太坊价格暴跌,ETH 一度跌到 90 美元附近。但这一时期也是行业洗牌、沉淀技术的宝贵阶段。众多浮躁的项目被淘汰,留下了真正有韧性的团队与产品。 19 | 20 | ### 2020-2021 DeFi Summer:去中心化金融的黄金时代 21 | 2020 年到 2021 年,DeFi 彻底颠覆了传统金融逻辑。以 Uniswap、Compound、Aave 为代表的去中心化金融应用爆发性增长,用户纷纷体验去中心化交易所(DEX)、借贷和质押服务。同时,NFT 市场也异军突起,艺术、收藏品的去中心化数字所有权概念深入人心。 22 | 23 | ### 2021 年末-2022 年:生态多元化的探索期 24 | 随着 Layer2(L2)扩容方案如 Arbitrum、Optimism、zkSync 的兴起,以及数据可用性(DA)方案、流动性质押衍生品(LSD)、重新质押协议和以太坊验证者服务(AVS)的出现,区块链技术进入新一轮技术创新浪潮。同时,Solana 与 SUI 作为新公链势力快速崛起,成为 Ethereum 外的备受关注的新生态。 25 | 26 | ### 2022 年至今:应用与实体经济的融合 27 | 从 2022 年开始,Solana 成为机构资本和创业者热爱的舞台,DePIN(去中心化物理基础设施)、去中心化科学(DeSci)、AI 与区块链结合的智能代理和多方计算(MCP)、真实世界资产(RWA)与支付金融(PayFI)快速兴起,真正将 Web3 概念推向更广泛的现实世界应用。 28 | 29 | 30 | ## 二.未来:无限可能的 Web3 世界 31 | 32 | ### 1.开发者视角:技术迭代与跨链融合 33 | 34 | - Bitcoin:迈向金融应用: 比特币将不再仅仅是数字黄金,BTCFI(金融合约)和 BTC-L2(例如 Nervos、Stacks 等)的发展,将赋予比特币更多的金融应用和创新空间。 35 | 36 | - Ethereum:百花齐放: 以太坊生态仍将保持核心地位。去中心化金融(xxxFi)、Layer2 继续扩张,数据可用性(DA)、流动性质押衍生品(LSD)、重新质押协议与以太坊验证者服务(AVS)将进一步发展壮大。以 OpStack 和 Polygon CDK 为代表的技术栈,也会使以太坊生态更加丰富、多样。 37 | 38 | - Cosmos:专属应用链时代: Cosmos 将专注于应用链的建设,例如以 DyDx、Babylon 为代表的区块链应用。模块化设计和跨链能力将推动 Cosmos 成为去中心化应用链的主要基础设施。 39 | 40 | - Solana:创新与速度的结合: Solana 生态将继续高速增长,DePIN、RWA 与 PayFI、AI 区块链结合与多方计算(MCP)技术将成为其重要特征,生态创新能力和高性能将保持强劲。 41 | 42 | - SUI:聚焦价值: SUI 将在安全性和资产流动性方面有更多创新,生态虽新但价值凸显,开发者和创业者有望获得更多的商业机会。 43 | 44 | 45 | ### 2. 创业者视角:生态沃土的选择 46 | 47 | Solana 与 SUI 将是未来创业者的理想土壤。这两个生态新兴,竞争尚未激烈,但成长潜力巨大,尤其在性能、高效的编程语言(Rust、Move)和新兴赛道方面,创业者能够快速实现从创意到产品的转化。 48 | 49 | 50 | ### 3.全面发展的必要性:不局限于单一链 51 | 52 | - 链上应用全景 53 | - 以太坊生态:Solidty 仍为主流,涵盖 DeFi、LSD、重新质押协议、跨链桥、AA 钱包等多元化生态,适合开发者打造复杂的金融和资产管理应用。 54 | - Solana 生态:以 Rust 为主要语言,高性能、低成本优势明显,聚焦于 DeFi、重新质押、跨链桥、AA 钱包,适合高效应用开发。 55 | - SUI 生态:Move 语言的安全性优势明显,开发安全、创新型金融应用更加便捷。 56 | 57 | - 钱包的重要性: 无论是开发者还是创业者,都必须了解主流链的各种钱包技术和业务模式。这种能力将大幅提高在跨链生态中的适应性,快速实现产品部署与用户交互。 58 | 59 | - 公链生态全面发展: 除了比特币与以太坊,以 Cosmos 为代表的应用链技术将持续提升,模块化生态与跨链技术发展,使未来公链生态更加繁荣和多样。 60 | 61 | - 新兴赛道布局 62 | - DePIN:硬件制造商主导,融合物理世界和区块链。 63 | - DeSci:去中心化科学研究,学术和科研的透明化。 64 | - AI Agent & MCP:人工智能与多方计算结合,Web3与AI融合的主流方向。 65 | - RWA 和 PayFI:实体经济与支付需求真实存在,大量 Web2 企业将借助 Web3 技术进行数字化转型。 66 | 67 | ## 三.结语:Web3 之路,未来已来 68 | 69 | Web3 从比特币诞生之日起便注定不凡。过去十几年,我们见证了技术从概念到落地、从实验到产业繁荣。未来,Web3 将更深层次融入我们的日常生活与工作场景。 70 | 71 | 无论是开发者、创业者,还是普通用户,都站在了一个历史机遇的关口。Web3 是开放的,是温暖的,它最终服务于每个人,连接虚拟与现实世界,让人类生活变得更加美好而高效。 72 | 73 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Solana Co-Learning 2 | 3 | We are excited to have you contribute to the **Solana Co-Learning** project! Your contributions help make this project better for everyone. Whether you are fixing bugs, improving documentation, or adding new features, your contributions are valuable. Please follow the guidelines below to get started. 4 | 5 | ## Table of Contents 6 | 7 | - [Contributing to Solana Co-Learning](#contributing-to-solana-co-learning) 8 | - [Table of Contents](#table-of-contents) 9 | - [Code of Conduct](#code-of-conduct) 10 | - [How to Contribute](#how-to-contribute) 11 | - [Bug Reports](#bug-reports) 12 | - [Feature Requests](#feature-requests) 13 | - [Pull Requests](#pull-requests) 14 | - [Development Setup](#development-setup) 15 | - [Commit Message Guidelines](#commit-message-guidelines) 16 | - [Code Style](#code-style) 17 | - [License](#license) 18 | 19 | ## Code of Conduct 20 | 21 | Please note that this project follows the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/). By participating in this project, you agree to abide by its terms. 22 | 23 | We encourage a welcoming and respectful environment for all contributors. Let's make this a positive space! 24 | 25 | ## How to Contribute 26 | 27 | ### Bug Reports 28 | 29 | If you find a bug, please follow these steps: 30 | 31 | 1. Check the [GitHub Issues](https://github.com/yourusername/solana-co-learning/issues) to see if the issue has already been reported. 32 | 2. If not, create a new issue by providing the following information: 33 | - A clear description of the issue. 34 | - Steps to reproduce the issue. 35 | - Expected vs actual behavior. 36 | - Any error messages or logs. 37 | 38 | ### Feature Requests 39 | 40 | We welcome feature requests! If you have an idea for a feature you'd like to see, please: 41 | 42 | 1. Check the existing issues to see if someone else has already requested it. 43 | 2. If not, open a new feature request and describe the functionality you're proposing. 44 | 3. Be specific about the expected outcome and how it will benefit the project. 45 | 46 | ### Pull Requests 47 | 48 | We love receiving pull requests! To make sure everything goes smoothly, please follow these steps: 49 | 50 | 1. **Fork** the repository and clone it to your local machine. 51 | 52 | ```bash 53 | git clone https://github.com/yourusername/solana-co-learning.git 54 | ``` 55 | 56 | 2. **Create a new branch** for your work. 57 | 58 | ```bash 59 | git checkout -b feature/your-feature-name 60 | ``` 61 | 62 | 3. **Make your changes** and ensure the code works as expected. 63 | 64 | 4. **Commit your changes** with a clear, concise commit message following our [Commit Message Guidelines](#commit-message-guidelines). 65 | 66 | 5. **Push your changes** to your forked repository. 67 | 68 | ```bash 69 | git push origin feature/your-feature-name 70 | ``` 71 | 72 | 6. **Open a pull request** to the main repository from your forked branch. Ensure your pull request includes the following: 73 | - A description of what was changed. 74 | - Reference any relevant issue numbers. 75 | 76 | We will review your pull request as soon as possible. Thank you for your contribution! 77 | 78 | ## Development Setup 79 | 80 | Before contributing, you need to set up the development environment. Here's how: 81 | 82 | 1. Clone the repository to your local machine. 83 | 84 | ```bash 85 | git clone https://github.com/yourusername/solana-co-learning.git 86 | cd solana-co-learning 87 | ``` 88 | 89 | 2. **Install dependencies**: 90 | 91 | ```bash 92 | npm install 93 | ``` 94 | 95 | 3. **Set up Solana CLI**: 96 | 97 | - Install Solana CLI if you haven’t already: [Solana Installation Guide](https://docs.solana.com/cli/install-solana-cli-tools). 98 | - Set the network to **Devnet**: 99 | 100 | ```bash 101 | solana config set --url https://api.devnet.solana.com 102 | ``` 103 | 104 | 4. **Start the development server** (if applicable): 105 | 106 | ```bash 107 | npm run dev 108 | ``` 109 | 110 | 5. You can now begin making changes and testing locally. 111 | 112 | ## Commit Message Guidelines 113 | 114 | We follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) standard for commit messages. Please adhere to the following format: 115 | 116 | ``` 117 | (): 118 | 119 | : feat, fix, docs, style, refactor, test, chore 120 | : optional (e.g., "ui", "api", "docs") 121 | : short description of what was done 122 | ``` 123 | 124 | Example: 125 | 126 | ``` 127 | feat(wallet): add Phantom wallet support 128 | fix(contract): correct token transfer calculation 129 | docs(readme): update setup instructions 130 | ``` 131 | 132 | This helps maintain a clean, understandable git history. 133 | 134 | ## Code Style 135 | 136 | We follow the following code style guidelines to ensure consistency throughout the project: 137 | 138 | - **JavaScript/TypeScript**: Follow the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript). 139 | - **Rust**: Follow the official [Rust Style Guide](https://doc.rust-lang.org/1.0.0/style/). 140 | - **General**: Use descriptive names for variables, functions, and classes. Ensure readability and clarity in all code. 141 | 142 | ## License 143 | 144 | By contributing to the project, you agree to license your contributions under the project's existing license. 145 | 146 | This project is licensed under the [MIT License](LICENSE). 147 | 148 | --- 149 | 150 | Thank you for helping make **Solana Co-Learning** better! We appreciate your time and effort. 151 | -------------------------------------------------------------------------------- /project/wallet.md: -------------------------------------------------------------------------------- 1 | # Solana 钱包开发实战 2 | 3 | ## 一.前置知识 4 | 5 | 在开始 Solana 钱包的实际开发之前,先明确以下钱包基础知识,这将帮助开发者更深入地理解钱包设计与架构。 6 | 7 | ### 1.钱包的类别与密钥管理方式 8 | 9 | - 钱包按密钥管理方式不同,可以分为以下几类: 10 | 11 | - 交易所钱包(中心化钱包):密钥存储于交易所云端,用户不直接管理。 12 | - 存储方案如下: 13 | - wallet.data 文件(本地存储) 14 | - KMS + 代码内存储 15 | - TEE 环境(例如 AWS Nitro + KMS + S3 数据库存储) 16 | - CloudHSM(硬件安全模块,私钥不离开硬件环境) 17 | - 安全性:CloudHSM > TEE > KMS > wallet.data 18 | 19 | - 去中心化钱包(HD钱包):用户自己管理密钥,钱包私钥或助记词存储在用户的本地设备上,例如: 20 | 21 | - 手机端:TokenPocket、imToken 22 | - 电脑端:MetaMask、Phantom 23 | - 主要标准:BIP39(助记词生成)、BIP32(密钥推导)、BIP44(推导路径) 24 | 25 | - 半去中心化钱包(MPC钱包):通过多方计算(MPC)技术将密钥分片存储,各方共同签名。 26 | - 2 片密钥 (2-1):其中任意1个密钥即可签名。 27 | - 3 片密钥 (3-2):需要2个密钥片进行签名交易才有效。 28 | 29 | - MPC托管钱包(大户钱包): 30 | - 例如 (10-7) 模式:共10个密钥片,至少7片密钥签名有效。 31 | - 适用于大户或托管方,私钥片由多方节点共同管理。 32 | 33 | - 多签钱包: 34 | 35 | - Ethereum、Solana 可通过合约实现。 36 | - Bitcoin 通过部分签名(PSBT)机制实现。 37 | 38 | 39 | ### 2.HD钱包相关知识 40 | 41 | - BIP39: 42 | - 提供助记词协议,维护2048个英文单词,支持多语言。 43 | - 助记词长度:12、15、18、21、24个单词。 44 | - 从助记词生成种子用于派生密钥。 45 | - BIP32:从助记词生成 masterKey(主密钥),再根据路径生成子密钥(childKey)以及公钥、地址。 46 | - BIP44:定义了HD钱包的标准推导路径: 47 | 48 | ``` 49 | m / purpose' / coin_type' / account' / change / address_index 50 | ``` 51 | 52 | 参考文章:https://github.com/the-web3/blockchain-wallet/tree/master/biphd 53 | 54 | ## 二.Solana钱包开发实战指南 55 | 56 | 下面将从开发者角度,全面介绍如何调研并实际开发支持 Solana 的钱包。 57 | 58 | ### 1.调研链的重要方面 59 | 60 | 作为钱包开发者,需要关注以下几个维度: 61 | 62 | - 离线地址生成方式 63 | - 离线签名机制 64 | - 交易记录、账户余额获取方式 65 | - 交易确认机制(确认位、Finalized) 66 | - Staking 质押机制 67 | - 链基本信息(共识算法、性能、代币精度等) 68 | 69 | 70 | ### 2.Solana 区块链全面解析 71 | Solana 是一种高性能单链区块链,专注于速度和低成本的区块链平台,适用于 DeFi、NFT、高频交易等应用场景。 72 | 73 | 基本信息调研 74 | - 共识机制: 75 | - 采用 POH(Proof of History)+ DPOS(权益证明)+ BFT 混合机制。 76 | - Why:POH 为链上的事件提供可信的时间顺序,DPOS 提高安全性和经济激励,BFT 提升网络抗攻击能力。 77 | 78 | - 性能与出块频率: 79 | - 每秒约 3 个区块,每个区块约 0.4 秒,整体约 1秒出块。 80 | 81 | - 代币精度: 82 | - 精度为 9,即最小单位 1 SOL = 10^9 Lamports。 83 | 84 | - 签名算法:EdDSA(Ed25519 算法)。 85 | - 地址编码格式:base58。 86 | - 账户模型:Solana 使用账户模型(Account-based),与以太坊类似,而非比特币的UTXO 模型。 87 | 88 | 89 | ### 3. Solana 网络环境与节点服务 90 | 91 | 一般公司节点由专业团队搭建,调研人员只需要写清楚需要什么机器配置,怎么搭建即可 92 | 93 | #### 3.1.开放节点 94 | 95 | - 主网(Mainnet-beta): 96 | - 生产环境,正式交易需真实 SOL。 97 | - RPC: https://api.mainnet-beta.solana.com 98 | 99 | - 开发网(Devnet): 100 | - 免费提供 SOL 空投用于开发测试。 101 | - RPC: https://api.devnet.solana.com 102 | 103 | - 测试网(Testnet): 104 | - 主要用于验证器和压力测试,可能不稳定。 105 | - RPC: https://api.testnet.solana.com 106 | 107 | - 第三方节点(备用方案):GetBlock Solana 节点等 108 | 109 | 110 | ### 4. Solana 核心功能解析与实现方法 111 | 112 | - 离线地址与签名 113 | - 生成密钥对(Ed25519)。 114 | - 地址由公钥经 base58 编码获得。 115 | - 签名通过本地的 EdDSA 算法实现,无需联网。 116 | 117 | - 交易记录与余额查询:通过 RPC 接口调用: 118 | - 查询交易记录:getTransaction 119 | - 查询余额:getBalance 120 | 121 | - 确认位与最终确认(Finalized):Solana 交易状态有多级确认,Finalized 状态表示完全确定无法更改。 122 | - 相关RPC方法:getSignatureStatuses 123 | 124 | - Staking:Solana支持 PoS Staking机制,用户可将 SOL 委托给验证节点以获得收益,相关RPC方法:getStakeActivation 125 | 126 | - NFT与代币(SPL-Token): 代币与 NFT 使用统一标准 SPL-Token,创建、转账、管理使用 Solana 的 SPL-Token Program。 127 | - RPC 接口:获取 Token 信息:getTokenAccountsByOwner 128 | 129 | - 手续费机制(CU机制)Solana使用“Compute Units”(计算单元)计费, 手续费由交易复杂性决定,CU 越多,费用越高。 130 | 131 | 132 | ## 三. 离线地址代码 133 | 134 | ```javascript 135 | export function createSolAddress (seedHex: string, addressIndex: string) { 136 | const { key } = derivePath("m/44'/501'/1'/" + addressIndex + "'", seedHex); 137 | const publicKey = getPublicKey(new Uint8Array(key), false).toString('hex'); 138 | const buffer = Buffer.from(getPublicKey(new Uint8Array(key), false).toString('hex'), 'hex'); 139 | const address = bs58.encode(buffer); 140 | const hdWallet = { 141 | privateKey: key.toString('hex') + publicKey, 142 | publicKey, 143 | address 144 | }; 145 | return JSON.stringify(hdWallet); 146 | } 147 | ``` 148 | 149 | Solana 的 BIP 44 编号是 501;并且将 BIP44 协议中的是否找零项目去掉了。 150 | 151 | 152 | 153 | ## 四.离线签名代码 154 | 155 | ```javascript 156 | export async function signSolTransaction (params) { 157 | const { from, amount, to, mintAddress, nonce, decimal, privateKey } = params; 158 | const fromAccount = Keypair.fromSecretKey(new Uint8Array(Buffer.from(privateKey, 'hex')), { skipValidation: true }); 159 | const calcAmount = new BigNumber(amount).times(new BigNumber(10).pow(decimal)).toString(); 160 | if (calcAmount.indexOf('.') !== -1) throw new Error('decimal 无效'); 161 | const tx = new Transaction(); 162 | const toPubkey = new PublicKey(to); 163 | const fromPubkey = new PublicKey(from); 164 | tx.recentBlockhash = nonce; 165 | if (mintAddress) { 166 | const mint = new PublicKey(mintAddress); 167 | const fromTokenAccount = await SPLToken.Token.getAssociatedTokenAddress( 168 | SPLToken.ASSOCIATED_TOKEN_PROGRAM_ID, 169 | SPLToken.TOKEN_PROGRAM_ID, 170 | mint, 171 | fromPubkey 172 | ); 173 | const toTokenAccount = await SPLToken.Token.getAssociatedTokenAddress( 174 | SPLToken.ASSOCIATED_TOKEN_PROGRAM_ID, 175 | SPLToken.TOKEN_PROGRAM_ID, 176 | mint, 177 | toPubkey 178 | ); 179 | tx.add( 180 | SPLToken.Token.createTransferInstruction( 181 | SPLToken.TOKEN_PROGRAM_ID, 182 | fromTokenAccount, 183 | toTokenAccount, 184 | fromPubkey, 185 | [fromAccount], 186 | calcAmount 187 | ) 188 | ); 189 | } else { 190 | tx.add( 191 | SystemProgram.transfer({ 192 | fromPubkey: fromAccount.publicKey, 193 | toPubkey: new PublicKey(to), 194 | lamports: calcAmount 195 | }) 196 | ); 197 | } 198 | tx.sign(fromAccount); 199 | return tx.serialize().toString('base64'); 200 | } 201 | ``` 202 | 203 | 本代码中有一点值得注意的是,solana 交易签名中的 nonce 是使用 recentBlockHash 做为签名的 nonce, 而且这个 recentBlockHash 签名的交易在一定时间内交易发出去有效,过了这个时间之后再发送交易会报 Block Not Found 的错误。 204 | 205 | 要解决交易 recentBlockHash 失效问题,需要授权一个新的地址做为获取签名的 Nonce 的地址,这样签名的消息才能很长时间内都有效。 206 | 207 | 代码如下: 208 | 209 | ```javascript 210 | export function prepareAccount(params){ 211 | const { 212 | authorAddress, from, recentBlockhash, minBalanceForRentExemption, privs, 213 | } = params; 214 | 215 | const authorPrivateKey = (privs?.find(ele=>ele.address===authorAddress))?.key; 216 | if(!authorPrivateKey) throw new Error("authorPrivateKey 为空"); 217 | const nonceAcctPrivateKey = (privs?.find(ele=>ele.address===from))?.key; 218 | if(!nonceAcctPrivateKey) throw new Error("nonceAcctPrivateKey 为空"); 219 | 220 | const author = Keypair.fromSecretKey(new Uint8Array(Buffer.from(authorPrivateKey, "hex"))); 221 | const nonceAccount = Keypair.fromSecretKey(new Uint8Array(Buffer.from(nonceAcctPrivateKey, "hex"))); 222 | 223 | 224 | let tx = new Transaction(); 225 | tx.add( 226 | SystemProgram.createAccount({ 227 | fromPubkey: author.publicKey, 228 | newAccountPubkey: nonceAccount.publicKey, 229 | lamports: minBalanceForRentExemption, 230 | space: NONCE_ACCOUNT_LENGTH, 231 | programId: SystemProgram.programId, 232 | }), 233 | 234 | SystemProgram.nonceInitialize({ 235 | noncePubkey: nonceAccount.publicKey, 236 | authorizedPubkey: author.publicKey, 237 | }) 238 | ); 239 | tx.recentBlockhash = recentBlockhash; 240 | 241 | 242 | tx.sign(author, nonceAccount); 243 | return tx.serialize().toString("base64"); 244 | } 245 | ``` 246 | 247 | 248 | 249 | ## 五.钱包开发相关的 RPC 接口 250 | 251 | ### 1.获取账户信息 252 | 253 | - 接口作用:本接口的作用是判断账户是否可用,如果 value 为 null, 说明不可用,否则可用 254 | - 接口名称:getAccountInfo 255 | - 接口参数:地址 256 | - 请求示范 257 | 258 | ```bash 259 | curl --location 'https://sly-yolo-dinghy.solana-mainnet.quiknode.pro/2ac2af5b8c2e5e9e74c7906e949f1976314aa996' \ 260 | --header 'Content-Type: application/json' \ 261 | --data '{ 262 | "jsonrpc": "2.0", 263 | "id": 1, 264 | "method": "getAccountInfo", 265 | "params": [ 266 | "4wHd9tf4x4FkQ3JtgsMKyiEofEHSaZH5rYzfFKLvtESD", 267 | { 268 | "encoding": "base58" 269 | } 270 | ] 271 | }' 272 | ``` 273 | 274 | - 返回值 275 | 276 | ```json 277 | { 278 | "jsonrpc": "2.0", 279 | "result": { 280 | "context": { 281 | "apiVersion": "1.17.34", 282 | "slot": 268835746 283 | }, 284 | "value": { 285 | "data": [ 286 | "", 287 | "base58" 288 | ], 289 | "executable": false, 290 | "lamports": 289995950, 291 | "owner": "11111111111111111111111111111111", 292 | "rentEpoch": 18446744073709551615, 293 | "space": 0 294 | } 295 | }, 296 | "id": 1 297 | } 298 | ``` 299 | 300 | - value 不为 null, 说明该地址能用 301 | 302 | ### 2.获取 recentBlochHash, 直接签名的话 recentBlochHash 相当于 nonce 303 | 304 | - 接口作用:获取最近的区块的 blockHash, 做为交易签名的 Nonce 305 | - 接口名称:getRecentBlockhash 306 | - 接口参数:无 307 | - 请求示范 308 | 309 | ```bash 310 | curl --location 'https://sly-yolo-dinghy.solana-mainnet.quiknode.pro/2ac2af5b8c2e5e9e74c7906e949f1976314aa996' \ 311 | --header 'Content-Type: application/json' \ 312 | --data '{ 313 | "jsonrpc":"2.0", 314 | "id":1, 315 | "method":"getRecentBlockhash" 316 | }' 317 | ``` 318 | 319 | - 返回值 320 | 321 | ```json 322 | { 323 | "jsonrpc": "2.0", 324 | "result": { 325 | "context": { 326 | "apiVersion": "1.17.34", 327 | "slot": 268809612 328 | }, 329 | "value": { 330 | "blockhash": "5k5Hh3gfRX4hJv9dqxfdMa6wSFkkZ631sf71kPqtCFv7", 331 | "feeCalculator": { 332 | "lamportsPerSignature": 5000 333 | } 334 | } 335 | }, 336 | "id": 1 337 | } 338 | ``` 339 | 340 | - blockhash 为要使用的值 341 | 342 | ### 3. 获取准备 nonce 账户的 Minimum Balance For Rent 数据 343 | 344 | - 接口作用:获取 rent 账户的最小 Rent 345 | - 接口名称:getMinimumBalanceForRentExemption 346 | - 接口参数:账户的数据长度 347 | - 请求示范 348 | 349 | ```bash 350 | curl --location 'https://sly-yolo-dinghy.solana-mainnet.quiknode.pro/2ac2af5b8c2e5e9e74c7906e949f1976314aa996' \ 351 | --header 'Content-Type: application/json' \ 352 | --data ' { 353 | "jsonrpc": "2.0", "id": 1, 354 | "method": "getMinimumBalanceForRentExemption", 355 | "params": [50] 356 | }' 357 | ``` 358 | 359 | - 返回值 360 | 361 | ```json 362 | { 363 | "jsonrpc": "2.0", 364 | "result": 1238880, 365 | "id": 1 366 | } 367 | ``` 368 | 369 | - result 的结果为 *prepareAccount* 的 minBalanceForRentExemption 值 370 | 371 | ### 4. 获取最新块高 (Slot) 372 | 373 | - 接口作用:获取最新的 slot 374 | - 接口名称:getSlot 375 | - 接口参数:无 376 | - 请求示范 377 | 378 | ```bash 379 | curl --location 'https://sly-yolo-dinghy.solana-mainnet.quiknode.pro/2ac2af5b8c2e5e9e74c7906e949f1976314aa996' \ 380 | --header 'Content-Type: application/json' \ 381 | --data '{"jsonrpc":"2.0","id":1, "method":"getSlot"}' 382 | ``` 383 | 384 | - 返回值 385 | 386 | ```json 387 | { 388 | "jsonrpc": "2.0", 389 | "result": 268840179, 390 | "id": 1 391 | } 392 | ``` 393 | 394 | - 返回值为最新的块高(Slot) 395 | 396 | ### 5. 根据块高获取交易 397 | 398 | - 接口作用:根据区块号获取里面的交易 399 | - 接口名称:getConfirmedBlock 400 | - 接口参数:区块高度和编码方式 401 | - 请求示范 402 | 403 | ```bash 404 | curl --location 'https://api.devnet.solana.com' \ 405 | --header 'Content-Type: application/json' \ 406 | --data '{ 407 | "jsonrpc": "2.0", "id": 1, 408 | "method": "getConfirmedBlock", 409 | "params": [ 410 | 268992938, 411 | { 412 | "encoding":"base64", 413 | "maxSupportedTransactionVersion": 0 414 | } 415 | ] 416 | }' 417 | ``` 418 | 419 | - 返回值 420 | 421 | ```json 422 | { 423 | "jsonrpc": "2.0", 424 | "result": { 425 | "blockTime": null, 426 | "blockhash": "3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA", 427 | "parentSlot": 429, 428 | "previousBlockhash": "mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B", 429 | "rewards": [], 430 | "transactions": [ 431 | { 432 | "meta": { 433 | "err": null, 434 | "fee": 5000, 435 | "innerInstructions": [], 436 | "logMessages": [], 437 | "postBalances": [499998932500, 26858640, 1, 1, 1], 438 | "postTokenBalances": [], 439 | "preBalances": [499998937500, 26858640, 1, 1, 1], 440 | "preTokenBalances": [], 441 | "status": { 442 | "Ok": null 443 | } 444 | }, 445 | "transaction": [ 446 | "AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==", 447 | "base64" 448 | ] 449 | } 450 | ] 451 | }, 452 | "id": 1 453 | } 454 | ``` 455 | 456 | 或者内部包含 457 | 458 | ```json 459 | { 460 | "parsed":{ 461 | "info":{ 462 | "amount":"12500", 463 | "authority":"CyZuD7RPDcrqCGbNvLCyqk6Py9cEZTKmNKujfPi3ynDd", 464 | "destination":"Ezts8ufHLpKmJsvXzPmguvvdtC18G8aQngQ9EyUAJrHf", 465 | "source":"FLffM77tZpRP7eRqQGfH7UA1j1j31csZ4f9CwQ4qbVjp" 466 | }, 467 | "type":"transfer" 468 | }, 469 | "program":"spl-token", 470 | "programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", 471 | "stackHeight":2 472 | } 473 | ``` 474 | 475 | - source 是转出地址 476 | - destination 转入地址 477 | - amount 是转账金额 478 | - type:转账类型 479 | 480 | ### 6. 根据交易 Hash 获取交易详情 481 | 482 | - 接口作用:根据交易 Hash 获取交易详情 483 | - 接口名称:getConfirmedTransaction 484 | - 接口参数:区块高度和编码方式 485 | - 请求示范 486 | 487 | ```bash 488 | curl --location 'https://sly-yolo-dinghy.solana-mainnet.quiknode.pro/2ac2af5b8c2e5e9e74c7906e949f1976314aa996' \ 489 | --header 'Content-Type: application/json' \ 490 | --data ' { 491 | "jsonrpc": "2.0", 492 | "id": 1, 493 | "method": "getConfirmedTransaction", 494 | "params": [ 495 | "5X6y7aVzC93nfHbPbcy1yU8jHeFj996ZrVzMfNFYqC59jJrVMPMj3zzCtfwnoJB8H7PcgZRhyMbz1znVt8CSoT35", 496 | { 497 | "encoding":"jsonParsed", 498 | "maxSupportedTransactionVersion": 0 499 | } 500 | ] 501 | }' 502 | ``` 503 | 504 | - 返回值 505 | 506 | ```json 507 | { 508 | "jsonrpc":"2.0", 509 | "result":{ 510 | "blockTime":1717073604, 511 | "transaction":{ 512 | "message":{ 513 | "accountKeys":[ 514 | 515 | ], 516 | "instructions":[ 517 | { 518 | "parsed":{ 519 | "info":{ 520 | "amount":"5000000000", 521 | "authority":"7JnucyofTX4Zk74jJ18HRhfKoBc8GgPM6ofQZ1EQLSpZ", 522 | "destination":"EgScKCKKWX1d7yEp7SBpErdvYsBXzYYgxtMWiSdbZL9S", 523 | "source":"FSkKxc5WBa7g6obBmXMavNmpuNPs25nukJz32DyHXuTM" 524 | }, 525 | "type":"transfer" 526 | }, 527 | "program":"spl-token", 528 | "programId":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", 529 | "stackHeight":null 530 | }, 531 | { 532 | "accounts":[ 533 | 534 | ], 535 | "data":"3MuSQQNShkST", 536 | "programId":"ComputeBudget111111111111111111111111111111", 537 | "stackHeight":null 538 | }, 539 | { 540 | "accounts":[ 541 | 542 | ], 543 | "data":"FtDxo9", 544 | "programId":"ComputeBudget111111111111111111111111111111", 545 | "stackHeight":null 546 | } 547 | ], 548 | "recentBlockhash":"HMzYzdmwMez5ueZA9yrWHT6V5ZT4VtD3CC4hsaN7a9m4" 549 | }, 550 | "signatures":[ 551 | "5X6y7aVzC93nfHbPbcy1yU8jHeFj996ZrVzMfNFYqC59jJrVMPMj3zzCtfwnoJB8H7PcgZRhyMbz1znVt8CSoT35" 552 | ] 553 | } 554 | }, 555 | "id":1 556 | } 557 | ``` 558 | 559 | - source 是转出地址 560 | - destination 转入地址 561 | - amount 是转账金额 562 | - type:转账类型 563 | 564 | ### 7.发送交易到区块链网络 565 | 566 | - 接口作用:发送交易到区块链网络 567 | - 接口名称:sendTransaction 568 | - 接口参数:区块高度和编码方式 569 | - 请求示范 570 | 571 | ```bash 572 | curl --location 'https://sly-yolo-dinghy.solana-mainnet.quiknode.pro/2ac2af5b8c2e5e9e74c7906e949f1976314aa996' \ 573 | --header 'Content-Type: application/json' \ 574 | --data '{ 575 | "jsonrpc": "2.0", 576 | "id": 1, 577 | "method": "sendTransaction", 578 | "params": [ 579 | "ASG4jVQEsZhgMGnkXIYEvyhvGMYBfwL8lFd40mPz4AjpeWqZlVM122Vx8iCZIUNmbGdqDcdplm0xMUGri4WiCAIBAAEDOns4dLpGe+a4HqNh49dFOvi4HIiu3SS1Ax/doLxxrTJa8yfsHKLzR/zaYPv8xS5VGKfAp4PkO8pQN4Jn396IRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKy6/vKD5x9Dmbz1bBJ85fYZK94CfRhjYwMBlQyb4mz8BAgIAAQwCAAAAQEIPAAAAAAA=", 580 | { 581 | "encoding":"base64" 582 | } 583 | 584 | ] 585 | }' 586 | ``` 587 | 588 | - 返回值 589 | 590 | ```json 591 | { 592 | "jsonrpc": "2.0", 593 | "result": "g6yMJUd16jAcPiQfi7QK1M5tN7yheeKAC7NbUh3BQCSfav3pgv74ovCSGuhgApzma1s6ew8WEmX1Bzfk6sCfg9P", 594 | "id": 1 595 | } 596 | ``` 597 | 598 | - 成功返回交易 Hash, 失败返回各种错误 599 | 600 | 601 | ## 六.HD 钱包开发 602 | 603 | ## **1.离线地生成和离线签名** 604 | 605 | 参考上面的代码 606 | 607 | ## **2.和链上交互的接口** 608 | 609 | - 获取账户余额 610 | - 根据地址获取交易记录 611 | - 获取预估手续费 612 | 613 | 对应代码库:https://github.com/the-web3/wallet-chain-node 614 | 615 | ## 八. 总结 616 | 617 | HD 钱包和交易所钱包不同之处有以下几点 618 | 619 | ## **1.密钥管理方式不同** 620 | 621 | - HD 钱包私钥在本地设备,私钥用户自己控制 622 | - 交易所钱包中心化服务器(CloadHSM, TEE 等),私钥项目方控制 623 | 624 | ## **2.资金存在方式不同** 625 | 626 | - HD 资金在用户钱包地址 627 | - 交易所钱包资金在交易所热钱包或者冷钱包里面, 用户提现的时候从交易所热钱包提取 628 | 629 | ## **3.业务逻辑不一致** 630 | 631 | - 中心化钱包:实时不断扫链更新交易数据和状态 632 | - HD 钱包:根据用户的操作通过请求接口实现业务逻辑 633 | 634 | 635 | # 九. 附录 636 | 637 | - RPC 文档:https://solana.com/docs/rpc 638 | - github: https://github.com/solana-labs 639 | - 浏览器 1:https://explorer.solana.com/ 640 | - 浏览器 2: https://solscan.io/ 641 | - 钱包相关的资料:https://solana.com/developers/cookbook 642 | - solana web3js: https://github.com/solana-labs/solana-web3.js 643 | 644 | --------------------------------------------------------------------------------