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/7/30 18:58:55 阅读更多 →
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/7/30 18:57:55 阅读更多 →
让视频中的人物动起来:AI动作迁移技术如何改变内容创作?

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

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

2026/7/30 18:57:55 阅读更多 →

最新新闻

企业内部薪酬差距(1999-2025)

企业内部薪酬差距(1999-2025)

时间跨度1999-2025区域跨度中国A股上市公司数据格式Excel形式数据简介企业内部薪酬差距,是基于上市公司公开披露的财务与治理数据,通过计算并对比公司核心管理层与普通员工之间的平均薪酬水平,旨在衡量企业内部收入不平等程度的量化指标。其核…

2026/7/30 19:12:58 阅读更多 →
Windows右键菜单深度定制指南:3个进阶场景打造你的专属效率工具

Windows右键菜单深度定制指南:3个进阶场景打造你的专属效率工具

Windows右键菜单深度定制指南:3个进阶场景打造你的专属效率工具 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单的杂乱无章…

2026/7/30 19:12:58 阅读更多 →
成都劳务资质代办机构

成都劳务资质代办机构

在成都搞建筑的老总们都知道,劳务资质是新办门槛最低、但踩坑率最高的资质类型。很多老板觉得“随便找个代办就能办”,结果被低价引流、资料驳回、中途加价搞得焦头烂额——花了钱、费了时,证还拿不到。 作为深耕成都建筑企业服务8年的专业团…

2026/7/30 19:12:58 阅读更多 →
3步掌握BlendArMocap:Blender无标记实时动作捕捉的终极指南

3步掌握BlendArMocap:Blender无标记实时动作捕捉的终极指南

3步掌握BlendArMocap:Blender无标记实时动作捕捉的终极指南 【免费下载链接】BlendArMocap realtime motion tracking in blender using mediapipe and rigify 项目地址: https://gitcode.com/gh_mirrors/bl/BlendArMocap BlendArMocap是一款革命性的Blender…

2026/7/30 19:12:58 阅读更多 →
三步轻松备份QQ空间历史说说:GetQzonehistory完全指南

三步轻松备份QQ空间历史说说:GetQzonehistory完全指南

三步轻松备份QQ空间历史说说:GetQzonehistory完全指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里的珍贵回忆会随着时间流逝而消失?那些记…

2026/7/30 19:12:58 阅读更多 →
终极指南:如何免费使用Buzz实现高效离线语音转文字

终极指南:如何免费使用Buzz实现高效离线语音转文字

终极指南:如何免费使用Buzz实现高效离线语音转文字 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz 你是否曾经需要…

2026/7/30 19:11:58 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻