You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Magic认证对接Solana时获取到以太坊地址如何解决

问题根因

获取到以太坊格式地址是两个配置错误导致的:

  • 自定义Magic实例时传入的chainId: 1是以太坊主网的EVM链ID,SDK会默认按EVM规则生成地址,不会识别Solana RPC配置
  • 直接读取metadata.publicAddress的逻辑默认返回EVM生态地址,Solana属于非EVM链,无法通过通用用户元数据接口返回对应格式地址。
修复步骤

1. 补全依赖、修正初始化逻辑

首先在pubspec.yaml中引入Magic官方的Solana扩展模块,不要只使用基础magic-sdk包。
初始化实例时删除错误的EVM chainId参数,正确代码如下:

import 'package:magic_sdk/magic_sdk.dart';
import 'package:magic_sdk/modules/blockchain/solana.dart';

// 应用启动阶段初始化Magic实例
Magic.instance = Magic.custom(
  MY_API_KEY,
  rpcUrl: "https://api.testnet.solana.com",
  // 移除原代码中chainId: 1的配置,Solana不使用EVM链ID规则
);

2. 替换地址获取逻辑

不要从getMetadata()返回结果中取地址,调用Solana模块的专属接口获取Solana格式地址:

final _magic = Magic.instance;
// 先走原有登录逻辑,登录成功后再获取地址
await _magic.auth.loginWithEmailOTP(email: 'your_user_email@example.com');

// 通过Solana模块获取链上地址
final accounts = await _magic.solana.getAccounts();
final solanaPublicAddress = accounts.first;

3. 异常排查项

  • 登录Magic控制台,确认当前使用的API Key对应的应用已开启Solana测试网权限,未开链权限时前端配置正确也无法返回正常地址
  • 如果之前登录过并缓存了旧的EVM地址,先执行await _magic.user.logout()清除本地登录缓存,重新触发登录流程后再取地址
  • 不要混用EVM相关的方法调用Solana链能力,所有Solana链交互都走_magic.solana模块下的方法。

内容的提问来源于stack exchange,提问作者Samay Gandhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:18:22