Как прагматично отправить Lumens на неинициализированный звездный адрес - PullRequest
0 голосов
/ 13 мая 2019

Я новичок в Stellar, поэтому, пожалуйста, ответьте на мой вопрос, если он звучит слишком элементарно.Итак, используя звездную лабораторию , я создал две учетные записи с именами 1 и 2. Я пополнил 1-й счет монетами из тестовой сети с помощью друга-бота и оставил 2-й счет пустым.Теперь, когда я понимаю, что учетная запись должна быть активной в звездной сети, она должна иметь минимальный баланс около 1XLM.Поэтому, используя построитель транзакций , я попытался выполнить операцию Payment , пытаясь перевести 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 голосов
/ 22 мая 2019

Я думаю, это потому, что лаборатория Stellar не создана для этого конкретного случая использования.Это больше для общего понимания основ.Чтобы создать учетную запись таким образом, используя SDK и общаясь с horizon, вам нужно будет как создать учетную запись, так и пополнить ее за одну транзакцию, и, следовательно, вам потребуется ввести секретный ключ исходной учетной записи.

На вкладке создания учетной записи Stellar lab нет способа ввести адрес источника, его секретный ключ (или, по крайней мере, я его не видел).

Итак, в вашем примере ваша первая учетная запись создается и финансируетсяТест-бот.Однако, когда вы создаете вторую учетную запись и пытаетесь отправить ей платеж с первой учетной записи, причина ее сбоя заключается в том, что вторая учетная запись еще не является действительной учетной записью, поскольку она еще не была профинансирована.Что-то вроде проблемы с курицей и яйцом.

Хорошая новость заключается в том, что вы определенно можете сделать это с помощью SDK, но я не нашел способа сделать это с помощью лаборатории.

Это изstellar.org о построении транзакций: https://www.stellar.org/developers/js-stellar-base/reference/building-transactions.html

TransactionBuilder Класс TransactionBuilder используется для создания новых транзакций.TransactionBuilder получает учетную запись, которая используется как «исходная учетная запись» транзакции.Транзакция будет использовать текущий порядковый номер данного объекта Account в качестве своего порядкового номера и увеличивает порядковый номер данной учетной записи при вызове build () для TransactionBuilder.

Операции могут быть добавлены в транзакцию, вызывая addOperation (операция) для каждой операции, которую вы хотите добавить к транзакции.См. Operation.js для списка возможных операций, которые вы можете добавить.addOperation (операция) возвращает текущий объект TransactionBuilder, так что вы можете связать несколько вызовов.

После добавления требуемых операций вызовите метод build () для TransactionBuilder.Это вернет полностью построенную транзакцию.Возвращенная транзакция будет содержать порядковый номер исходного аккаунта.Эта транзакция не подписана.Вы должны подписать его, прежде чем он будет принят звездной сетью.

# 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.
...