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
相关产品推荐
相关产品推荐

