bitcoinj (バージョン 0.14.3) で取引をしようとしていますが、支払い後に釣り銭が戻ってくることを期待しています。私はテストネットで作業していますが、実際のビットコインではありません。次のコードがあります:
Transaction tx = new Transaction(this.networkParameters);
Coin coinToSent = Coin.valueOf(Config.APP_COST);
Coin coinToChange = Coin.valueOf(walletBalance.getValue() - coinToSent.getValue());
tx.addOutput(coinToSent, appAddress);
tx.addOutput(coinToChange, changeAddress);
SendRequest request = SendRequest.forTx(tx);
try {
this.walletAppKit.wallet().completeTx(request);
} catch (InsufficientMoneyException e) {
e.printStackTrace();
return false;
}
this.walletAppKit.wallet().commitTx(request.tx);
this.walletAppKit.peerGroup().broadcastTransaction(request.tx);
だから、私はトランザクションに2つの出力を入れています:
- 送金先住所
- おつりを返すための私の財布のアドレス
最初のアドレスに送金します。そして、2 番目のアドレスに、次の値を送信します。つまり、ウォレットで利用可能なすべてのお金から、最初のアドレスに受け取ったお金を差し引いたものです。
しかし、放送後、予想外の結果がありました。このスキームでいくつかの取引を行った後、間違った値がウォレットから引き出されていることに気付きました。驚くべきことに、お金が引き出されることもあれば、財布にお金が入ってくることもあります。
誰かが私が間違っていることとそれを修正する方法を説明できますか?