簡體   English   中英

如何務實地將流明發送到未初始化的恆星地址

[英]How to send Lumens to an uninitialised stellar address pragmatically

我是新來的恆星,所以如果這聽起來太基本,請耐心等待我的問題。 因此,使用恆星實驗室,我創建了兩個帳戶,分別命名為 1 和 2。我使用朋友機器人為第一個帳戶提供了測試網硬幣,而第二個帳戶為空。 現在,據我了解,要在恆星網絡上活躍的帳戶,它的最低余額應約為 1XLM。 因此,使用交易生成器,我嘗試通過嘗試將 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 實驗室不是為這個確切的用例設置的。 它更多地是為了獲得基本的一般感覺。 為了使用 SDK 以這種方式創建帳戶並與 Horizo​​n 通信,您必須在單個交易中創建帳戶並為其提供資金,因此您必須輸入源帳戶的密鑰。

在 Stellar 實驗室的帳戶創建選項卡中,無法輸入源地址的密鑰(或者至少我沒有看到)。

因此,在您的示例中,您的第一個帳戶是由 testbot 創建和資助的。 但是,當您創建第二個帳戶並嘗試從第一個帳戶向其發送付款時,失敗的原因是因為第二個帳戶尚未入金,因此還不是有效帳戶。 有點雞和蛋的問題。

好消息是您絕對可以使用 SDK 完成此操作,但我還沒有找到使用實驗室的方法。

這來自 stellar.org 關於構建交易: https ://www.stellar.org/developers/js-stellar-base/reference/building-transactions.html

TransactionBuilder TransactionBuilder 類用於構造新事務。 TransactionBuilder 被賦予一個帳戶,用作交易的“源帳戶”。 事務將使用給定 Account 對象的當前序列號作為其序列號,並在 TransactionBuilder 上調用 build() 時遞增給定帳戶的序列號。

可以為您希望添加到事務的每個操作調用 addOperation(operation) 將操作添加到事務中。 有關您可以添加的可能操作的列表,請參閱 operation.js。 addOperation(operation) 返回當前的 TransactionBuilder 對象,以便您可以鏈接多個調用。

添加所需操作后,調用 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.

首先,您需要從 Transaction Builder 執行Create Account 只有這樣您才能將資金轉移到該地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM