Skip to content

Commit 0213fc8

Browse files
committed
fix: sending issued currency amounts with TransferRate failed with tecPATH_PARTIAL
1 parent b43f756 commit 0213fc8

File tree

1 file changed

+9
-5
lines changed
  • src/main/java/com/radynamics/CryptoIso20022Interop/cryptoledger/xrpl/api

1 file changed

+9
-5
lines changed

src/main/java/com/radynamics/CryptoIso20022Interop/cryptoledger/xrpl/api/JsonRpcApi.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.xrpl.xrpl4j.model.client.common.LedgerIndex;
2828
import org.xrpl.xrpl4j.model.client.common.LedgerIndexBound;
2929
import org.xrpl.xrpl4j.model.client.ledger.LedgerRequestParams;
30+
import org.xrpl.xrpl4j.model.flags.Flags;
3031
import org.xrpl.xrpl4j.model.ledger.AccountRootObject;
3132
import org.xrpl.xrpl4j.model.transactions.*;
3233
import org.xrpl.xrpl4j.wallet.DefaultWalletFactory;
@@ -440,7 +441,7 @@ private ImmutablePair<UnsignedInteger, UnsignedInteger> send(com.radynamics.Cryp
440441
var fee = XrpCurrencyAmount.ofXrp(BigDecimal.valueOf(t.getFee().getNumber().doubleValue()));
441442

442443
// TODO: implement invoiceNo from t.getInvoiceId() (maybe also use structuredReference as invoiceNo)
443-
var prepared = preparePayment(lastLedgerSequence, accountSequenceOffset, sender, receiver, amount, fee, memos);
444+
var prepared = preparePayment(lastLedgerSequence, accountSequenceOffset, sender, receiver, amount, t.getAmount().getCcy(), fee, memos);
444445

445446
var signed = sign(prepared, sender);
446447

@@ -473,7 +474,7 @@ private CurrencyAmount toCurrencyAmount(Money amount) throws LedgerException {
473474
}
474475

475476
private Payment preparePayment(UnsignedInteger lastLedgerSequence, UnsignedInteger accountSequenceOffset,
476-
org.xrpl.xrpl4j.wallet.Wallet sender, Address receiver, CurrencyAmount amount,
477+
org.xrpl.xrpl4j.wallet.Wallet sender, Address receiver, CurrencyAmount amount, Currency ccy,
477478
XrpCurrencyAmount fee, Iterable<? extends MemoWrapper> memos)
478479
throws JsonRpcClientErrorException {
479480
var requestParams = AccountInfoRequestParams.builder()
@@ -483,7 +484,7 @@ private Payment preparePayment(UnsignedInteger lastLedgerSequence, UnsignedInteg
483484
var accountInfoResult = xrplClient.accountInfo(requestParams);
484485
var sequence = accountInfoResult.accountData().sequence().plus(accountSequenceOffset);
485486

486-
return Payment.builder()
487+
var builder = Payment.builder()
487488
.account(sender.classicAddress())
488489
.amount(amount)
489490
.addAllMemos(memos)
@@ -492,8 +493,11 @@ private Payment preparePayment(UnsignedInteger lastLedgerSequence, UnsignedInteg
492493
.sequence(sequence)
493494
.fee(fee)
494495
.signingPublicKey(sender.publicKey())
495-
.lastLedgerSequence(lastLedgerSequence)
496-
.build();
496+
.lastLedgerSequence(lastLedgerSequence);
497+
if (!ledger.getNativeCcySymbol().equals(ccy.getCode())) {
498+
builder.flags(Flags.PaymentFlags.builder().tfPartialPayment(true).build());
499+
}
500+
return builder.build();
497501
}
498502

499503
private SignedTransaction<Payment> sign(Payment prepared, org.xrpl.xrpl4j.wallet.Wallet sender) {

0 commit comments

Comments
 (0)