CosmJS模块化开发:从基础包到自定义Stargate模块全攻略
CosmJS模块化开发从基础包到自定义Stargate模块全攻略【免费下载链接】cosmjsThe Swiss Army knife to power JavaScript based client solutions ranging from Web apps/explorers over browser extensions to server-side clients like faucets/scrapers.项目地址: https://gitcode.com/gh_mirrors/co/cosmjsCosmJS作为Cosmos生态系统中强大的JavaScript开发工具包提供了从Web应用、浏览器扩展到服务器端客户端如水龙头和刮板的全方位支持。本文将带您深入了解CosmJS的模块化架构从核心基础包到自定义Stargate模块的完整开发流程帮助您快速掌握这一瑞士军刀级工具的使用方法。一、CosmJS模块化架构解析CosmJS采用了精心设计的模块化架构通过多个npm包组成的monorepo形式提供功能。这种设计确保了代码质量并让用户可以精确选择所需功能。核心包概览CosmJS生态包含多个核心包每个包专注于特定功能cosmjs/stargate(packages/stargate): 用于Cosmos SDK 0.40Stargate的客户端库cosmjs/cosmwasm(packages/cosmwasm): 支持CosmWasm模块的Stargate链客户端cosmjs/crypto(packages/crypto): 区块链项目的加密功能包括哈希、签名、HD密钥派生等cosmjs/encoding(packages/encoding): 区块链项目的编码辅助工具cosmjs/math(packages/math): 安全整数和金融金额处理的小数运算模块化依赖关系CosmJS的模块化设计体现在清晰的依赖关系上。每个包都有明确的职责右侧包依赖于左侧包如果您需要查看包含应用运行时依赖的完整版本可以查看cosmjs-tree-full.png。二、开发环境搭建开始使用CosmJS进行模块化开发前需要准备以下开发环境系统要求Node.js 20现代浏览器Chromium/Firefox/Safari浏览器扩展开发环境如需要TypeScript支持安装依赖首先克隆CosmJS仓库git clone https://gitcode.com/gh_mirrors/co/cosmjs cd cosmjs然后安装项目依赖yarn install对于特定功能开发您可能需要安装以下核心包dependencies: { cosmjs/proto-signing: ^0.26.4, cosmjs/stargate: ^0.26.4, cosmjs/tendermint-rpc: ^0.26.4 }同时安装开发依赖yarn add --dev ts-proto您还需要安装protocProtocol Buffers编译器本文基于版本3.17。三、基础包使用指南1. 加密功能 (cosmjs/crypto)packages/crypto提供了区块链开发所需的各种加密功能哈希算法SHA-2, Keccak256, Ripemd160签名算法secp256k1, ed25519HD密钥派生BIP-39, SLIP-0010密钥存储的KDF和对称加密PBKDF2, Argon2, XChaCha20Poly1305基本使用示例import { sha256, secp256k1 } from cosmjs/crypto; // 哈希计算 const hash sha256(Buffer.from(hello world)); // 密钥对生成 const { privkey, pubkey } await secp256k1.generateKeyPair(); // 签名 const message Buffer.from(important message); const signature await secp256k1.sign(privkey, message);2. 编码功能 (cosmjs/encoding)packages/encoding提供了区块链开发中常用的编码和解码功能Base64编码/解码Bech32地址编码Hex编码/解码UTF8字符串处理使用示例import { bech32, base64, hex } from cosmjs/encoding; // Bech32地址编码 const address bech32.encode(cosmos, new Uint8Array([0x01, 0x02, 0x03])); // Base64编码 const encoded base64.encode(Buffer.from(hello)); // Hex编码 const hexString hex.encode(Buffer.from(hello));3. 数学功能 (cosmjs/math)packages/math提供了安全处理整数和金融金额的功能import { Decimal, Int53 } from cosmjs/math; // 安全整数处理 const safeNumber Int53.fromString(9007199254740991); // 小数运算金融金额 const amount Decimal.fromUserInput(123.456, 6); const doubled amount.multiply(Decimal.fromAtomics(2, 0));四、Stargate客户端开发packages/stargate是CosmJS的核心包提供了与Cosmos SDK 0.40Stargate兼容的客户端功能。1. 连接到区块链import { StargateClient } from cosmjs/stargate; async function connect() { const client await StargateClient.connect(https://rpc.cosmos.network); console.log(Connected to chain:, await client.getChainId()); console.log(Latest block height:, await client.getHeight()); } connect();2. 创建签名客户端import { DirectSecp256k1HdWallet, SigningStargateClient } from cosmjs/stargate; async function createSigningClient() { const mnemonic economy stock theory fatal elder harbor betray wasp final emotion task crumble siren bottom lizard educate guess current outdoor pair theory focus wife stone; const wallet await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { prefix: cosmos }); const client await SigningStargateClient.connectWithSigner( https://rpc.cosmos.network, wallet ); return client; }3. 发送交易async function sendTokens() { const client await createSigningClient(); const [firstAccount] await client.getAccounts(); const recipient cosmos1abcdefghijklmnopqrstuvwxyz; const amount [{ denom: uatom, amount: 100000 }]; const fee { amount: [{ denom: uatom, amount: 500 }], gas: 200000, }; const result await client.sendTokens(firstAccount.address, recipient, amount, fee); console.log(Transaction hash:, result.transactionHash); } sendTokens();五、自定义Stargate模块开发全流程CosmJS不仅支持标准Cosmos SDK模块还允许您为自定义模块开发客户端支持。以下是创建自定义Stargate模块客户端的完整流程。步骤1获取Protocol Buffer定义文件首先您需要获取自定义模块的.proto定义文件。通常有两种方式从外部源下载副本到项目中例如使用脚本下载使用Git子模块链接外部仓库CosmJS使用脚本下载定义文件的示例可参考此脚本。步骤2生成TypeScript编解码器使用ts-proto生成TypeScript编解码器protoc \ --plugin./node_modules/.bin/protoc-gen-ts_proto \ --ts_proto_out./path/to/output/directory \ --proto_path./path/to/definitions \ --ts_proto_optesModuleInteroptrue,forceLonglong,useOptionalstrue \ ./path/to/definitions/file.protoCosmJS的stargate包使用的生成脚本可参考此处。步骤3使用自定义消息类型创建包含自定义消息的签名客户端import { DirectSecp256k1HdWallet, Registry } from cosmjs/proto-signing; import { defaultRegistryTypes, SigningStargateClient } from cosmjs/stargate; import { MsgXxx } from ./path/to/generated/codec/my/custom/tx; // 创建包含自定义类型的注册表 const myRegistry new Registry(defaultRegistryTypes); myRegistry.register(/my.custom.MsgXxx, MsgXxx); async function createCustomClient() { const mnemonic your mnemonic here; const signer await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { prefix: myprefix }); const client await SigningStargateClient.connectWithSigner( my.endpoint.com, signer, { registry: myRegistry } ); return client; }发送自定义消息async function sendCustomMessage() { const client await createCustomClient(); const [firstAccount] await client.getAccounts(); const message { typeUrl: /my.custom.MsgXxx, value: MsgXxx.fromPartial({ foo: bar, creator: firstAccount.address, }), }; const fee { amount: [{ denom: udenom, amount: 120000 }], gas: 100000, }; const response await client.signAndBroadcast(firstAccount.address, [message], fee); console.log(Custom message sent. Transaction hash:, response.transactionHash); }步骤4创建自定义查询服务实例化查询客户端import { createProtobufRpcClient, QueryClient } from cosmjs/stargate; import { Tendermint34Client } from cosmjs/tendermint-rpc; import { QueryClientImpl } from ./path/to/generated/codec/my/custom/query; async function createCustomQueryClient() { const tendermintClient await Tendermint34Client.connect(my.endpoint.com); const queryClient new QueryClient(tendermintClient); const rpcClient createProtobufRpcClient(queryClient); return new QueryClientImpl(rpcClient); }扩展查询客户端// 定义扩展 function setupXxxExtension(base: QueryClient) { const rpcClient createProtobufRpcClient(base); const queryService new QueryClientImpl(rpcClient); return { mymodule: { customQuery: async (foo: string) queryService.MyCustomQuery({ foo }), anotherQuery: async () queryService.MyAnotherQuery({}), }, }; } // 使用扩展 async function useExtendedQueryClient() { const tendermintClient await Tendermint34Client.connect(my.endpoint.com); const queryClient QueryClient.withExtensions(tendermintClient, setupXxxExtension); const result await queryClient.mymodule.customQuery(bar); console.log(Custom query result:, result); }CosmJS如何为默认查询客户端设置bank扩展的示例可参考此处。六、Webpack配置使用Webpack 5时需要显式配置Node.js类型和模块module.exports { plugins: [ new webpack.ProvidePlugin({ Buffer: [buffer, Buffer], }), ], resolve: { fallback: { buffer: false, crypto: false, events: false, path: false, stream: false, string_decoder: false, }, }, };对于CosmJS 0.28版本stream配置有所不同resolve: { fallback: { // ...其他配置 stream: require.resolve(stream-browserify), }, }七、总结与进阶资源CosmJS的模块化设计为Cosmos生态系统的JavaScript开发提供了强大支持。通过本文介绍的基础包使用和自定义Stargate模块开发流程您可以构建从简单查询到复杂交易的全方位区块链应用。进阶学习资源完整API文档cosmos.github.io/cosmjsCosmJS示例guided tour测试用例signingstargateclient.spec.ts自定义模块文档CUSTOM_PROTOBUF_CODECS.md通过这些资源您可以进一步探索CosmJS的强大功能开发出更加复杂和高效的Cosmos生态应用。无论您是构建Web应用、浏览器扩展还是服务器端工具CosmJS的模块化设计都能满足您的需求让开发过程更加灵活和高效。【免费下载链接】cosmjsThe Swiss Army knife to power JavaScript based client solutions ranging from Web apps/explorers over browser extensions to server-side clients like faucets/scrapers.项目地址: https://gitcode.com/gh_mirrors/co/cosmjs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从零搭建AI考研知识体系:用LLM自动构建专业课思维导图+错题归因模型(含可运行Python脚本)

从零搭建AI考研知识体系:用LLM自动构建专业课思维导图+错题归因模型(含可运行Python脚本)

更多请点击: https://kaifayun.com 第一章:AI考研专业课备考的核心挑战与LLM赋能范式 AI考研专业课涵盖数据结构、算法设计、机器学习原理、计算机组成原理及数学基础(线性代数、概率论、最优化)等多个高耦合模块,考…

2026/9/11 14:12:59 阅读更多 →
Windows上直接运行安卓应用:APK安装器完整指南

Windows上直接运行安卓应用:APK安装器完整指南

Windows上直接运行安卓应用:APK安装器完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想过在Windows电脑上直接运行安卓应用&#xff0c…

2026/9/19 22:36:54 阅读更多 →
让视频中的人物动起来:AI动作迁移技术如何改变内容创作?

让视频中的人物动起来:AI动作迁移技术如何改变内容创作?

让视频中的人物动起来:AI动作迁移技术如何改变内容创作? 【免费下载链接】ComfyUI-MimicMotionWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-MimicMotionWrapper 想象一下,你拍摄了一段简单的站立视频,却…

2026/9/19 22:36:20 阅读更多 →

最新新闻

基于 InstantDB 的 Stripe 一次性购买模式:Token 先行、Webhook 记账与字段级权限解锁

基于 InstantDB 的 Stripe 一次性购买模式:Token 先行、Webhook 记账与字段级权限解锁

基于 InstantDB 的 Stripe 一次性购买模式:Token 先行、Webhook 记账与字段级权限解锁 【免费下载链接】instant Instant is the best backend for AI-coded apps. You get auth, permissions, storage, presence, and streams — everything you need to ship apps…

2026/9/24 16:40:54 阅读更多 →
用 GN 构建 Skottie iOS 示例应用:Metal / CPU / OpenGL 三种后端完整指南

用 GN 构建 Skottie iOS 示例应用:Metal / CPU / OpenGL 三种后端完整指南

图形学 【免费下载链接】skia Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions. 项目地址: https://gitcode.com/gh_mirrors/ski/skia 点击查看 免费下载 导读 本文以 Skia 仓…

2026/9/24 16:40:53 阅读更多 →
拆解简博斯JG-M系列在线测径方案:双远心光学、85ms节拍与动态精度是怎么配合的

拆解简博斯JG-M系列在线测径方案:双远心光学、85ms节拍与动态精度是怎么配合的

在线测径看起来就是“拍个照量一下”,但真放到无心磨床出料口,要同时解决三件事:零件在动、零件在滚、零件表面反光各不相同。简博斯JG-M系列在线投影图像测量仪的技术方案,本质上是围绕这三个约束做的光学、算法和接口设计。 为什…

2026/9/24 16:40:53 阅读更多 →
ParlAI 中的 CNN/DM 摘要任务:从数据构建到 Teacher 实现的完整解析

ParlAI 中的 CNN/DM 摘要任务:从数据构建到 Teacher 实现的完整解析

NLP人工智能深度学习 【免费下载链接】ParlAI A framework for training and evaluating AI models on a variety of openly available dialogue datasets. 项目地址: https://gitcode.com/gh_mirrors/pa/ParlAI 点击查看 免费下载 本文围绕 ParlAI 任务库中的 cnn…

2026/9/24 16:40:53 阅读更多 →
远程软件哪个好用?2026年远程控制工具怎么选

远程软件哪个好用?2026年远程控制工具怎么选

如果你正在搜索“远程软件哪个好用”,先给一个比较实际的结论:没有一款远程软件适合所有人,关键要看你是临时协助、远程办公,还是需要长时间连接和托管。 我把常见需求拆开对比后,比较推荐优先试用支持多端连接、操作路…

2026/9/24 16:40:53 阅读更多 →
@vanilla-extract/dynamic 使用指南:在零运行时架构下动态赋值 CSS 变量(assignInlineVars 与 setElementVars)

@vanilla-extract/dynamic 使用指南:在零运行时架构下动态赋值 CSS 变量(assignInlineVars 与 setElementVars)

前端开发工具 【免费下载链接】vanilla-extract Zero-runtime Stylesheets-in-TypeScript 项目地址: https://gitcode.com/gh_mirrors/va/vanilla-extract 点击查看 免费下载 导读 vanilla-extract 是一款「Zero-runtime Stylesheets-in-TypeScript」方案&#xf…

2026/9/24 16:39:46 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →