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

如何在Node.js中生成EOS地址及完成交易?附公私钥生成代码

生成EOS地址与交易操作指南

和BTC、ETH直接用公钥哈希作为交易地址不同,EOS的交易体系是基于账户名+密钥对的——你代码里生成的EOSxxxx格式字符串是EOS的公钥(用于交易签名),而实际接收资产需要一个12位的EOS账户名。下面我一步步给你拆解生成逻辑、账户创建和交易操作:

一、生成EOS密钥对(优化你的现有代码)

你的代码已经用BIP39+BIP44路径实现了EOS密钥对生成,这里给你优化细节并解释关键逻辑:

  1. 助记词转种子:bip39.mnemonicToSeed直接返回Buffer,无需转字符串再转回,避免编码错误
  2. HD路径选择:EOS的标准BIP44路径是m/44'/194'/0'/0'/索引(带撇号的hardened推导更安全),你原代码用的非hardened路径也兼容,但推荐用标准写法
  3. 密钥格式化:eosjs-ecc会自动把HD节点的公钥转换成EOS专属的EOSxxxx格式,私钥则用WIF编码适配EOS网络

优化后的代码:

const hdkey = require('hdkey')
const wif = require('wif')
const ecc = require('eosjs-ecc')
const bip39 = require('bip39')

// 你的助记词
const mnemonic = 'butter decrease'
// 直接使用生成的Buffer种子
const seed = bip39.mnemonicToSeed(mnemonic)
// 生成HD主节点
const master = hdkey.fromMasterSeed(seed)
// EOS标准BIP44路径,最后一位索引可修改生成多组密钥对
const node = master.derive("m/44'/194'/0'/0'/13")

// 生成EOS格式公钥
const eosPublicKey = ecc.PublicKey(node._publicKey).toString()
// 生成EOS兼容的WIF私钥
const eosPrivateKey = wif.encode(128, node._privateKey, false)

console.log("EOS公钥: " + eosPublicKey)
console.log("EOS私钥: " + eosPrivateKey)

注:你原代码里的chainCode是HD钱包推导的辅助参数,日常交易和密钥管理不需要单独编码使用,可忽略。

二、创建可交易的EOS账户

有了公钥还不能直接交易,你需要注册一个12位的EOS账户名(仅支持.12345abcdefghijklmnopqrstuvwxyz字符)。创建账户需要:

  • 一个已存在的EOS账户(用来支付创建所需的RAM、CPU/NET资源费用)
  • 你生成的EOS公钥(作为账户的owner和active权限密钥,可共用同一个)

用EOS官方工具cleos创建账户的命令示例:

cleos system newaccount --stake-net '0.1 EOS' --stake-cpu '0.1 EOS' --buy-ram-kbytes 8 已有账户名 你的新账户名 EOS5KvrNrXQM96jWaQmJW6QYCU28Q6p7QktcQzSCrKHe68bxXxk4R EOS5KvrNrXQM96jWaQmJW6QYCU28Q6p7QktcQzSCrKHe68bxXxk4R

参数说明:

  • --stake-net/--stake-cpu:抵押EOS获取网络和计算资源
  • --buy-ram-kbytes:购买账户所需的内存空间
  • 末尾两个公钥分别对应账户的owner(最高权限)和active(日常操作权限)

三、发起EOS转账交易

有了账户和私钥后,用eosjs库可以快速实现代码级交易:

1. 安装依赖

npm install eosjs node-fetch

2. 转账代码示例

const { Api, JsonRpc, RpcError } = require('eosjs');
const { JsSignatureProvider } = require('eosjs/dist/eosjs-jssig');
const fetch = require('node-fetch');
const { TextEncoder, TextDecoder } = require('util');

// 填入你的EOS私钥
const privateKeys = ['5JBNSUbD4anpFFe3CbURTBtbpbUGLGtVUatDd1uL1i1HbjZjqGd'];
const signatureProvider = new JsSignatureProvider(privateKeys);

// 连接EOS测试网(主网可替换为https://eos.greymass.com)
const rpc = new JsonRpc('https://jungle4.cryptolions.io:443', { fetch });
const api = new Api({ rpc, signatureProvider, textDecoder: new TextDecoder(), textEncoder: new TextEncoder() });

// 发起转账
async function transferEOS() {
  try {
    const result = await api.transact({
      actions: [{
        account: 'eosio.token', // EOS代币合约账户
        name: 'transfer', // 转账动作
        authorization: [{
          actor: '你的新账户名', // 发起转账的账户
          permission: 'active', // 使用active权限
        }],
        data: {
          from: '你的新账户名',
          to: '接收方账户名',
          quantity: '0.0001 EOS', // 转账数量必须带4位小数
          memo: '测试转账', // 转账备注(可选)
        },
      }]
    }, {
      blocksBehind: 3, // 基于最近3个区块确认交易
      expireSeconds: 30, // 交易30秒内有效
    });
    console.log('交易成功,哈希:', result.transaction_id);
  } catch (e) {
    console.error('交易失败:', e instanceof RpcError ? e.json : e);
  }
}

transferEOS();

交易关键注意事项

  • 资源要求:EOS交易需要消耗CPU和NET资源,这些资源来自账户抵押的EOS,资源不足时需先抵押获取
  • 网络区分:测试网和主网的节点地址不同,测试网可免费获取测试EOS用于调试
  • 格式规范:转账数量必须严格遵循X.XXXX EOS格式,保留4位小数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:45:27