【问题标题】:How to send Lumens to an uninitialised stellar address pragmatically如何务实地将流明发送到未初始化的恒星地址
【发布时间】:2019-05-13 05:44:25
【问题描述】:

我是 stellar 新手,所以如果我的问题听起来太简单,请耐心等待。 因此,使用stellar laboratory,我创建了两个帐户,分别命名为 1 和 2。我使用朋友机器人为第一个帐户提供了测试网硬币,并将第二个帐户留空。现在,据我了解,要在恒星网络上活跃的帐户,它的最低余额应约为 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。

【问题讨论】:

    标签: stellar.js stellar


    【解决方案1】:

    我认为这是因为 Stellar 实验室不是针对这个确切的用例设置的。它更多地是为了获得基本的一般感觉。为了使用 SDK 以这种方式创建帐户并与 Horizo​​n 通信,您必须在单个交易中创建帐户并为其提供资金,因此您必须输入源帐户的密钥。

    在 Stellar 实验室的帐户创建选项卡中,无法输入源地址及其密钥(或者至少我没有看到)。

    因此,在您的示例中,您的第一个帐户是由 testbot 创建和资助的。但是,当您创建第二个帐户并尝试从第一个帐户向其发送付款时,失败的原因是第二个帐户尚未入金,因此还不是有效帐户。有点鸡和蛋的问题。

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

    来自 stellar.org 的关于构建交易的内容: https://www.stellar.org/developers/js-stellar-base/reference/building-transactions.html

    事务构建器 TransactionBuilder 类用于构造 新的交易。为 TransactionBuilder 提供了一个使用的帐户 作为交易的“源账户”。该交易将使用 给定 Account 对象的当前序列号作为其序列 编号并在 build() 时增加给定帐户的序列号 在 TransactionBuilder 上调用。

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

    添加所需操作后,调用 build() 方法 事务生成器。这将返回一个完全构造的事务。 返回的交易将包含交易的序列号 源账户。此交易未签名。您必须先签名 它将被 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2017-10-19
      • 1970-01-01
      • 2020-11-01
      • 2013-07-15
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多