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

使用eosjs推送EOS区块链交易时遭遇unsatisfied_authorization错误(搭配Anchor Wallet)

排查EOS交易权限验证失败(unsatisfied_authorization)问题

从你给出的错误信息和代码来看,核心问题是签名提供者无法生成对应账号权限的有效签名,结合你用Anchor钱包导出私钥的场景,咱们一步步排查:


1. 优先确认私钥与账号权限的匹配性

这是最常见的原因——你导出的私钥必须对应username账号的active权限密钥。可以用以下步骤验证:

  • 先查询账号的权限信息,查看active权限下的公钥列表:
    const accountInfo = await rpc.get_account('username');
    const activeKeys = accountInfo.permissions.find(p => p.perm_name === 'active').required_auth.keys;
    console.log("账号active权限的公钥列表:", activeKeys);
    
  • 把你导出的私钥转换成公钥,对比上面的结果:
    import { privateToPublic } from 'eosjs-ecc'; // 需要先安装eosjs-ecc
    console.log("你的私钥对应的公钥:", privateToPublic('myprivatekey'));
    

如果两者不匹配,说明你要么导出了错误账号的私钥,要么选错了权限(比如导出了owner私钥,但交易用的是active权限)——回忆下Anchor导出私钥时的操作,确认选对了目标账号和active权限。

2. 检查私钥初始化与交易参数的细节

  • 确认JsSignatureProvider传入的私钥没有拼写错误:EOS私钥大小写敏感,不要有多余空格,Anchor导出的私钥带PVT_K1_前缀是正常的,不需要去掉。
  • 检查交易中的authorization字段:actor必须是全小写的EOS账号名(EOS账号只能用小写字母和1-5的数字),permission确实是active,不要打错账号名。

3. 改用Anchor官方签名提供者(更可靠)

既然你用的是Anchor钱包,完全可以跳过手动导出私钥的步骤,直接用官方的签名工具,避免人为错误:

import { AnchorLink } from 'anchor-link';
import { BrowserTransport } from 'anchor-link-browser-transport';

// 初始化Anchor链接
const transport = new BrowserTransport();
const link = new AnchorLink({
  transport,
  chains: [{
    chainId: 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906', // EOS主网chainId
    nodeUrl: config.mainnet
  }]
});

// 唤起Anchor登录授权
const { session } = await link.login('你的DApp名称');
const api = new Api({
  rpc: new JsonRpc(config.mainnet, { fetch }),
  signatureProvider: session.signatureProvider,
  textDecoder: new TextDecoder(),
  textEncoder: new TextEncoder()
});

// 发起交易(直接用session里的权限信息)
const transaction = await api.transact({ 
  actions: [{ 
    account: 'eosio', 
    name: 'buyrambytes', 
    authorization: [{ actor: session.auth.actor, permission: session.auth.permission }], 
    data: { payer: session.auth.actor, receiver: session.auth.actor, bytes: 8192 }, 
  }] 
}, { blocksBehind: 3, expireSeconds: 30 });

这种方式由Anchor钱包直接处理签名,完全避免了私钥复制错误的可能,也是官方推荐的集成方式。

4. 确认网络环境匹配

检查你的config.mainnet节点是否是EOS主网节点(比如https://eos.greymass.com),同时确认chainId正确(主网chainId是aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906)。如果节点是测试网,但你的账号是主网账号,也会出现权限验证失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:07:48