高级
连接 Aepp 到钱包
使用 RPC API 将你的应用连接到钱包
步骤 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 弹窗确认 | |
| 接收签名交易 | 返回签名 |
继续学习