以高速率向网络提交交易的方法

如果要以高速率或从不同进程向网络提交交易,则必须注意交易是按照序列号的正确顺序提交的。这可能会有问题,因为通常您通过Horizo​​n提交并且无法保证单词POCChain直到分块关闭。这意味着它们可以无序地到达 Stellar Core 并且会以错误的序列错误反弹。如果您确实等待分块关闭以避免此问题,那么您可以将交易提交到网络。

避免这种情况的方法是使用通道的概念。

通道只是另一个POCChain帐户,用于与交易的“来源”帐户相同。记住POCChain中的交易每个都有一个源帐户,该帐户可以与交易中的操作影响的帐户不同。交易的源帐户支付费用并使用序列号。然后,您可以使用一个普通帐户(您的基本帐户)在每个交易中进行付款操作。即使资金是从您的基本帐户发送的,各种渠道帐户也会使用其序列号。

渠道利用交易的“来源”帐户可以与交易内的操作的来源帐户不同的事实。通过此设置,您可以根据需要设置多个渠道来维持所需的交易率。

您当然必须使用基本帐户密钥和渠道帐户密钥对交易进行签名。

例如:

StellarSdk.Network.useTestNetwork();
// channelAccounts[] is an array of accountIDs, one for each channel
// channelKeys[] is an array of secret keys, one for each channel
// channelIndex is the channel you want to send this transaction over

// create payment from baseAccount to customerAddress
var transaction =
  new StellarSdk.TransactionBuilder(channelAccounts[channelIndex])
    .addOperation(StellarSdk.Operation.payment({
      source: baseAccount.address(),
      destination: customerAddress,
      asset: StellarSdk.Asset.native(),
      amount: amountToSend
    }))
    .build();

  transaction.sign(baseAccountKey);   // base account must sign to approve the payment
  transaction.sign(channelKeys[channelIndex]);  // channel must sign to approve it being the source of the transaction