高级

连接 Aepp 到钱包

使用 RPC API 将你的应用连接到钱包

前提条件

为简化示例,请先安装 Superhero Wallet 浏览器扩展

你也可以连接到上一课中自己构建的钱包。

步骤 1 导入依赖
import {
  AeSdkAepp,
  Node,
  BrowserWindowMessageConnection,
  walletDetector
} from '@aeternity/aepp-sdk';
步骤 2 初始化 AeSdkAepp 类
const aeSdk = new AeSdkAepp({
  name: 'My Awesome Aepp',  // 应用名称
  nodes: [
    { name: 'testnet', instance: new Node('https://testnet.aeternity.io') }
  ],
  // 钱包断开连接时的回调
  onDisconnect: () => {
    console.log('钱包已断开连接');
  },
  // 钱包通知账户变更时的回调
  onAddressChange: (accounts) => {
    console.log('账户变更:', accounts);
  },
  // 钱包通知网络变更时的回调
  onNetworkChange: (params) => {
    console.log('网络变更:', params);
  }
});
步骤 3 扫描钱包并连接
// 扫描可用的钱包
const connection = new BrowserWindowMessageConnection();

let wallet = null;

// 开始检测钱包
const stopDetection = walletDetector(connection, async ({ newWallet }) => {
  console.log('发现钱包:', newWallet);
  
  // 停止检测
  stopDetection();
  
  // 保存钱包引用
  wallet = newWallet;
  
  // 连接到钱包
  const { address } = await aeSdk.connectToWallet(wallet.getConnection());
  console.log('已连接,当前账户:', address);
});

// 也可以手动停止检测
// stopDetection();
连接到钱包的节点(可选)

Aepp 可以请求使用钱包连接的节点:

await aeSdk.connectToWallet(wallet.getConnection(), {
  connectNode: true,   // 使用钱包的节点
  name: 'wallet-node', // 节点名称
  select: true         // 设为当前节点
});
使用钱包节点的好处:
  • 提高响应速度(使用钱包实际连接的节点)
  • 支持私有/开发网络,无需更改 Aepp 配置
  • 简化 Aepp 端配置
连接后使用

连接成功后,可以像普通 SDK 一样使用,钱包会自动处理签名:

// 获取当前账户地址
console.log('当前账户:', aeSdk.address);

// 获取余额
const balance = await aeSdk.getBalance(aeSdk.address);
console.log('余额:', balance);

// 转账(钱包会弹出确认)
const result = await aeSdk.spend(100, 'ak_recipient...');
console.log('转账成功:', result.hash);

// 调用合约(钱包会弹出确认)
const contract = await Contract.initialize({
  ...aeSdk.getContext(),
  aci,
  address: 'ct_...'
});
const callResult = await contract.someMethod(args);
完整示例

官方提供了完整的 Aepp 示例:

Simple Aepp 示例
连接流程
Aepp Wallet
walletDetector 扫描 广播存在
connectToWallet onConnection 回调
获取账户列表 返回授权账户
发起交易 onSign 弹窗确认
接收签名交易 返回签名