跳至主要内容

钱包概览

ONE SDK 的钱包模块提供了一个统一接口,用于在多条 EVM 链上创建和管理钱包。根据你的应用需求,可以使用智能钱包(账户抽象)或传统的 EOA 钱包

智能钱包 vs EOA 钱包

功能智能钱包EOA 钱包
账户抽象是 (ERC-4337)
Gas 赞助
批量交易
社交恢复
密钥类型基于合约私钥
部署方式首次交易时部署即时

创建钱包

使用 engine client 的 createWallet 方法来创建新钱包。

import { useOneClient } from '@one_deploy/sdk';

function CreateWalletExample() {
const { engineClient } = useOneClient();

const handleCreateSmartWallet = async () => {
const wallet = await engineClient.createWallet(
CHAIN_IDS.BASE, // chainId
'smart' // type: 'smart' | 'eoa'
);

console.log('Wallet address:', wallet.address);
console.log('Wallet type:', wallet.type); // 'smart'
console.log('Chain ID:', wallet.chainId); // 8453
};

const handleCreateEOAWallet = async () => {
const wallet = await engineClient.createWallet(
CHAIN_IDS.ETHEREUM,
'eoa'
);

console.log('EOA address:', wallet.address);
};

return (
<div>
<button onClick={handleCreateSmartWallet}>Create Smart Wallet</button>
<button onClick={handleCreateEOAWallet}>Create EOA Wallet</button>
</div>
);
}

方法签名

createWallet(chainId: number, type: 'smart' | 'eoa'): Promise<Wallet>

参数:

参数类型描述
chainIdnumber创建钱包的链 ID。使用 CHAIN_IDS 常量。
type'smart' | 'eoa'钱包类型。'smart' 启用账户抽象功能。

返回值: Promise<Wallet>

interface Wallet {
address: string;
type: 'smart' | 'eoa';
chainId: number;
createdAt: string;
status: 'active' | 'pending_deployment';
}

多链支持

ONE SDK 开箱即用地支持以下链:

import { CHAIN_IDS } from '@one_deploy/sdk';

// 主网
CHAIN_IDS.BASE; // 8453
CHAIN_IDS.ETHEREUM; // 1
CHAIN_IDS.POLYGON; // 137
CHAIN_IDS.ARBITRUM; // 42161
CHAIN_IDS.OPTIMISM; // 10

// 测试网
CHAIN_IDS.BASE_SEPOLIA; // 84532
CHAIN_IDS.ETHEREUM_SEPOLIA; // 11155111
CHAIN_IDS.POLYGON_AMOY; // 80002
CHAIN_IDS.ARBITRUM_SEPOLIA; // 421614
CHAIN_IDS.OPTIMISM_SEPOLIA; // 11155420

单个钱包地址可在所有支持的链上使用。智能钱包在首次使用时按链部署。

智能钱包与 Gas 赞助

通过 ONE SDK 创建的智能钱包支持通过 paymaster 进行 Gas 赞助。当你的项目启用了 Gas 赞助(在控制面板中配置),用户无需持有原生代币即可发送交易。

import { useOneClient, CHAIN_IDS } from '@one_deploy/sdk';

function GasSponsoredTransaction() {
const { engineClient } = useOneClient();

const handleSend = async () => {
// 当项目设置中启用后,智能钱包的 Gas 会自动赞助
const tx = await engineClient.sendTransaction({
fromAddress: '0xYourSmartWallet...',
toAddress: '0xRecipient...',
chainId: CHAIN_IDS.BASE,
value: '0.01',
currency: 'ETH',
});

console.log('Transaction hash:', tx.transactionHash);
};

return <button onClick={handleSend}>Send (Gasless)</button>;
}

获取用户钱包

检索与已认证用户关联的所有钱包。

import { useOneClient } from '@one_deploy/sdk';

function UserWallets() {
const { engineClient } = useOneClient();

const loadWallets = async () => {
const wallets = await engineClient.getUserWallets();

wallets.forEach((wallet) => {
console.log(`${wallet.type} wallet on chain ${wallet.chainId}: ${wallet.address}`);
});
};

return <button onClick={loadWallets}>Load My Wallets</button>;
}

方法签名

getUserWallets(): Promise<Wallet[]>

返回当前已认证用户在所有链上的 Wallet 对象数组。

CHAIN_IDS 常量

CHAIN_IDS 常量提供了一种类型安全的方式来引用支持的链:

import { CHAIN_IDS } from '@one_deploy/sdk';

type ChainId = typeof CHAIN_IDS[keyof typeof CHAIN_IDS];

// 在类型化函数中使用
function getChainName(chainId: ChainId): string {
switch (chainId) {
case CHAIN_IDS.BASE: return 'Base';
case CHAIN_IDS.ETHEREUM: return 'Ethereum';
case CHAIN_IDS.POLYGON: return 'Polygon';
case CHAIN_IDS.ARBITRUM: return 'Arbitrum';
case CHAIN_IDS.OPTIMISM: return 'Optimism';
default: return 'Unknown';
}
}

下一步