package org.ripple.power.txns; import org.json.JSONObject; import org.ripple.power.RippleObject; import org.ripple.power.RippleSeedAddress; import org.ripple.power.RippleSchemas.BinaryFormatField; import org.ripple.power.RippleSchemas.TransactionTypes; import org.ripple.power.ui.RPClient; import org.ripple.power.utils.StringUtils; import com.ripple.client.enums.Command; import com.ripple.client.requests.Request; import com.ripple.client.responses.Response; public class TrustSet { public static IssuedCurrency fromString(String res) { String[] split = StringUtils.split(res, "/"); int idx = split.length; IssuedCurrency currency; if (idx == 0) { currency = new IssuedCurrency(); } else if (idx == 1) { currency = new IssuedCurrency(split[0]); } else if (idx == 3) { String address = split[2]; if (AccountFind.isRippleAddress(address)) { currency = new IssuedCurrency(split[0], address, split[1]); } else { currency = new IssuedCurrency(split[0], Gateway.getAddress(address).accounts.get(0).address, split[1]); } } else { throw new RuntimeException(res); } return currency; } public static void setTxJson(final String seed, final IssuedCurrency currency, final String fee, final Rollback back) { TrustSet.setTxJson(new RippleSeedAddress(seed), currency, fee, back); } public static void setTxJson(final RippleSeedAddress seed, final IssuedCurrency currency, final String fee, final Rollback back) { RPClient client = RPClient.ripple(); if (client != null) { Request req = client.newRequest(Command.submit); JSONObject obj = new JSONObject(); obj.put("TransactionType", "TrustSet"); obj.put("Account", seed.getPublicKey()); JSONObject limitAmount = new JSONObject(); limitAmount.put("currency", currency.currency); limitAmount.put("value", String.valueOf(currency.amount.longValue())); limitAmount.put("issuer", currency.issuer.toString()); obj.put("LimitAmount", limitAmount); obj.put("Fee", CurrencyUtils.getValueToRipple(fee)); req.json("tx_json", obj); req.json("secret", seed.getPrivateKey()); req.once(Request.OnSuccess.class, new Request.OnSuccess() { @Override public void called(Response response) { if (back != null) { back.success(response.message); } } }); req.once(Request.OnError.class, new Request.OnError() { @Override public void called(Response response) { if (back != null) { back.error(response.message); } } }); req.request(); } } public static void set(final String seed, final IssuedCurrency currency, final String fee, final Rollback back) { TrustSet.set(new RippleSeedAddress(seed), currency, fee, back); } public static void set(final RippleSeedAddress seed, final IssuedCurrency currency, final String fee, final Rollback back) { final String address = seed.getPublicRippleAddress().toString(); AccountFind find = new AccountFind(); find.info(address, new Rollback() { @Override public void success(JSONObject message) { try { long sequence = TransactionUtils.getSequence(message); RippleObject item = new RippleObject(); item.putField(BinaryFormatField.TransactionType, (int) TransactionTypes.TRUST_SET.byteValue); item.putField(BinaryFormatField.Account, seed.getPublicRippleAddress()); item.putField(BinaryFormatField.LimitAmount, currency); item.putField(BinaryFormatField.Fee, CurrencyUtils.getValueToRipple(fee)); item.putField(BinaryFormatField.Sequence, sequence); TransactionUtils.submitBlob(seed, item, back); } catch (Exception e) { e.printStackTrace(); } } @Override public void error(JSONObject message) { if (back != null) { back.error(message); } } }); } }