use of org.ethereum.util.RLPList in project rskj by rsksmart.
the class RLPTest method encodeDecodeShortListWithTwoByteArraysWithElementsLength56.
@Test
public void encodeDecodeShortListWithTwoByteArraysWithElementsLength56() {
byte[] value1 = new byte[26];
byte[] value2 = new byte[28];
byte[] element1 = RLP.encodeElement(value1);
byte[] element2 = RLP.encodeElement(value2);
byte[] encoded = RLP.encodeList(element1, element2);
Assert.assertNotNull(encoded);
Assert.assertEquals(1 + 1 + 1 + 26 + 1 + 28, encoded.length);
Assert.assertEquals((byte) (247 + 1), encoded[0]);
Assert.assertEquals((byte) (56), encoded[1]);
ArrayList<RLPElement> list = RLP.decode2(encoded);
Assert.assertNotNull(list);
Assert.assertEquals(1, list.size());
RLPList list2 = (RLPList) list.get(0);
Assert.assertNotNull(list2);
Assert.assertEquals(2, list2.size());
Assert.assertArrayEquals(value1, list2.get(0).getRLPData());
Assert.assertArrayEquals(value2, list2.get(1).getRLPData());
}
use of org.ethereum.util.RLPList in project rskj by rsksmart.
the class RemascState method create.
public static RemascState create(byte[] data) {
RLPList rlpList = (RLPList) RLP.decode2(data).get(0);
Coin rlpRewardBalance = RLP.parseCoin(rlpList.get(0).getRLPData());
Coin rlpBurnedBalance = RLP.parseCoin(rlpList.get(1).getRLPData());
SortedMap<Long, List<Sibling>> rlpSiblings = RemascStorageProvider.getSiblingsFromBytes(rlpList.get(2).getRLPData());
byte[] rlpBrokenSelectionRuleBytes = rlpList.get(3).getRLPData();
Boolean rlpBrokenSelectionRule;
if (rlpBrokenSelectionRuleBytes != null && rlpBrokenSelectionRuleBytes.length != 0 && rlpBrokenSelectionRuleBytes[0] != 0) {
rlpBrokenSelectionRule = Boolean.TRUE;
} else {
rlpBrokenSelectionRule = Boolean.FALSE;
}
return new RemascState(rlpRewardBalance, rlpBurnedBalance, rlpSiblings, rlpBrokenSelectionRule);
}
use of org.ethereum.util.RLPList in project rskj by rsksmart.
the class RemascStorageProvider method getSiblingsFromBytes.
public static SortedMap<Long, List<Sibling>> getSiblingsFromBytes(byte[] bytes) {
SortedMap<Long, List<Sibling>> siblings = new TreeMap<>();
if (bytes == null || bytes.length == 0) {
return siblings;
}
RLPList rlpList = (RLPList) RLP.decode2(bytes).get(0);
int nentries = rlpList.size() / 2;
for (int k = 0; k < nentries; k++) {
byte[] bytesKey = rlpList.get(k * 2).getRLPData();
byte[] bytesValue = rlpList.get(k * 2 + 1).getRLPData();
long longKey = bytesKey == null ? 0 : BigIntegers.fromUnsignedByteArray(bytesKey).longValue();
Long key = Long.valueOf(longKey);
RLPList rlpSiblingList = (RLPList) RLP.decode2(bytesValue).get(0);
int nsiblings = rlpSiblingList.size();
List<Sibling> list = new ArrayList<>();
for (int j = 0; j < nsiblings; j++) {
byte[] bytesSibling = rlpSiblingList.get(j).getRLPData();
Sibling sibling = Sibling.create(bytesSibling);
list.add(sibling);
}
siblings.put(key, list);
}
return siblings;
}
use of org.ethereum.util.RLPList in project rskj by rsksmart.
the class Sibling method create.
public static Sibling create(byte[] data) {
ArrayList<RLPElement> params = RLP.decode2(data);
RLPList sibling = (RLPList) params.get(0);
byte[] hash = sibling.get(0).getRLPData();
RskAddress coinbase = RLP.parseRskAddress(sibling.get(1).getRLPData());
RskAddress includedBlockCoinbase = RLP.parseRskAddress(sibling.get(2).getRLPData());
Coin paidFees = RLP.parseCoin(sibling.get(3).getRLPData());
byte[] bytesIncludedHeight = sibling.get(4).getRLPData();
RLPElement uncleCountElement = sibling.get(5);
byte[] bytesUncleCount = uncleCountElement != null ? uncleCountElement.getRLPData() : null;
long includedHeight = bytesIncludedHeight == null ? 0 : BigIntegers.fromUnsignedByteArray(bytesIncludedHeight).longValue();
int uncleCount = bytesUncleCount == null ? 0 : BigIntegers.fromUnsignedByteArray(bytesUncleCount).intValue();
return new Sibling(hash, coinbase, includedBlockCoinbase, paidFees, includedHeight, uncleCount);
}
use of org.ethereum.util.RLPList in project rskj by rsksmart.
the class Block method parseRLP.
private void parseRLP() {
ArrayList<RLPElement> params = RLP.decode2(rlpEncoded);
RLPList block = (RLPList) params.get(0);
// Parse Header
RLPList header = (RLPList) block.get(0);
this.header = new BlockHeader(header, this.sealed);
// Parse Transactions
RLPList txTransactions = (RLPList) block.get(1);
this.transactionsList = parseTxs(txTransactions);
byte[] calculatedRoot = getTxTrie(this.transactionsList).getHash().getBytes();
this.checkExpectedRoot(this.header.getTxTrieRoot(), calculatedRoot);
// Parse Uncles
RLPList uncleBlocks = (RLPList) block.get(2);
for (RLPElement rawUncle : uncleBlocks) {
RLPList uncleHeader = (RLPList) rawUncle;
BlockHeader blockData = new BlockHeader(uncleHeader, this.sealed);
this.uncleList.add(blockData);
}
this.parsed = true;
}
Aggregations