如何实用地将流明发送到未初始化的恒星地址

时间:2019-05-13 05:44:26

标签: stellar.js stellar

我是恒星的新手,所以请问我的问题是否听起来太基础了。 因此,使用stellar laboratory,我创建了两个帐户,分别命名为1和2。我使用friend-bot用测试网硬币为第一个帐户注资,而第二个帐户则为空。现在,据我所知,要在星型网络中处于活动状态的帐户,其最低余额应约为1XLM。因此,使用transaction builder,我尝试通过尝试将2XLM转移到第二个帐户来执行付款操作。但是我收到以下答复:

{
  "type": "https://stellar.org/horizon-errors/transaction_failed",
  "title": "Transaction Failed",
  "status": 400,
  "detail": "The transaction failed when submitted to the stellar network. The `extras.result_codes` field on this response contains further details.  Descriptions of each code can be found at: https://www.stellar.org/developers/learn/concepts/list-of-operations.html",
  "extras": {
    "envelope_xdr": "AAAAAKNyr+6/r2REKzMV3sOL4jztg1HSdqlQhmthUU41BjPdAAAAZAAEmkQAAAADAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAmWhqbEZTUrZWFtvR1HU7VUW0pp3BwN4E9h4iQwvMr9kAAAAAAAAAAAExLQAAAAAAAAAAATUGM90AAABAHvtdpnjhq3usHFphQ/4naDHbKVhu+QqD8UFSavo/qlGo7Yiz/dLI3lQ0fmfa37uvwXWsYAn8mObDkrTjofc3Aw==",
    "result_codes": {
      "transaction": "tx_failed",
      "operations": [
        "op_no_destination"
      ]
    },
    "result_xdr": "AAAAAAAAAGT/////AAAAAQAAAAAAAAAB////+wAAAAA="
  }
}

所以有人可以告诉我我需要使用哪个操作来将XLM发送到未初始化的地址,这样我就可以激活它,而不必使用friendbot。

1 个答案:

答案 0 :(得分:0)

我认为这是因为Stellar实验室未针对此确切用例设置。它更多地是为了获得基本的感觉。为了使用SDK通过这种方式创建帐户并与Horizo​​n进行通信,您必须同时创建该帐户并在一次交易中为该帐户注资,因此,您必须输入源帐户的密钥。

在Stellar实验室的“帐户创建”标签中,无法输入其秘密密钥的源地址(或者至少我没有看到)。

因此,在您的示例中,您的第一个帐户是由测试机器人创建并提供资金的。但是,当您创建第二个帐户并尝试从第一个帐户向其发送付款时,失败的原因是第二个帐户尚未有效,因为第二个帐户尚未资金。有点鸡鸡蛋问题。

好消息是,您绝对可以使用SDK进行此操作,但我还没有找到使用实验室进行此操作的方法。

来自stellar.org的关于建立交易的信息: https://www.stellar.org/developers/js-stellar-base/reference/building-transactions.html

  

TransactionBuilder   TransactionBuilder类用于构造   新交易。给TransactionBuilder一个使用的帐户   作为交易的“源帐户”。交易将使用   给定Account对象的当前序列号作为其序列   数字,并在build()时增加给定帐户的序列号   在TransactionBuilder上被调用。

     

可以将操作添加到事务调用中   您要添加到的每个操作的addOperation(operation)   交易。请参阅operation.js以获取您可能进行的操作的列表   可以添加。 addOperation(operation)返回当前   TransactionBuilder对象,因此您可以链接多个调用。

     

添加所需的操作后,请在   TransactionBuilder。这将返回一个完全构造的事务。   返回的交易将包含交易的序号   源帐户。此交易未签名。您必须先签名   它会被Stellar网络接受。

# This is the relevant code

StellarSdk.Network.useTestNetwork();
// StellarBase.Network.usePublicNetwork(); if this transaction is for the public network
// Create an Account object from an address and sequence number.

var account=new StellarBase.Account("GD6WU64OEP5C4LRBH6NK3MHYIA2ADN6K6II6EXPNVUR3ERBXT4AN4ACD","2319149195853854");

var transaction = new StellarBase.TransactionBuilder(account, {
      fee: StellarBase.BASE_FEE
    })
        // add a payment operation to the transaction
        .addOperation(StellarBase.Operation.payment({
                destination: "GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW",
                asset: StellarBase.Asset.native(),
                amount: "100.50"  // 100.50 XLM
            }))
        // add a set options operation to the transaction
        .addOperation(StellarBase.Operation.setOptions({
                signer: {
                    ed25519PublicKey: secondAccountAddress,
                    weight: 1
                }
            }))
        // mark this transaction as valid only for the next 30 seconds
        .setTimeout(30)
        .build();

# Note that it is adding different operations to a single transaction.