Java源码示例:org.ethereum.util.RLPList
示例1
public void rlpParse() {
RLPList decodedTxList = RLP.decode2(this.rlpEncoded);
RLPList transaction = (RLPList)decodedTxList.get(0);
this.nonce = ((RLPElement)transaction.get(0)).getRLPData();
this.gasPrice = ((RLPElement)transaction.get(1)).getRLPData();
this.gasLimit = ((RLPElement)transaction.get(2)).getRLPData();
this.receiveAddress = ((RLPElement)transaction.get(3)).getRLPData();
this.value = ((RLPElement)transaction.get(4)).getRLPData();
this.data = ((RLPElement)transaction.get(5)).getRLPData();
if(((RLPElement)transaction.get(6)).getRLPData() != null) {
byte v = ((RLPElement)transaction.get(6)).getRLPData()[0];
byte[] r = ((RLPElement)transaction.get(7)).getRLPData();
byte[] s = ((RLPElement)transaction.get(8)).getRLPData();
this.signature = ECKey.ECDSASignature.fromComponents(r, s, v);
} else {
}
this.parsed = true;
this.hash = this.getHash();
}
示例2
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
peers = new LinkedHashSet<>();
for (int i = 1; i < paramsList.size(); ++i) {
RLPList peerParams = (RLPList) paramsList.get(i);
byte[] ipBytes = peerParams.get(0).getRLPData();
byte[] portBytes = peerParams.get(1).getRLPData();
byte[] peerIdRaw = peerParams.get(2).getRLPData();
try {
int peerPort = ByteUtil.byteArrayToInt(portBytes);
InetAddress address = InetAddress.getByAddress(ipBytes);
String peerId = peerIdRaw == null ? "" : Hex.toHexString(peerIdRaw);
Peer peer = new Peer(address, peerPort, peerId);
peers.add(peer);
} catch (UnknownHostException e) {
throw new RuntimeException("Malformed ip", e);
}
}
this.parsed = true;
}
示例3
public void rlpParse() {
RLPList decodedTxList = RLP.decode2(rlpEncoded);
RLPList transaction = (RLPList) decodedTxList.get(0);
this.nonce = ((RLPItem) transaction.get(0)).getRLPData();
this.gasPrice = ((RLPItem) transaction.get(1)).getRLPData();
this.gasLimit = ((RLPItem) transaction.get(2)).getRLPData();
this.receiveAddress = ((RLPItem) transaction.get(3)).getRLPData();
this.value = ((RLPItem) transaction.get(4)).getRLPData();
this.data = ((RLPItem) transaction.get(5)).getRLPData();
// only parse signature in case tx is signed
if(((RLPItem) transaction.get(6)).getRLPData() != null) {
byte v = ((RLPItem) transaction.get(6)).getRLPData()[0];
byte[] r = ((RLPItem) transaction.get(7)).getRLPData();
byte[] s = ((RLPItem) transaction.get(8)).getRLPData();
this.signature = ECDSASignature.fromComponents(r, s, v);
} else {
logger.debug("RLP encoded tx is not signed!");
}
this.parsed = true;
this.hash = this.getHash();
}
示例4
private void parseRLP() {
RLPList params = RLP.decode2(rlpEncoded);
RLPList block = (RLPList) params.get(0);
// Parse Header
RLPList header = (RLPList) block.get(0);
this.header = new BlockHeader(header);
// Parse Transactions
RLPList txReceipts = (RLPList) block.get(1);
this.parseTxs(this.header.getTxTrieRoot(), txReceipts);
// Parse Uncles
RLPList uncleBlocks = (RLPList) block.get(2);
for (RLPElement rawUncle : uncleBlocks) {
RLPList uncleHeader = (RLPList) rawUncle;
BlockHeader blockData = new BlockHeader(uncleHeader);
this.uncleList.add(blockData);
}
this.parsed = true;
}
示例5
private void parseTxs(byte[] expectedRoot, RLPList txReceipts) {
this.txsState = new TrieImpl(null);
for (int i = 0; i < txReceipts.size(); i++) {
RLPElement rlpTxReceipt = txReceipts.get(i);
RLPElement txData = ((RLPList)rlpTxReceipt).get(0);
// YP 4.3.1
RLPElement pstTxState = ((RLPList)rlpTxReceipt).get(1);
RLPElement cummGas = ((RLPList)rlpTxReceipt).get(2);
Transaction tx = new Transaction(txData.getRLPData());
this.transactionsList.add(tx);
TransactionReceipt txReceipt =
new TransactionReceipt(tx, pstTxState.getRLPData(), cummGas.getRLPData());
this.addTxReceipt(i, txReceipt);
}
String calculatedRoot = Hex.toHexString(txsState.getRootHash());
if(!calculatedRoot.equals(Hex.toHexString(expectedRoot)))
logger.error("Added tx receipts don't match the given txsStateRoot");
}
示例6
private void parse(byte[] encoded) {
RLPList l = (RLPList) RLP.decode2(encoded).get(0);
updateHash = l.get(0).getRLPData();
for (RLPElement aRInserted : (RLPList) l.get(1)) {
insertedKeys.add(aRInserted.getRLPData());
}
for (RLPElement aRDeleted : (RLPList) l.get(2)) {
deletedKeys.add(aRDeleted.getRLPData());
}
}
示例7
private synchronized void parseRLP() {
if (parsed) {
return;
}
RLPList params = RLP.decode2(rlpEncoded);
RLPList block = (RLPList) params.get(0);
// Parse Header
RLPList header = (RLPList) block.get(0);
this.header = new BlockHeader(header);
this.parsed = true;
}
示例8
public AccountState(byte[] rlpData) {
this.rlpEncoded = rlpData;
RLPList items = (RLPList) RLP.decode2(rlpEncoded).get(0);
this.nonce = ByteUtil.bytesToBigInteger(items.get(0).getRLPData());
this.balance = ByteUtil.bytesToBigInteger(items.get(1).getRLPData());
this.stateRoot = items.get(2).getRLPData();
this.codeHash = items.get(3).getRLPData();
this.owner = items.get(4).getRLPData();
}
示例9
private void parse(byte[] encoded) {
RLPList l = (RLPList) RLP.decode2(encoded).get(0);
updateHash = l.get(0).getRLPData();
for (RLPElement aRInserted : (RLPList) l.get(1)) {
insertedKeys.add(aRInserted.getRLPData());
}
for (RLPElement aRDeleted : (RLPList) l.get(2)) {
deletedKeys.add(aRDeleted.getRLPData());
}
}
示例10
private synchronized void parseRLP() {
if (parsed) {
return;
}
RLPList params = RLP.decode2(rlpEncoded);
RLPList block = (RLPList) params.get(0);
// Parse Header
RLPList header = (RLPList) block.get(0);
this.header = new BlockHeader(header);
this.parsed = true;
}
示例11
public AccountState(byte[] rlpData) {
this.rlpEncoded = rlpData;
RLPList items = (RLPList) RLP.decode2(rlpEncoded).get(0);
this.nonce = ByteUtil.bytesToBigInteger(items.get(0).getRLPData());
this.balance = ByteUtil.bytesToBigInteger(items.get(1).getRLPData());
this.stateRoot = items.get(2).getRLPData();
this.codeHash = items.get(3).getRLPData();
this.owner = items.get(4).getRLPData();
}
示例12
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
blockHashes = new ArrayList<>();
for (int i = 1; i < paramsList.size(); ++i) {
blockHashes.add(((RLPItem) paramsList.get(i)).getRLPData());
}
parsed = true;
}
示例13
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
this.protocolVersion = ((RLPItem) paramsList.get(1)).getRLPData()[0];
byte[] networkIdBytes = ((RLPItem) paramsList.get(2)).getRLPData();
this.networkId = networkIdBytes == null ? 0 : networkIdBytes[0];
this.totalDifficulty = ((RLPItem) paramsList.get(3)).getRLPData();
this.bestHash = ((RLPItem) paramsList.get(4)).getRLPData();
this.genesisHash = ((RLPItem) paramsList.get(5)).getRLPData();
parsed = true;
}
示例14
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
blockHashes = new ArrayList<>();
for (int i = 1; i < paramsList.size(); ++i) {
RLPItem rlpData = ((RLPItem) paramsList.get(i));
blockHashes.add(rlpData.getRLPData());
}
parsed = true;
}
示例15
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
blocks = new ArrayList<>();
for (int i = 1; i < paramsList.size(); ++i) {
RLPList rlpData = ((RLPList) paramsList.get(i));
Block blockData = new Block(rlpData.getRLPData());
blocks.add(blockData);
}
parsed = true;
}
示例16
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
this.bestHash = paramsList.get(1).getRLPData();
byte[] maxBlocksBytes = paramsList.get(2).getRLPData();
this.maxBlocks = ByteUtil.byteArrayToInt(maxBlocksBytes);
parsed = true;
}
示例17
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
RLPList blockRLP = ((RLPList) paramsList.get(1));
block = new Block(blockRLP.getRLPData());
difficulty = paramsList.get(2).getRLPData();
parsed = true;
}
示例18
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
transactions = new HashSet<>();
for (int i = 1; i < paramsList.size(); ++i) {
RLPList rlpTxData = (RLPList) paramsList.get(i);
Transaction tx = new Transaction(rlpTxData.getRLPData());
transactions.add(tx);
}
parsed = true;
}
示例19
private void parse() {
RLPList paramsList = (RLPList) RLP.decode2(encoded).get(0);
byte[] reasonBytes = ((RLPItem) paramsList.get(1)).getRLPData();
if (reasonBytes == null)
this.reason = REQUESTED;
else
this.reason = ReasonCode.fromInt(reasonBytes[0]);
parsed = true;
}
示例20
public AccountState(byte[] rlpData) {
this.rlpEncoded = rlpData;
RLPList items = (RLPList) RLP.decode2(rlpEncoded).get(0);
this.nonce = new BigInteger(1, ((items.get(0).getRLPData()) == null ? new byte[]{0} :
items.get(0).getRLPData()));
this.balance = new BigInteger(1, ((items.get(1).getRLPData()) == null ? new byte[]{0} :
items.get(1).getRLPData()));
this.stateRoot = items.get(2).getRLPData();
this.codeHash = items.get(3).getRLPData();
}
示例21
public BlockHeader(RLPList rlpHeader) {
this.parentHash = ((RLPItem) rlpHeader.get(0)).getRLPData();
this.unclesHash = ((RLPItem) rlpHeader.get(1)).getRLPData();
this.coinbase = ((RLPItem) rlpHeader.get(2)).getRLPData();
this.stateRoot = ((RLPItem) rlpHeader.get(3)).getRLPData();
this.txTrieRoot = ((RLPItem) rlpHeader.get(4)).getRLPData();
if(this.txTrieRoot == null)
this.txTrieRoot = EMPTY_BYTE_ARRAY;
this.difficulty = ((RLPItem) rlpHeader.get(5)).getRLPData();
byte[] nrBytes = ((RLPItem) rlpHeader.get(6)).getRLPData();
byte[] gpBytes = ((RLPItem) rlpHeader.get(7)).getRLPData();
byte[] glBytes = ((RLPItem) rlpHeader.get(8)).getRLPData();
byte[] guBytes = ((RLPItem) rlpHeader.get(9)).getRLPData();
byte[] tsBytes = ((RLPItem) rlpHeader.get(10)).getRLPData();
this.number = nrBytes == null ? 0 : (new BigInteger(1, nrBytes)).longValue();
this.minGasPrice = gpBytes == null ? 0 : (new BigInteger(1, gpBytes)).longValue();
this.gasLimit = glBytes == null ? 0 : (new BigInteger(1, glBytes)).longValue();
this.gasUsed = guBytes == null ? 0 : (new BigInteger(1, guBytes)).longValue();
this.timestamp = tsBytes == null ? 0 : (new BigInteger(1, tsBytes)).longValue();
this.extraData = ((RLPItem) rlpHeader.get(11)).getRLPData();
this.nonce = ((RLPItem) rlpHeader.get(12)).getRLPData();
}
示例22
public BlockHeader(byte[] encoded) {
this((RLPList) RLP.decode2(encoded).get(0));
}
示例23
public BlockHeader(RLPList rlpHeader) {
this.parentHash = rlpHeader.get(0).getRLPData();
this.hash = rlpHeader.get(1).getRLPData();
byte[] nrBytes = rlpHeader.get(2).getRLPData();
this.number = ByteUtil.byteArrayToLong(nrBytes);
}
示例24
public BlockHeader(byte[] encoded) {
this((RLPList) RLP.decode2(encoded).get(0));
}
示例25
public BlockHeader(RLPList rlpHeader) {
this.parentHash = rlpHeader.get(0).getRLPData();
this.hash = rlpHeader.get(1).getRLPData();
byte[] nrBytes = rlpHeader.get(2).getRLPData();
this.number = ByteUtil.byteArrayToLong(nrBytes);
}
示例26
/**
* Parse wire byte[] message into RLP elements
*
* @param msgData
* - raw RLP data
* @return rlpList
* - outcome of recursive RLP structure
*/
public static RLPList decode2(byte[] msgData) {
RLPList rlpList = new RLPList();
fullTraverse(msgData, 0, 0, msgData.length, 1, rlpList);
return rlpList;
}