特殊

MetaMask Snap

通过 MetaMask 扩展访问 Æternity 账户

什么是 MetaMask Snap?

MetaMask Snap 是 MetaMask 的扩展功能,允许在 MetaMask 中支持非 EVM 链。Æternity Snap 让你可以使用 MetaMask 来管理 Æternity 账户,无需安装额外的钱包扩展。

前提条件
  • Chrome 或 Firefox 浏览器安装 MetaMask 扩展 12.2.4 或更高版本
  • 在 MetaMask 中设置账户(创建新账户或通过助记词恢复)
基本用法
步骤 1创建账户工厂
import { AccountMetamaskFactory } from '@aeternity/aepp-sdk';

// 创建 MetaMask 账户工厂
const accountFactory = new AccountMetamaskFactory();
步骤 2初始化账户
// 通过索引创建账户实例
// 首次使用时会提示用户安装/连接 Æternity Snap
const account = await accountFactory.initialize(0);

console.log(account.address); // 'ak_2dA...'

// 签名交易(在 MetaMask 中确认)
const signedTx = await account.signTransaction('tx_...');
console.log(signedTx); // 'tx_...' (带签名)
安全特性:私钥在 MetaMask 扩展中派生,永远不会离开扩展
账户持久化

保存账户的 indexaddress 属性,可在应用重启后恢复:

import { AccountMetamask, AccountMetamaskFactory } from '@aeternity/aepp-sdk';

// 保存
const accountIndex = accountToPersist.index;
const accountAddress = accountToPersist.address;
localStorage.setItem('metamaskAccount', JSON.stringify({ index: accountIndex, address: accountAddress }));

// 恢复
const saved = JSON.parse(localStorage.getItem('metamaskAccount'));
const accountFactory = new AccountMetamaskFactory();
const restoredAccount = new AccountMetamask(
  accountFactory.provider, 
  saved.index, 
  saved.address
);
账户发现

自动发现链上已使用过的账户:

import { Node } from '@aeternity/aepp-sdk';

const node = new Node('https://testnet.aeternity.io');

// 发现所有链上活跃的账户
const accounts = await accountFactory.discover(node);

console.log('发现账户:');
accounts.forEach(acc => console.log(acc.address));
错误处理

用户拒绝操作时会抛出异常:

try {
  const account = await accountFactory.initialize(0);
} catch (err) {
  // err 是一个普通对象
  if (err.code === 4001) {
    console.log('用户拒绝了请求');
    // err.message === 'User rejected the request.'
  } else if (err.code === -32602) {
    console.log('Snap 降级被请求');
  }
}
错误码 含义
4001 用户拒绝了请求(安装、连接、签名等)
-32602 请求 Snap 降级
Ledger vs MetaMask 对比
特性 Ledger MetaMask Snap
私钥存储 硬件设备 浏览器扩展
需要额外硬件
安全级别 最高
用户基础 较小 庞大
适用场景 大额资产 日常使用
学习完成!

恭喜!你已完成 JavaScript SDK 的全部教程。