package com.ripple.core.binary; import com.ripple.core.coretypes.*; import com.ripple.core.coretypes.hash.Hash128; import com.ripple.core.coretypes.hash.Hash160; import com.ripple.core.coretypes.hash.Hash256; import com.ripple.core.coretypes.hash.prefixes.HashPrefix; import com.ripple.core.coretypes.uint.UInt16; import com.ripple.core.coretypes.uint.UInt32; import com.ripple.core.coretypes.uint.UInt64; import com.ripple.core.coretypes.uint.UInt8; import com.ripple.core.serialized.BinaryParser; import com.ripple.core.serialized.StreamBinaryParser; import com.ripple.core.types.known.sle.LedgerEntry; import com.ripple.core.types.known.tx.Transaction; import com.ripple.core.types.known.tx.result.TransactionMeta; import com.ripple.core.types.known.tx.result.TransactionResult; import java.util.Arrays; import java.util.Date; public class STReader { protected BinaryParser parser; public STReader(BinaryParser parser) { this.parser = parser; } public STReader(String hex) { this.parser = new BinaryParser(hex); } public static STReader fromFile(String arg) { return new STReader(StreamBinaryParser.fromFile(arg)); } public UInt8 uInt8() { return UInt8.translate.fromParser(parser); } public UInt16 uInt16() { return UInt16.translate.fromParser(parser); } public UInt32 uInt32() { return UInt32.translate.fromParser(parser); } public UInt64 uInt64() { return UInt64.translate.fromParser(parser); } public Hash128 hash128() { return Hash128.translate.fromParser(parser); } public Hash160 hash160() { return Hash160.translate.fromParser(parser); } public Currency currency() { return Currency.translate.fromParser(parser); } public Hash256 hash256() { return Hash256.translate.fromParser(parser); } public Vector256 vector256() { return Vector256.translate.fromParser(parser); } public AccountID accountID() { return AccountID.translate.fromParser(parser); } public Blob variableLength() { int hint = parser.readVLLength(); return Blob.translate.fromParser(parser, hint); } public Amount amount() { return Amount.translate.fromParser(parser); } public PathSet pathSet() { return PathSet.translate.fromParser(parser); } public STObject stObject() { return STObject.translate.fromParser(parser); } public STObject vlStObject() { return STObject.translate.fromParser(parser, parser.readVLLength()); } public HashPrefix hashPrefix() { byte[] read = parser.read(4); for (HashPrefix hashPrefix : HashPrefix.values()) { if (Arrays.equals(read, hashPrefix.bytes)) { return hashPrefix; } } return null; } public STArray stArray() { return STArray.translate.fromParser(parser); } public Date rippleDate() { return RippleDate.fromParser(parser); } public BinaryParser parser() { return parser; } public TransactionResult readTransactionResult(UInt32 ledgerIndex) { Hash256 hash = hash256(); Transaction txn = (Transaction) vlStObject(); TransactionMeta meta = (TransactionMeta) vlStObject(); return new TransactionResult(ledgerIndex.longValue(), hash, txn, meta); } public LedgerEntry readLE() { Hash256 index = hash256(); STObject object = vlStObject(); LedgerEntry le = (LedgerEntry) object; le.index(index); return le; } public int readOneInt() { return parser.readOneInt(); } public boolean end() { return parser.end(); } }