我是恒星的新手,所以请问我的问题是否听起来太基础了。 因此,使用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。
答案 0 :(得分:0)
我认为这是因为Stellar实验室未针对此确切用例设置。它更多地是为了获得基本的感觉。为了使用SDK通过这种方式创建帐户并与Horizon进行通信,您必须同时创建该帐户并在一次交易中为该帐户注资,因此,您必须输入源帐户的密钥。
在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.