Bankrx402SDK客户端模式Skill Bankrx402SDK-ClientPatterns

此技能提供Bankr SDK的客户端模式代码和通用项目文件,用于实现AI驱动的Web3操作和x402微支付集成,支持交易执行和区块链交互。关键词:Bankr SDK、客户端开发、Web3、区块链、微支付、交易执行、TypeScript、DApp集成。

Web3 0 次安装 0 次浏览 更新于 3/15/2026

name: Bankr x402 SDK - 客户端模式 description: 当用户询问“实现Bankr SDK客户端”、“编写bankr-client.ts”、“创建SDK客户端设置”、“SDK项目的通用文件”、“Bankr SDK的package.json”、“Bankr的tsconfig”、“SDK TypeScript模式”、“执行SDK交易”,或需要用于Bankr SDK集成的可重用客户端代码和通用项目文件时,应使用此技能。 version: 1.0.0

x402 SDK 客户端模式

用于Bankr SDK项目的可重用客户端代码和通用文件。

bankr-client.ts

所有Bankr SDK项目的核心SDK客户端模块:

import "dotenv/config";
import { BankrClient } from "@bankr/sdk";

// ============================================
// 验证
// ============================================

if (!process.env.BANKR_PRIVATE_KEY) {
  throw new Error(
    "BANKR_PRIVATE_KEY环境变量是必需的。" +
      "此钱包为每个请求支付0.01 USDC(需要在Base上有USDC)。"
  );
}

// ============================================
// 客户端设置
// ============================================

/**
 * Bankr SDK 客户端
 *
 * 提供AI驱动的Web3操作,支持x402微支付。
 * 每个API请求成本为0.01 USDC(由Base上的支付钱包支付)。
 *
 * @example
 * ```typescript
 * import { bankrClient } from "./bankr-client";
 *
 * // 代币交换
 * const swap = await bankrClient.promptAndWait({
 *   prompt: "在Base上交换0.1 ETH到USDC",
 * });
 *
 * // 检查余额
 * const balances = await bankrClient.promptAndWait({
 *   prompt: "我的代币余额是什么?",
 * });
 * ```
 *
 * @see https://www.npmjs.com/package/@bankr/sdk
 */
export const bankrClient = new BankrClient({
  // 必需:支付钱包私钥
  // 此钱包为每个API请求支付0.01 USDC(必须在Base上有USDC)
  privateKey: process.env.BANKR_PRIVATE_KEY as `0x${string}`,

  // 可选:覆盖接收钱包地址
  // 如果未设置,代币将发送到支付钱包地址
  walletAddress: process.env.BANKR_WALLET_ADDRESS,

  // 可选:API端点(默认为生产环境)
  ...(process.env.BANKR_API_URL && { baseUrl: process.env.BANKR_API_URL }),
});

// 导出钱包地址以供参考
export const walletAddress = bankrClient.getWalletAddress();

// ============================================
// 类型(从SDK重新导出)
// ============================================

export type { JobStatusResponse, Transaction } from "@bankr/sdk";

executor.ts

使用viem的事务执行助手:

import { createWalletClient, http, type WalletClient } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base, mainnet, polygon } from "viem/chains";
import type { Transaction } from "@bankr/sdk";

// 链配置
const chains = {
  8453: base,
  1: mainnet,
  137: polygon,
} as const;

// 创建用于事务执行的钱包客户端
const account = privateKeyToAccount(
  process.env.BANKR_PRIVATE_KEY as `0x${string}`
);

function getWalletClient(chainId: number): WalletClient {
  const chain = chains[chainId as keyof typeof chains];
  if (!chain) {
    throw new Error(`不支持的链ID: ${chainId}`);
  }

  return createWalletClient({
    account,
    chain,
    transport: http(),
  });
}

/**
 * 执行Bankr SDK返回的事务
 *
 * @example
 * ```typescript
 * const result = await bankrClient.promptAndWait({
 *   prompt: "交换0.1 ETH到USDC",
 * });
 *
 * if (result.transactions?.length) {
 *   const hash = await executeTransaction(result.transactions[0]);
 *   console.log("事务:", hash);
 * }
 * ```
 */
export async function executeTransaction(tx: Transaction): Promise<string> {
  const txData = tx.metadata.transaction;
  const client = getWalletClient(txData.chainId);

  console.log(`在链${txData.chainId}上执行${tx.type}...`);

  const hash = await client.sendTransaction({
    to: txData.to as `0x${string}`,
    data: txData.data as `0x${string}`,
    value: BigInt(txData.value || "0"),
    gas: BigInt(txData.gas),
  });

  console.log(`事务已提交: ${hash}`);
  return hash;
}

/**
 * 执行Bankr结果中的所有事务
 */
export async function executeAllTransactions(
  transactions: Transaction[]
): Promise<string[]> {
  const hashes: string[] = [];

  for (const tx of transactions) {
    const hash = await executeTransaction(tx);
    hashes.push(hash);
  }

  return hashes;
}

通用文件

package.json

所有Bankr SDK项目的基础package.json:

{
  "name": "{项目名称}",
  "version": "0.1.0",
  "description": "{描述}",
  "type": "module",
  "main": "dist/index.js",
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js",
    "dev": "tsx src/index.ts"
  },
  "dependencies": {
    "@bankr/sdk": "^1.0.0",
    "dotenv": "^16.3.1",
    "viem": "^2.0.0"
  },
  "devDependencies": {
    "@types/node": "^20.10.0",
    "tsx": "^4.7.0",
    "typescript": "^5.3.0"
  }
}

框架特定依赖

根据项目模板添加:

Web服务(Express):

"dependencies": {
  "express": "^4.18.0"
},
"devDependencies": {
  "@types/express": "^4.17.21"
}

CLI:

"dependencies": {
  "commander": "^12.0.0"
}

tsconfig.json

TypeScript配置:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "declaration": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

.env.example

环境变量模板:

# Bankr SDK 配置
# 参见:https://docs.bankr.bot

# 必需:支付钱包私钥
# 此钱包为每个API请求支付0.01 USDC(必须在Base上有USDC)
# 格式:64位十六进制字符,带0x前缀
BANKR_PRIVATE_KEY=0x

# 可选:接收钱包地址
# 交换/购买得到的代币发送到此地址。如果未设置,默认为支付钱包地址。
# BANKR_WALLET_ADDRESS=0x

# 可选:API端点覆盖(默认为https://api.bankr.bot)
# BANKR_API_URL=https://api.bankr.bot

.gitignore

标准忽略模式:

# 依赖项
node_modules/

# 构建输出
dist/

# 环境变量
.env
.env.local
.env.*.local

# 日志
*.log
npm-debug.log*

# IDE
.idea/
.vscode/
*.swp
*.swo

# 操作系统
.DS_Store
Thumbs.db

# 测试
coverage/

使用模式

基本使用

import { bankrClient } from "./bankr-client";

const result = await bankrClient.promptAndWait({
  prompt: "ETH的价格是什么?",
  onStatusUpdate: (msg) => console.log("进度:", msg),
});

console.log(result.response);

带事务执行

import { bankrClient } from "./bankr-client";
import { executeTransaction } from "./executor";

const result = await bankrClient.promptAndWait({
  prompt: "在Base上交换0.1 ETH到USDC",
});

if (result.status === "completed" && result.transactions?.length) {
  // 执行前检查
  console.log("事务已就绪:", result.transactions[0].type);
  console.log("详细信息:", result.transactions[0].metadata.__ORIGINAL_TX_DATA__);

  // 执行
  const hash = await executeTransaction(result.transactions[0]);
  console.log("已执行:", hash);
}

带错误处理

import { bankrClient } from "./bankr-client";
import { executeAllTransactions } from "./executor";

async function performSwap(prompt: string) {
  try {
    const result = await bankrClient.promptAndWait({
      prompt,
      onStatusUpdate: console.log,
    });

    if (result.status === "completed") {
      console.log("成功:", result.response);

      if (result.transactions?.length) {
        const hashes = await executeAllTransactions(result.transactions);
        console.log("事务:", hashes);
      }
    } else if (result.status === "failed") {
      console.error("失败:", result.error);
    }
  } catch (error) {
    console.error("错误:", error.message);
  }
}

查询无事务

import { bankrClient } from "./bankr-client";

// 余额查询不返回事务
const balances = await bankrClient.promptAndWait({
  prompt: "我在Base上的余额是什么?",
});

console.log(balances.response);

// 价格查询
const price = await bankrClient.promptAndWait({
  prompt: "DEGEN的价格",
});

console.log(price.response);

SDK参考

咨询sdk-capabilities技能以获取:

  • 完整操作参考
  • 支持的链和代币
  • 每个操作的示例提示

咨询sdk-token-swaps技能以获取:

  • 交换模式和批准处理
  • 事务执行详细信息