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

Nodejs使用Stellar-sdk创建售卖报价时报toXDRObject未定义错误

问题排查与修复方案

你遇到的报错是因为构造资产实例时参数不合法,导致内部转换XDR格式时找不到对应方法,具体问题和修复方法如下:

  • 问题1:原生资产XLM初始化方式错误

    Stellar原生资产XLM不能通过new StellarSdk.Asset('XLM')方式实例化,正确写法是调用静态方法StellarSdk.Asset.native()。你手动创建的XLM实例缺少内置必要属性和方法,触发toXDRObject未定义错误。

  • 问题2:SLT发行方地址未加引号,被识别为未定义变量

    代码中SLTIssuerId的赋值是字符串类型的公钥地址,必须用引号包裹,否则JS会将其识别为变量读取,未定义该变量的情况下SLTIssuerId为undefined,创建的SLT资产实例同样不合法。

  • 额外排查点:确认testAccount、numerator、denominator三个变量是否已经提前定义赋值,未定义的变量也会导致参数异常。

修复后代码示例

import StellarSdk from 'stellar-sdk';

const stellarServer = new StellarSdk.Server(
    'https://horizon-testnet.stellar.org'
);

// 请提前定义testAccount变量,包含publicKey字段
const account = await stellarServer.loadAccount(testAccount.publicKey);

const fee = await stellarServer.fetchBaseFee();

// 公钥地址加引号转为字符串
const SLTIssuerId = 'GCKA6K5PCQ6PNF5RQBF7PQDJWRHO6UOGFMRLK3DYHDOI244V47XKQ4GP';

// 原生XLM用native()方法创建
const XLMAsset = StellarSdk.Asset.native();
const SLTAsset = new StellarSdk.Asset('SLT', SLTIssuerId);

// 请提前给numerator、denominator赋值
const transaction = new StellarSdk.TransactionBuilder(account, {
    fee,
    networkPassphrase: StellarSdk.Networks.TESTNET
})
    .addOperation(
        StellarSdk.Operation.manageSellOffer({
            selling: SLTAsset,
            buy: XLMAsset,
            price: { n: numerator, d: denominator },
            amount: '2'
        })
    )
    .setTimeout(180)
    .build();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:09:02