package org.ripple.power.txns; import org.json.JSONObject; import org.ripple.power.CoinUtils; import org.ripple.power.RippleObject; import org.ripple.power.RippleSeedAddress; import org.ripple.power.RippleSerializer; import org.ripple.power.RippleSigner; import org.ripple.power.ui.RPClient; import com.ripple.client.enums.Command; import com.ripple.client.requests.Request; import com.ripple.client.responses.Response; import com.ripple.core.coretypes.Amount; import com.ripple.core.coretypes.Blob; import com.ripple.core.coretypes.hash.HalfSha512; import com.ripple.core.coretypes.hash.Hash256; import com.ripple.core.coretypes.hash.prefixes.HashPrefix; import com.ripple.core.coretypes.uint.UInt32; import com.ripple.core.serialized.BytesList; import com.ripple.core.serialized.MultiSink; import com.ripple.core.types.known.tx.Transaction; import com.ripple.crypto.ecdsa.IKeyPair; import com.ripple.crypto.ecdsa.Seed; public class TransactionUtils { public final static void submitBlob(final RippleSeedAddress seed, final Transaction txn, final String fee, final long sequence, final Rollback back) throws Exception { IKeyPair keyPair = Seed.getKeyPair(seed.getPrivateKey()); Blob pubKey = new Blob(keyPair.pubBytes()); txn.put(UInt32.Sequence, new UInt32(sequence)); if (fee != null) { txn.put(Amount.Fee, Amount.fromString(fee)); } txn.put(Blob.SigningPubKey, pubKey); Hash256 signingHash = txn.signingHash(); Blob signature = new Blob(keyPair.sign(signingHash .bytes())); txn.put(Blob.TxnSignature, signature); BytesList blob = new BytesList(); HalfSha512 id = HalfSha512.prefixed256(HashPrefix.transactionID); txn.toBytesSink(new MultiSink(blob, id)); String tx_blob = blob.bytesHex(); RPClient client = RPClient.ripple(); if (client != null) { Request req = client.newRequest(Command.submit); req.json("tx_blob", tx_blob); 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 final static long getSequence(JSONObject res) { JSONObject obj = res.getJSONObject("result"); return obj.getJSONObject("account_data").getLong("Sequence"); } public final static void submitBlob(final RippleSeedAddress seed, final RippleObject rippleobj, final Rollback back) throws Exception { RippleObject rbo = new RippleSigner(seed.getPrivateKey(0)) .sign(rippleobj); byte[] signedTXBytes = new RippleSerializer().writeBinaryObject(rbo) .array(); RPClient client = RPClient.ripple(); if (client != null) { Request req = client.newRequest(Command.submit); req.json("tx_blob", CoinUtils.toHex(signedTXBytes)); 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(); } } }