# @cosmsnap/snapper 中文文档

规范地址：https://npmcn.com/package/%40cosmsnap/snapper/

版本：0\.2\.7
npm 元数据更新时间：2024-08-28T19:32:08.226Z
中文译文更新时间：2026-11-10T20:24:41.232Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cosmsnap/snapper
原文对照：https://npmcn.com/package/%40cosmsnap/snapper/?lang=original
项目主页：https://github.com/cosmos/snap#readme
源码仓库：https://github.com/cosmos/snap

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：737 kB，24 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=16\.0\.0
- 运行依赖：6 个
- 首次发布：2023-09-08T07:06:20.908Z
- 最新版本发布：2024-08-28T19:32:08.038Z
- 近 30 天下载量：24175（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：40（近 12 个月 0 个）

## 中文简介

与 MetaMask 的 Cosmos 扩展交互的辅助软件包 .

## 安装

```sh
npm install @cosmsnap/snapper
```

也可以使用：`pnpm add @cosmsnap/snapper`、`yarn add @cosmsnap/snapper`、`bun add @cosmsnap/snapper`

## README

# Metamask 宇宙扩展提供库

Snapper是一个用于与Metamask的官方Cosmos扩展交互的实用库.

## Global 提供者 (窗口. kepler 正在替换中)

在您的 dApp 中添加提供者为全局对象 .

```typescript
import { CosmosSnap } from "@cosmsnap/snapper";
window.cosmos = new CosmosSnap();

const memo = "Hello from Metamask!";

let offlineSigner = await window.cosmos.getOfflineSigner("cosmoshub-4");

let wallet = await window.cosmos.getAccount("cosmoshub-4");

// Create a send token message
const msg = {
    typeUrl: "/cosmos.bank.v1beta1.MsgSend",
    value: {
    fromAddress: wallet.address,
    toAddress: "cosmos123456789",
    amount: [
        {
        denom: "uatom",
        amount: "10000",
        },
    ],
    },
};

// Create fee
const fee = {
    amount: [],
    gas: "200000",
};

const signingClient = await SigningStargateClient.connectWithSigner(
    "https://rpc-cosmoshub.whispernode.com:443",
    offlineSigner
);

const result = await signingClient.sign(wallet.address, [msg], fee, memo);
```

用于开发模式. `Note:` 你必须在本地运行,才能正常运行.

```typescript
window.cosmos.changeSnapId("local:http://localhost:8080");
```

提供者的结构.

```typescript
export interface SnapProvider {
  experimentalSuggestChain(chainInfo: ChainInfo): Promise<void>;
  signAmino(
    chainId: string,
    signer: string,
    signDoc: StdSignDoc,
  ): Promise<AminoSignResponse>;
  signDirect(
    chainId: string,
    signer: string,
    signDoc: {
      /** SignDoc bodyBytes */
      bodyBytes?: Uint8Array | null;

      /** SignDoc authInfoBytes */
      authInfoBytes?: Uint8Array | null;

      /** SignDoc chainId */
      chainId?: string | null;

      /** SignDoc accountNumber */
      accountNumber?: Long | null;
    },
  ): Promise<DirectSignResponse>;
  sendTx(
    chainId: string,
    tx: Uint8Array,
  ): Promise<DeliverTxResponse>;
  getOfflineSigner(chainId: string): Promise<OfflineAminoSigner & OfflineDirectSigner>;
  enabled(): Promise<boolean>;
  install(): Promise<void>;
  getChains(): Promise<Chain[]>;
  deleteChain(chain_id: string): Promise<void>;
  signAndBroadcast(chain_id: string, msgs: Msg[], fees: Fees): Promise<DeliverTxResponse>;
  sign(chain_id: string, msgs: Msg[], fees: Fees): Promise<Int8Array>;
  addAddressToBook(chain_id: string, address: string, name: string): Promise<void>;
  getAddressBook(): Promise<Address[]>;
  deleteAddressFromBook(address: string): Promise<void>;
  getBech32Addresses(): Promise<CosmosAddress[]>;
  getBech32Address(chain_id: string): Promise<CosmosAddress>;
  getAccount(chain_id: string): Promise<AccountData>;
  changeSnapId(snap_id: string): void;
}
```

## 直接交互函数

您可以直接与这些功能交互, 尽管我们强烈建议通过窗口使用提供商, 因为它是其他 Cosmos 钱包的倒置 .

### 选中已安装

```typescript
import { isSnapInstalled } from '@cosmsnap/snapper';
let result: boolean = await isSnapInstalled();
```

### 检查是否初始化

```typescript
import { isSnapInitialized } from '@cosmsnap/snapper';
let result: boolean = await isSnapInitialized();
```

### 安装宇宙扩展 .

```typescript
import { installSnap } from '@cosmsnap/snapper';
await installSnap();
```

### 建议链.

使用这样的格式 [这里](https://github.com/cosmos/chain-registry/blob/master/agoric/chain.json) 在链式登记册中。 资料越多越好.

```typescript
import { suggestChain } from '@cosmsnap/snapper';
let chain: Chain = {};
await suggestChain(chain);
```

### 拿链子来.

得到所有的锁链 处于状态在扣子.

```typescript
import { getChains } from '@cosmsnap/snapper';
let chains: []Chain = await getChains();
```

### 删除链条.

从钱包状态删除一个链条 .

```typescript
import { deleteChain } from '@cosmsnap/snapper';
await deleteChain("cosmoshub-4");
```

### 签名广播( B) .

签名并广播交易。 注意,您可以使用我们的制作级基础设施(RPC)使用此功能广播交易.

```typescript
import { signAndBroadcast } from '@cosmsnap/snapper';
import { DeliverTxResponse } from "@cosmjs/stargate";

const msgs = [
    {
        typeUrl: "/cosmos.bank.v1beta1.MsgSend",
        value: {
            fromAddress: senderAddress,
            toAddress: recipientAddress,
            amount: [{
                denom: "uatom",
                amount: "500000"
            }],
        },
    }
];
const fees = {
    amount: [{
        denom: "uatom",
        amount: "500"
    }],
    gas: "200000"
};
let txResult: DeliverTxResponse = await signAndBroadcast("cosmoshub-4", msgs, fees);
```

### 签署交易.

签个协议,然后退货 注意,这不使用我们的生产等级基础设施。 你必须用你自己的 广播交易.

```typescript
import { sign } from '@cosmsnap/snapper';
import { DeliverTxResponse } from "@cosmjs/stargate";

const msgs = [
    {
        typeUrl: "/cosmos.bank.v1beta1.MsgSend",
        value: {
            fromAddress: senderAddress,
            toAddress: recipientAddress,
            amount: [{
                denom: "uatom",
                amount: "500000"
            }],
        },
    }
];
const fees = {
    amount: [{
        denom: "uatom",
        amount: "500"
    }],
    gas: "200000"
};
let txResult: DeliverTxResponse = await sign("cosmoshub-4", msgs, fees);
```

### 添加地址到地址簿 .

```typescript
import { addAddressToBook } from '@cosmsnap/snapper';
await addAddressToBook("cosmoshub-4", "cosmos123456789", "John Doe");
```

### 获取地址簿

```typescript
import { getAddressBook } from '@cosmsnap/snapper';
let book: Address[] = await getAddressBook();
```

### 从地址簿中删除地址

```typescript
import { deleteAddressFromBook } from '@cosmsnap/snapper';
await deleteAddressFromBook("cosmos123456789");
```

### 获取全部 Bech32 地址

获取州内所有链条的 Bech32 地址 。 注意,这是一个昂贵的沉重行动 所以明智使用.

```typescript
import { getBech32Addresses } from '@cosmsnap/snapper';
let allAddresses: CosmosAddress[] = await getBech32Addresses();
```

### 获取全部 Bech32 地址

获得链式Bech32地址.

```typescript
import { getBech32Addresses } from '@cosmsnap/snapper';
let address: CosmosAddress = await getBech32Address("cosmoshub-4");
```

## 常见问题

### @cosmsnap/snapper 是什么？

与 MetaMask 的 Cosmos 扩展交互的辅助软件包 \.

### 如何安装 @cosmsnap/snapper？

在项目目录运行 npm install @cosmsnap/snapper，或使用 pnpm add / yarn add / bun add。

### @cosmsnap/snapper 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @cosmsnap/snapper 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @cosmsnap/snapper 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=16\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @cosmsnap/snapper 可以商用吗？

@cosmsnap/snapper 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @cosmsnap/snapper 的下载量有多少？

根据 npm 官方下载统计，@cosmsnap/snapper 在 2026/10/11 – 2026/11/09 这 30 天内被下载 24,175 次，日均约 806 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @cosmsnap/snapper 还在维护吗？

最新版本 0\.2\.7 发布于 2024/08/29（2 年前）；至今共发布 40 个版本，其中过去 12 个月发布了 0 个；首次发布于 2023/09/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

