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 19:00:24阅读更多 →
5个简单技巧:用SillyTavern打造有灵魂的AI角色对话体验

5个简单技巧:用SillyTavern打造有灵魂的AI角色对话体验

5个简单技巧:用SillyTavern打造有灵魂的AI角色对话体验 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否曾幻想过与AI角色进行真正有情感的对话?厌倦了机械式的…

2026/7/30 19:00:24阅读更多 →
CLIP:连接视觉与语言的桥梁,开启零样本智能新时代

CLIP:连接视觉与语言的桥梁,开启零样本智能新时代

CLIP:连接视觉与语言的桥梁,开启零样本智能新时代 【免费下载链接】CLIP CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image 项目地址: https://gitcode.com/GitHub_Trending/cl/CLIP 想象…

2026/7/30 19:00:24阅读更多 →
基于协同过滤算法的宠物用品推荐系统设计与实现

基于协同过滤算法的宠物用品推荐系统设计与实现

协同过滤算法在宠物用品推荐系统中的应用背景随着电子商务的快速发展,宠物用品市场呈现爆发式增长。宠物主人对个性化推荐的需求日益增加,传统的推荐方式难以满足用户多样化的购物需求。协同过滤算法因其在用户行为分析和偏好预测上的优势,成…

2026/7/30 23:30:34阅读更多 →
3个常见项目管理痛点与OpenProject开源解决方案实战指南

3个常见项目管理痛点与OpenProject开源解决方案实战指南

3个常见项目管理痛点与OpenProject开源解决方案实战指南 【免费下载链接】openproject OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracki…

2026/7/30 23:30:34阅读更多 →
3个颠覆性技巧让离线OCR效率翻倍:Umi-OCR完全指南

3个颠覆性技巧让离线OCR效率翻倍:Umi-OCR完全指南

3个颠覆性技巧让离线OCR效率翻倍:Umi-OCR完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。…

2026/7/30 23:30:34阅读更多 →
无广告WinRAR绿色版:高效压缩解压解决方案

无广告WinRAR绿色版:高效压缩解压解决方案

1. 为什么我们需要一个无广告的WinRAR绿色版?WinRAR作为老牌压缩解压工具,从Windows 98时代就陪伴着我们。但近年来官方版本频繁弹出的购买提示和广告窗口,让很多用户感到困扰。特别是在工作场景中,突然弹出的广告不仅打断工作流&…

2026/7/30 23:30:34阅读更多 →
医疗管理系统界面设计核心原则与Qt/WPF/PyQt5技术选型指南

医疗管理系统界面设计核心原则与Qt/WPF/PyQt5技术选型指南

1. 项目概述:为什么医疗管理系统界面设计是“硬骨头”?干了十几年软件开发和产品设计,经手过金融、教育、政务等多个领域的系统,但每次接到医疗管理系统的界面设计需求,心里还是会“咯噔”一下。这绝对是一块“硬骨头”…

2026/7/30 23:30:34阅读更多 →
如何用Uncle小说打造你的个人数字图书馆:免费桌面阅读神器完全指南

如何用Uncle小说打造你的个人数字图书馆:免费桌面阅读神器完全指南

如何用Uncle小说打造你的个人数字图书馆:免费桌面阅读神器完全指南 【免费下载链接】uncle-novel 📖 Uncle小说,PC版,一个全网小说下载器及阅读器,目录解析与书源结合,支持有声小说与文本小说,可…

2026/7/30 23:28:32阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

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

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

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →