Added missed fields to NewHeadMessage

- fixed all mappings
- BlockJson structure moved from 3rd party library to dshackle codebase
This commit is contained in:
a10zn8
2023-05-22 23:20:37 +04:00
parent 4f21cb995d
commit baee388d99
40 changed files with 677 additions and 47 deletions

View File

@@ -0,0 +1,373 @@
package io.emeraldpay.dshackle.upstream.ethereum.json;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.emeraldpay.etherjar.domain.Address;
import io.emeraldpay.etherjar.domain.BlockHash;
import io.emeraldpay.etherjar.domain.Bloom;
import io.emeraldpay.etherjar.domain.Wei;
import io.emeraldpay.etherjar.hex.HexData;
import io.emeraldpay.etherjar.rpc.json.TransactionJson;
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson;
import java.io.Serializable;
import java.math.BigInteger;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@JsonDeserialize(using = BlockJsonDeserializer.class)
@JsonSerialize(using = BlockJsonSerializer.class)
public class BlockJson<T extends TransactionRefJson> implements Serializable {
//TODO nonce or sealFields
/**
* the block number. null when its pending block.
*/
private Long number;
/**
* hash of the block. null when its pending block.
*/
private BlockHash hash;
/**
* hash of the parent block.
*/
private BlockHash parentHash;
/**
* SHA3 of the uncles data in the block.
*/
private HexData sha3Uncles;
/**
* the bloom filter for the logs of the block. null when its pending block.
*/
private Bloom logsBloom;
/**
* the root of the transaction trie of the block.
*/
private HexData transactionsRoot;
/**
* the root of the final state trie of the block.
*/
private HexData stateRoot;
/**
* the root of the receipts trie of the block.
*/
private HexData receiptsRoot;
/**
* the address of the beneficiary to whom the mining rewards were given.
*/
private Address miner;
/**
* the difficulty for this block.
*/
private BigInteger difficulty;
/**
* total difficulty of the chain until this block.
*/
private BigInteger totalDifficulty;
/**
* the "extra data" field of this block.
*/
private HexData extraData;
/**
* the size of this block in bytes.
*/
private Long size;
/**
* the maximum gas allowed in this block.
*/
private Long gasLimit;
/**
* the total used gas by all transactions in this block.
*/
private Long gasUsed;
/**
* when the block was collated
*/
private Instant timestamp;
/**
* List of transaction objects, or 32 Bytes transaction hashes depending on the last given parameter.
*
* HexData or TransactionJson
*/
private List<T> transactions;
/**
* list of uncle hashes.
*/
private List<BlockHash> uncles;
/**
* basefee value for that block, as per EIP-1559
*/
private Wei baseFeePerGas;
private HexData mixHash;
private HexData nonce;
private HexData withdrawalsRoot;
public HexData getMixHash() {
return mixHash;
}
public void setMixHash(HexData mixHash) {
this.mixHash = mixHash;
}
public HexData getNonce() {
return nonce;
}
public void setNonce(HexData nonce) {
this.nonce = nonce;
}
public HexData getWithdrawalsRoot() {
return withdrawalsRoot;
}
public void setWithdrawalsRoot(HexData withdrawalsRoot) {
this.withdrawalsRoot = withdrawalsRoot;
}
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public BlockHash getHash() {
return hash;
}
public void setHash(BlockHash hash) {
this.hash = hash;
}
public BlockHash getParentHash() {
return parentHash;
}
public void setParentHash(BlockHash parentHash) {
this.parentHash = parentHash;
}
public HexData getSha3Uncles() {
return sha3Uncles;
}
public void setSha3Uncles(HexData sha3Uncles) {
this.sha3Uncles = sha3Uncles;
}
public Bloom getLogsBloom() {
return logsBloom;
}
public void setLogsBloom(Bloom logsBloom) {
this.logsBloom = logsBloom;
}
public HexData getTransactionsRoot() {
return transactionsRoot;
}
public void setTransactionsRoot(HexData transactionsRoot) {
this.transactionsRoot = transactionsRoot;
}
public HexData getStateRoot() {
return stateRoot;
}
public void setStateRoot(HexData stateRoot) {
this.stateRoot = stateRoot;
}
public HexData getReceiptsRoot() {
return receiptsRoot;
}
public void setReceiptsRoot(HexData receiptsRoot) {
this.receiptsRoot = receiptsRoot;
}
public Address getMiner() {
return miner;
}
public void setMiner(Address miner) {
this.miner = miner;
}
public BigInteger getDifficulty() {
return difficulty;
}
public void setDifficulty(BigInteger difficulty) {
this.difficulty = difficulty;
}
public BigInteger getTotalDifficulty() {
return totalDifficulty;
}
public void setTotalDifficulty(BigInteger totalDifficulty) {
this.totalDifficulty = totalDifficulty;
}
public HexData getExtraData() {
return extraData;
}
public void setExtraData(HexData extraData) {
this.extraData = extraData;
}
public Long getSize() {
return size;
}
public void setSize(Long size) {
this.size = size;
}
public Long getGasLimit() {
return gasLimit;
}
public void setGasLimit(Long gasLimit) {
this.gasLimit = gasLimit;
}
public Long getGasUsed() {
return gasUsed;
}
public void setGasUsed(Long gasUsed) {
this.gasUsed = gasUsed;
}
public Instant getTimestamp() {
return timestamp;
}
public void setTimestamp(Instant timestamp) {
this.timestamp = timestamp;
}
public List<T> getTransactions() {
return transactions;
}
public void setTransactions(List<T> transactions) {
this.transactions = transactions;
}
public List<BlockHash> getUncles() {
return uncles;
}
public void setUncles(List<BlockHash> uncles) {
this.uncles = uncles;
}
public Wei getBaseFeePerGas() {
return baseFeePerGas;
}
public void setBaseFeePerGas(Wei baseFeePerGas) {
this.baseFeePerGas = baseFeePerGas;
}
/**
* If this instance is empty or contains only references, then return as is. Otherwise
* returns a copy of the BlockJson with transactions fields replaced with id references
*
* @return BlockJson instance with transactions ids only.
*/
@SuppressWarnings("unchecked")
public BlockJson<TransactionRefJson> withoutTransactionDetails() {
// if empty then type doesn't matter
if (this.transactions == null || this.transactions.isEmpty()) {
return (BlockJson<TransactionRefJson>) this;
}
// if it's already just a reference
if (this.transactions.stream().noneMatch((tx) -> tx instanceof TransactionJson)) {
return (BlockJson<TransactionRefJson>) this;
}
BlockJson<TransactionRefJson> copy = (BlockJson<TransactionRefJson>) copy();
copy.transactions = new ArrayList<>(this.transactions.size());
for (T tx: this.transactions) {
copy.transactions.add(new TransactionRefJson(tx.getHash()));
}
return copy;
}
/**
*
* @return copy of the current instance
*/
public BlockJson<T> copy() {
BlockJson<T> copy = new BlockJson<>();
copy.number = this.number;
copy.hash = this.hash;
copy.parentHash = this.parentHash;
copy.sha3Uncles = this.sha3Uncles;
copy.logsBloom = this.logsBloom;
copy.transactionsRoot = this.transactionsRoot;
copy.stateRoot = this.stateRoot;
copy.receiptsRoot = this.receiptsRoot;
copy.miner = this.miner;
copy.difficulty = this.difficulty;
copy.totalDifficulty = this.totalDifficulty;
copy.extraData = this.extraData;
copy.size = this.size;
copy.gasLimit = this.gasLimit;
copy.gasUsed = this.gasUsed;
copy.timestamp = this.timestamp;
copy.transactions = this.transactions;
copy.uncles = this.uncles;
copy.baseFeePerGas = this.baseFeePerGas;
copy.withdrawalsRoot = this.withdrawalsRoot;
copy.mixHash = this.mixHash;
copy.nonce = this.nonce;
return copy;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BlockJson<?> blockJson = (BlockJson<?>) o;
return Objects.equals(number, blockJson.number) && Objects.equals(hash, blockJson.hash) && Objects.equals(parentHash, blockJson.parentHash) && Objects.equals(sha3Uncles, blockJson.sha3Uncles) && Objects.equals(logsBloom, blockJson.logsBloom) && Objects.equals(transactionsRoot, blockJson.transactionsRoot) && Objects.equals(stateRoot, blockJson.stateRoot) && Objects.equals(receiptsRoot, blockJson.receiptsRoot) && Objects.equals(miner, blockJson.miner) && Objects.equals(difficulty, blockJson.difficulty) && Objects.equals(totalDifficulty, blockJson.totalDifficulty) && Objects.equals(extraData, blockJson.extraData) && Objects.equals(size, blockJson.size) && Objects.equals(gasLimit, blockJson.gasLimit) && Objects.equals(gasUsed, blockJson.gasUsed) && Objects.equals(timestamp, blockJson.timestamp) && Objects.equals(transactions, blockJson.transactions) && Objects.equals(uncles, blockJson.uncles) && Objects.equals(baseFeePerGas, blockJson.baseFeePerGas) && Objects.equals(mixHash, blockJson.mixHash) && Objects.equals(nonce, blockJson.nonce) && Objects.equals(withdrawalsRoot, blockJson.withdrawalsRoot);
}
@Override
public int hashCode() {
return Objects.hash(number, hash, parentHash, sha3Uncles, logsBloom, transactionsRoot, stateRoot, receiptsRoot, miner, difficulty, totalDifficulty, extraData, size, gasLimit, gasUsed, timestamp, transactions, uncles, baseFeePerGas, mixHash, nonce, withdrawalsRoot);
}
}

View File

@@ -0,0 +1,111 @@
/*
* Copyright (c) 2020 EmeraldPay Inc, All Rights Reserved.
* Copyright (c) 2016-2017 Infinitape Inc, All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.emeraldpay.dshackle.upstream.ethereum.json;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import io.emeraldpay.etherjar.domain.BlockHash;
import io.emeraldpay.etherjar.domain.Bloom;
import io.emeraldpay.etherjar.domain.TransactionId;
import io.emeraldpay.etherjar.hex.HexData;
import io.emeraldpay.etherjar.rpc.json.EtherJsonDeserializer;
import io.emeraldpay.etherjar.rpc.json.TransactionJsonDeserializer;
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson;
import java.io.IOException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
public class BlockJsonDeserializer extends EtherJsonDeserializer<BlockJson<?>> {
private TransactionJsonDeserializer transactionJsonDeserializer = new TransactionJsonDeserializer();
@Override @SuppressWarnings("unchecked")
public BlockJson deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.readValueAsTree();
return deserialize(node);
}
public BlockJson<? extends TransactionRefJson> deserialize(JsonNode node) {
BlockJson<TransactionRefJson> blockJson = new BlockJson<>();
Long number = getLong(node, "number");
if (number != null) {
blockJson.setNumber(number);
}
blockJson.setHash(getBlockHash(node, "hash"));
Long timestamp = getLong(node, "timestamp");
if (timestamp != null) {
blockJson.setTimestamp(Instant.ofEpochSecond(timestamp));
} else {
System.err.println("Null timestamp for block " + number);
}
if (node.has("transactions")) {
List<TransactionRefJson> txes = new ArrayList<>();
for (JsonNode tx: node.get("transactions")) {
if (tx.isObject()) {
txes.add(transactionJsonDeserializer.deserialize(tx));
} else {
txes.add(new TransactionRefJson(TransactionId.from(tx.textValue())));
}
}
blockJson.setTransactions(txes);
}
blockJson.setParentHash(getBlockHash(node, "parentHash"));
blockJson.setSha3Uncles(getData(node, "sha3Uncles"));
blockJson.setMiner(getAddress(node, "miner"));
blockJson.setDifficulty(getQuantity(node, "difficulty"));
blockJson.setTotalDifficulty(getQuantity(node, "totalDifficulty"));
Long size = getLong(node, "size");
if (size != null) {
blockJson.setSize(size);
}
blockJson.setGasLimit(getLong(node, "gasLimit"));
blockJson.setGasUsed(getLong(node, "gasUsed"));
blockJson.setExtraData(getData(node, "extraData"));
HexData logsBloom = getData(node, "logsBloom");
if (logsBloom != null) {
blockJson.setLogsBloom(Bloom.from(logsBloom));
}
List<BlockHash> uncles = new ArrayList<>();
JsonNode unclesNode = node.get("uncles");
if (unclesNode != null && unclesNode.isArray()) {
for (JsonNode tx: unclesNode) {
uncles.add(BlockHash.from(tx.textValue()));
}
}
blockJson.setUncles(uncles);
blockJson.setBaseFeePerGas(getWei(node, "baseFeePerGas"));
blockJson.setReceiptsRoot(getData(node, "receiptsRoot"));
blockJson.setStateRoot(getData(node, "stateRoot"));
blockJson.setTransactionsRoot(getData(node, "transactionsRoot"));
blockJson.setNonce(getData(node, "nonce"));
blockJson.setMixHash(getData(node, "mixHash"));
blockJson.setWithdrawalsRoot(getData(node, "withdrawalsRoot"));
return blockJson;
}
}

View File

@@ -0,0 +1,90 @@
/*
* Copyright (c) 2016-2019 Igor Artamonov, All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.emeraldpay.dshackle.upstream.ethereum.json;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import io.emeraldpay.etherjar.domain.BlockHash;
import io.emeraldpay.etherjar.domain.Wei;
import io.emeraldpay.etherjar.rpc.json.EtherJsonSerializer;
import io.emeraldpay.etherjar.rpc.json.TransactionJson;
import io.emeraldpay.etherjar.rpc.json.TransactionJsonSerializer;
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson;
import java.io.IOException;
public class BlockJsonSerializer extends EtherJsonSerializer<BlockJson<?>> {
private TransactionJsonSerializer transactionJsonSerializer = new TransactionJsonSerializer();
@Override
public void serialize(BlockJson<?> value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
writeField(gen, "number", value.getNumber());
writeField(gen, "hash", value.getHash());
writeField(gen, "timestamp", value.getTimestamp());
Wei baseFeePerGas = value.getBaseFeePerGas();
if (baseFeePerGas != null) {
writeField(gen, "baseFeePerGas", baseFeePerGas);
}
gen.writeFieldName("transactions");
gen.writeStartArray();
if (value.getTransactions() != null) {
for (Object tx: value.getTransactions()) {
if (tx == null) {
gen.writeNull();
} else if (tx instanceof TransactionJson) {
transactionJsonSerializer.serialize((TransactionJson) tx, gen, serializers);
} else if (tx instanceof TransactionRefJson) {
gen.writeString(((TransactionRefJson) tx).getHash().toHex());
}
}
}
gen.writeEndArray();
writeField(gen, "parentHash", value.getParentHash());
writeField(gen, "sha3Uncles", value.getSha3Uncles());
writeField(gen, "miner", value.getMiner());
writeField(gen, "difficulty", value.getDifficulty());
writeField(gen, "totalDifficulty", value.getTotalDifficulty());
if (value.getSize() != null) {
writeFieldNumber(gen, "size", value.getSize().intValue());
}
writeField(gen, "gasLimit", value.getGasLimit());
writeField(gen, "gasUsed", value.getGasUsed());
writeField(gen, "extraData", value.getExtraData());
writeField(gen, "stateRoot", value.getStateRoot());
writeField(gen, "receiptsRoot", value.getReceiptsRoot());
writeField(gen, "transactionsRoot", value.getTransactionsRoot());
writeField(gen, "logsBloom", value.getLogsBloom());
writeField(gen, "mixHash", value.getMixHash());
writeField(gen, "nonce", value.getNonce());
writeField(gen, "withdrawalsRoot", value.getWithdrawalsRoot());
gen.writeFieldName("uncles");
gen.writeStartArray();
if (value.getUncles() != null) {
for (BlockHash uncle: value.getUncles()) {
gen.writeString(uncle.toHex());
}
}
gen.writeEndArray();
gen.writeEndObject();
}
}

View File

@@ -24,7 +24,7 @@ import io.emeraldpay.dshackle.data.TxId
import io.emeraldpay.dshackle.reader.CompoundReader import io.emeraldpay.dshackle.reader.CompoundReader
import io.emeraldpay.dshackle.reader.Reader import io.emeraldpay.dshackle.reader.Reader
import io.emeraldpay.dshackle.upstream.Head import io.emeraldpay.dshackle.upstream.Head
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory

View File

@@ -17,11 +17,11 @@
package io.emeraldpay.dshackle.data package io.emeraldpay.dshackle.data
import io.emeraldpay.dshackle.Global import io.emeraldpay.dshackle.Global
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.Address import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.Bloom import io.emeraldpay.etherjar.domain.Bloom
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import java.math.BigInteger import java.math.BigInteger

View File

@@ -16,8 +16,8 @@
*/ */
package io.emeraldpay.dshackle.data package io.emeraldpay.dshackle.data
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson
import org.bouncycastle.util.encoders.Hex import org.bouncycastle.util.encoders.Hex
class BlockId( class BlockId(

View File

@@ -25,10 +25,10 @@ import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.dshackle.data.TxId import io.emeraldpay.dshackle.data.TxId
import io.emeraldpay.dshackle.upstream.MultistreamHolder import io.emeraldpay.dshackle.upstream.MultistreamHolder
import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosMultiStream import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosMultiStream
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.RpcException import io.emeraldpay.etherjar.rpc.RpcException
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory

View File

@@ -10,7 +10,7 @@ import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.encodeBigInt
import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.encodeList import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.encodeList
import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.fromHexString import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.fromHexString
import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.fromHexStringI import io.emeraldpay.dshackle.upstream.ethereum.RLP.Companion.fromHexStringI
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import org.bouncycastle.jcajce.provider.digest.Keccak import org.bouncycastle.jcajce.provider.digest.Keccak
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.math.BigDecimal import java.math.BigDecimal

View File

@@ -39,11 +39,11 @@ import io.emeraldpay.dshackle.reader.TransformingReader
import io.emeraldpay.dshackle.upstream.Lifecycle import io.emeraldpay.dshackle.upstream.Lifecycle
import io.emeraldpay.dshackle.upstream.Multistream import io.emeraldpay.dshackle.upstream.Multistream
import io.emeraldpay.dshackle.upstream.calls.CallMethods import io.emeraldpay.dshackle.upstream.calls.CallMethods
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.Address import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import org.apache.commons.collections4.Factory import org.apache.commons.collections4.Factory

View File

@@ -15,6 +15,7 @@ import io.emeraldpay.dshackle.reader.Reader
import io.emeraldpay.dshackle.upstream.Multistream import io.emeraldpay.dshackle.upstream.Multistream
import io.emeraldpay.dshackle.upstream.Selector import io.emeraldpay.dshackle.upstream.Selector
import io.emeraldpay.dshackle.upstream.calls.CallMethods import io.emeraldpay.dshackle.upstream.calls.CallMethods
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest
import io.emeraldpay.etherjar.domain.Address import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
@@ -23,7 +24,6 @@ import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.hex.HexQuantity import io.emeraldpay.etherjar.hex.HexQuantity
import io.emeraldpay.etherjar.rpc.RpcException import io.emeraldpay.etherjar.rpc.RpcException
import io.emeraldpay.etherjar.rpc.RpcResponseError import io.emeraldpay.etherjar.rpc.RpcResponseError
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson

View File

@@ -18,8 +18,8 @@ package io.emeraldpay.dshackle.upstream.ethereum
import io.emeraldpay.dshackle.upstream.AbstractChainFees import io.emeraldpay.dshackle.upstream.AbstractChainFees
import io.emeraldpay.dshackle.upstream.ChainFees import io.emeraldpay.dshackle.upstream.ChainFees
import io.emeraldpay.dshackle.upstream.Multistream import io.emeraldpay.dshackle.upstream.Multistream
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory

View File

@@ -16,8 +16,8 @@
package io.emeraldpay.dshackle.upstream.ethereum package io.emeraldpay.dshackle.upstream.ethereum
import io.emeraldpay.api.proto.BlockchainOuterClass import io.emeraldpay.api.proto.BlockchainOuterClass
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory

View File

@@ -17,8 +17,8 @@ package io.emeraldpay.dshackle.upstream.ethereum
import io.emeraldpay.api.proto.BlockchainOuterClass import io.emeraldpay.api.proto.BlockchainOuterClass
import io.emeraldpay.dshackle.upstream.Multistream import io.emeraldpay.dshackle.upstream.Multistream
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory

View File

@@ -23,10 +23,10 @@ import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.dshackle.reader.JsonRpcReader import io.emeraldpay.dshackle.reader.JsonRpcReader
import io.emeraldpay.dshackle.upstream.BlockValidator import io.emeraldpay.dshackle.upstream.BlockValidator
import io.emeraldpay.dshackle.upstream.Lifecycle import io.emeraldpay.dshackle.upstream.Lifecycle
import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.dshackle.upstream.forkchoice.ForkChoice import io.emeraldpay.dshackle.upstream.forkchoice.ForkChoice
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse
import io.emeraldpay.etherjar.rpc.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import reactor.core.Disposable import reactor.core.Disposable
import reactor.core.publisher.Flux import reactor.core.publisher.Flux

View File

@@ -43,6 +43,14 @@ class ProduceNewHeads(
block.logsBloom, block.logsBloom,
block.miner, block.miner,
block.baseFeePerGas?.amount, block.baseFeePerGas?.amount,
block.extraData,
block.mixHash,
block.nonce,
block.receiptsRoot,
block.sha3Uncles,
block.stateRoot,
block.transactionsRoot,
block.withdrawalsRoot,
it.upstreamId it.upstreamId
) )
} }

View File

@@ -21,14 +21,15 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize
import io.emeraldpay.etherjar.domain.Address import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.Bloom import io.emeraldpay.etherjar.domain.Bloom
import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.hex.HexData
import io.emeraldpay.etherjar.rpc.json.HexDataSerializer import io.emeraldpay.etherjar.rpc.json.HexDataSerializer
import java.math.BigInteger import java.math.BigInteger
import java.time.Instant import java.time.Instant
/** /**
* Common fields for newHeads event. IT's different from Block JSON and doesn't include many fields, most notable is * Common fields for newHeads event. IT's different from Block JSON and doesn't include many fields, most notable is
* list of transactions. Also, our JSON doesn't include rarely used fields such as extraData, sha3uncles, stateRoot, * list of transactions.
* transactionRoot and some others.
*/ */
data class NewHeadMessage( data class NewHeadMessage(
@get:JsonSerialize(using = NumberAsHexSerializer::class) @get:JsonSerialize(using = NumberAsHexSerializer::class)
@@ -52,6 +53,30 @@ data class NewHeadMessage(
@get:JsonSerialize(using = NumberAsHexSerializer::class) @get:JsonSerialize(using = NumberAsHexSerializer::class)
@get:JsonInclude(JsonInclude.Include.NON_NULL) @get:JsonInclude(JsonInclude.Include.NON_NULL)
val baseFeePerGas: BigInteger?, val baseFeePerGas: BigInteger?,
@get:JsonSerialize(using = HexDataSerializer::class)
val extraData: HexData,
@get:JsonSerialize(using = HexDataSerializer::class)
val mixHash: HexData?,
@get:JsonSerialize(using = HexDataSerializer::class)
val nonce: HexData,
@get:JsonSerialize(using = HexDataSerializer::class)
val receiptsRoot: HexData,
@get:JsonSerialize(using = HexDataSerializer::class)
val sha3Uncles: HexData,
@get:JsonSerialize(using = HexDataSerializer::class)
val stateRoot: HexData,
@get:JsonSerialize(using = HexDataSerializer::class)
val transactionsRoot: HexData,
@get:JsonSerialize(using = HexDataSerializer::class)
@get:JsonInclude(JsonInclude.Include.NON_NULL)
val withdrawalsRoot: HexData?,
@get:JsonIgnore @get:JsonIgnore
override val upstreamId: String override val upstreamId: String,
// lists always empty
val transactions: List<TransactionId> = emptyList(),
val uncles: List<BlockHash> = emptyList(),
val sealFields: List<BlockHash> = emptyList(),
) : HasUpstream ) : HasUpstream

View File

@@ -20,7 +20,7 @@ import io.emeraldpay.dshackle.Global
import io.emeraldpay.dshackle.data.BlockContainer import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import spock.lang.Specification import spock.lang.Specification

View File

@@ -22,7 +22,7 @@ import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.dshackle.data.BlockId import io.emeraldpay.dshackle.data.BlockId
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import spock.lang.Specification import spock.lang.Specification

View File

@@ -23,7 +23,7 @@ import io.emeraldpay.dshackle.data.BlockId
import io.emeraldpay.dshackle.data.TxId import io.emeraldpay.dshackle.data.TxId
import io.emeraldpay.dshackle.test.IntegrationTestingCommons import io.emeraldpay.dshackle.test.IntegrationTestingCommons
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import io.lettuce.core.api.StatefulRedisConnection import io.lettuce.core.api.StatefulRedisConnection
import spock.lang.IgnoreIf import spock.lang.IgnoreIf

View File

@@ -26,7 +26,7 @@ import io.emeraldpay.dshackle.upstream.Head
import io.emeraldpay.etherjar.domain.Address import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson

View File

@@ -17,7 +17,7 @@ package io.emeraldpay.dshackle.cache
import io.emeraldpay.dshackle.data.BlockContainer import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import spock.lang.Specification import spock.lang.Specification

View File

@@ -23,7 +23,7 @@ import io.emeraldpay.dshackle.data.TxContainer
import io.emeraldpay.dshackle.data.TxId import io.emeraldpay.dshackle.data.TxId
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import spock.lang.Specification import spock.lang.Specification

View File

@@ -26,7 +26,7 @@ import io.emeraldpay.dshackle.test.IntegrationTestingCommons
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import io.lettuce.core.api.StatefulRedisConnection import io.lettuce.core.api.StatefulRedisConnection

View File

@@ -28,7 +28,7 @@ import io.emeraldpay.dshackle.test.MultistreamHolderMock
import io.emeraldpay.dshackle.test.TestingCommons import io.emeraldpay.dshackle.test.TestingCommons
import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosRpcUpstream import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosRpcUpstream
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import reactor.core.publisher.Mono import reactor.core.publisher.Mono
import reactor.test.StepVerifier import reactor.test.StepVerifier

View File

@@ -24,7 +24,7 @@ import io.emeraldpay.dshackle.test.MultistreamHolderMock
import io.emeraldpay.dshackle.test.TestingCommons import io.emeraldpay.dshackle.test.TestingCommons
import io.emeraldpay.dshackle.upstream.MultistreamHolder import io.emeraldpay.dshackle.upstream.MultistreamHolder
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import reactor.test.StepVerifier import reactor.test.StepVerifier
import spock.lang.Specification import spock.lang.Specification

View File

@@ -29,7 +29,7 @@ import io.emeraldpay.dshackle.upstream.MultistreamHolder
import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosMultiStream import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosMultiStream
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import reactor.core.publisher.Flux import reactor.core.publisher.Flux

View File

@@ -33,7 +33,7 @@ import io.emeraldpay.dshackle.upstream.ethereum.EthereumPosMultiStream
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.micrometer.core.instrument.MeterRegistry import io.micrometer.core.instrument.MeterRegistry
import io.micrometer.core.instrument.logging.LoggingMeterRegistry import io.micrometer.core.instrument.logging.LoggingMeterRegistry
import org.apache.commons.lang3.StringUtils import org.apache.commons.lang3.StringUtils

View File

@@ -2,7 +2,7 @@ package io.emeraldpay.dshackle.upstream
import io.emeraldpay.dshackle.data.BlockContainer import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import spock.lang.Specification import spock.lang.Specification
import java.time.Instant import java.time.Instant

View File

@@ -18,7 +18,7 @@ package io.emeraldpay.dshackle.upstream
import io.emeraldpay.dshackle.data.BlockContainer import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import org.jetbrains.annotations.NotNull import org.jetbrains.annotations.NotNull
import reactor.core.publisher.Flux import reactor.core.publisher.Flux
import reactor.core.publisher.Sinks import reactor.core.publisher.Sinks

View File

@@ -32,7 +32,7 @@ import io.emeraldpay.dshackle.upstream.grpc.EthereumPosGrpcUpstream
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import org.jetbrains.annotations.NotNull import org.jetbrains.annotations.NotNull
import reactor.core.publisher.Flux import reactor.core.publisher.Flux

View File

@@ -22,7 +22,7 @@ import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.dshackle.upstream.BlockValidator import io.emeraldpay.dshackle.upstream.BlockValidator
import io.emeraldpay.dshackle.upstream.forkchoice.MostWorkForkChoice import io.emeraldpay.dshackle.upstream.forkchoice.MostWorkForkChoice
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import reactor.core.publisher.Flux import reactor.core.publisher.Flux
import reactor.core.scheduler.Schedulers import reactor.core.scheduler.Schedulers
import reactor.test.StepVerifier import reactor.test.StepVerifier

View File

@@ -4,7 +4,7 @@ package io.emeraldpay.dshackle.upstream.ethereum
import io.emeraldpay.dshackle.Global import io.emeraldpay.dshackle.Global
import io.emeraldpay.dshackle.data.BlockContainer import io.emeraldpay.dshackle.data.BlockContainer
import io.emeraldpay.dshackle.data.BlockId import io.emeraldpay.dshackle.data.BlockId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import spock.lang.Specification import spock.lang.Specification

View File

@@ -19,7 +19,7 @@ import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson import io.emeraldpay.etherjar.rpc.json.TransactionReceiptJson
import org.apache.commons.collections4.Factory import org.apache.commons.collections4.Factory

View File

@@ -16,7 +16,7 @@
package io.emeraldpay.dshackle.upstream.ethereum package io.emeraldpay.dshackle.upstream.ethereum
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import spock.lang.Specification import spock.lang.Specification

View File

@@ -10,7 +10,7 @@ import io.emeraldpay.dshackle.upstream.EmptyHead
import io.emeraldpay.dshackle.upstream.Head import io.emeraldpay.dshackle.upstream.Head
import io.emeraldpay.dshackle.upstream.calls.DefaultEthereumMethods import io.emeraldpay.dshackle.upstream.calls.DefaultEthereumMethods
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import org.apache.commons.collections4.functors.ConstantFactory import org.apache.commons.collections4.functors.ConstantFactory
import reactor.core.publisher.Mono import reactor.core.publisher.Mono
import spock.lang.Specification import spock.lang.Specification

View File

@@ -20,7 +20,7 @@ import io.emeraldpay.dshackle.upstream.ChainFees
import io.emeraldpay.dshackle.upstream.Head import io.emeraldpay.dshackle.upstream.Head
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.domain.Wei import io.emeraldpay.etherjar.domain.Wei
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionJson import io.emeraldpay.etherjar.rpc.json.TransactionJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import reactor.core.publisher.Flux import reactor.core.publisher.Flux

View File

@@ -22,7 +22,7 @@ import io.emeraldpay.dshackle.upstream.BlockValidator
import io.emeraldpay.dshackle.upstream.forkchoice.AlwaysForkChoice import io.emeraldpay.dshackle.upstream.forkchoice.AlwaysForkChoice
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import reactor.core.publisher.Flux import reactor.core.publisher.Flux
import reactor.core.publisher.Mono import reactor.core.publisher.Mono

View File

@@ -23,7 +23,7 @@ import io.emeraldpay.dshackle.upstream.Selector
import io.emeraldpay.dshackle.upstream.ethereum.EthereumMultistream import io.emeraldpay.dshackle.upstream.ethereum.EthereumMultistream
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.TransactionId import io.emeraldpay.etherjar.domain.TransactionId
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import io.emeraldpay.etherjar.rpc.json.TransactionRefJson
import reactor.core.publisher.Flux import reactor.core.publisher.Flux
import reactor.core.scheduler.Schedulers import reactor.core.scheduler.Schedulers

View File

@@ -5,6 +5,7 @@ import io.emeraldpay.dshackle.Global
import io.emeraldpay.etherjar.domain.Address import io.emeraldpay.etherjar.domain.Address
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.domain.Bloom import io.emeraldpay.etherjar.domain.Bloom
import io.emeraldpay.etherjar.hex.HexData
import spock.lang.Specification import spock.lang.Specification
import java.time.Instant import java.time.Instant
@@ -24,19 +25,41 @@ class NewHeadMessageSpec extends Specification {
Bloom.from("0x012040020880820356a20b8e980a2004c19f1291800501040001180bb029d0002d8c49440e002048ca00d48581000d900a458100c90139056140880582f22a0a8050224c020c233be8c3080c0a016aa4226a2001446c800822080445a2454118139804001202068401841900840c484222420c4b2022046052c0011e81a9e450085883708545810592e40040010411442300080b0130711f602880600a30c90702cb420a0102a644820650908802840810948142541404884300acc69d000840702020224c000020200880c10858418408098a61445b0ab0480234862655a5000434311b91044849c165040411aa0400b00008222642d24313020d9022219120"), Bloom.from("0x012040020880820356a20b8e980a2004c19f1291800501040001180bb029d0002d8c49440e002048ca00d48581000d900a458100c90139056140880582f22a0a8050224c020c233be8c3080c0a016aa4226a2001446c800822080445a2454118139804001202068401841900840c484222420c4b2022046052c0011e81a9e450085883708545810592e40040010411442300080b0130711f602880600a30c90702cb420a0102a644820650908802840810948142541404884300acc69d000840702020224c000020200880c10858418408098a61445b0ab0480234862655a5000434311b91044849c165040411aa0400b00008222642d24313020d9022219120"),
Address.from("0x829bd824b016326a401d083b33d092293333a830"), Address.from("0x829bd824b016326a401d083b33d092293333a830"),
null, null,
"NewHeadMessageSpec" HexData.from("0x0000000000000001"), // extra data
HexData.from("0x0000000000000002"), // mixHash
HexData.from("0x0000000000000003"), // nonce
HexData.from("0x0000000000000004"), // receiptsRoot
HexData.from("0x0000000000000005"), // sha3Uncles
HexData.from("0x0000000000000006"), // stateRoot
HexData.from("0x0000000000000007"), // transactionsRoot
HexData.from("0x0000000000000008"), // withdrawalsRoot
"NewHeadMessageSpec",
[],
[],
[]
) )
ObjectMapper objectMapper = Global.getObjectMapper() ObjectMapper objectMapper = Global.getObjectMapper()
def exp = '{' + def exp = '{'+
'"number":"0xc7f3b4",' + '"number":"0xc7f3b4",' +
'"hash":"0xd3b7ae1a79f5418debae9b8e9318094298c087183be0f7a0151b0e76ba38d6bc",' + '"hash":"0xd3b7ae1a79f5418debae9b8e9318094298c087183be0f7a0151b0e76ba38d6bc",'+
'"parentHash":"0xcda7fd1d6ee2d5da7505a0634e27f41d5ae87a344cd75bb64c1dc0863fbe9c0a",' + '"parentHash":"0xcda7fd1d6ee2d5da7505a0634e27f41d5ae87a344cd75bb64c1dc0863fbe9c0a",'+
'"timestamp":"0x6128264d",' + '"timestamp":"0x6128264d",'+
'"difficulty":"0x1de7f7a458cc08",' + '"difficulty":"0x1de7f7a458cc08",'+
'"gasLimit":"0x1ca35ef",' + '"gasLimit":"0x1ca35ef",'+
'"gasUsed":"0x7bb33e",' + '"gasUsed":"0x7bb33e",'+
'"logsBloom":"0x012040020880820356a20b8e980a2004c19f1291800501040001180bb029d0002d8c49440e002048ca00d48581000d900a458100c90139056140880582f22a0a8050224c020c233be8c3080c0a016aa4226a2001446c800822080445a2454118139804001202068401841900840c484222420c4b2022046052c0011e81a9e450085883708545810592e40040010411442300080b0130711f602880600a30c90702cb420a0102a644820650908802840810948142541404884300acc69d000840702020224c000020200880c10858418408098a61445b0ab0480234862655a5000434311b91044849c165040411aa0400b00008222642d24313020d9022219120",' + '"logsBloom":"0x012040020880820356a20b8e980a2004c19f1291800501040001180bb029d0002d8c49440e002048ca00d48581000d900a458100c90139056140880582f22a0a8050224c020c233be8c3080c0a016aa4226a2001446c800822080445a2454118139804001202068401841900840c484222420c4b2022046052c0011e81a9e450085883708545810592e40040010411442300080b0130711f602880600a30c90702cb420a0102a644820650908802840810948142541404884300acc69d000840702020224c000020200880c10858418408098a61445b0ab0480234862655a5000434311b91044849c165040411aa0400b00008222642d24313020d9022219120",'+
'"miner":"0x829bd824b016326a401d083b33d092293333a830"' + '"miner":"0x829bd824b016326a401d083b33d092293333a830",'+
'"extraData":"0x0000000000000001",'+
'"mixHash":"0x0000000000000002",'+
'"nonce":"0x0000000000000003",'+
'"receiptsRoot":"0x0000000000000004",'+
'"sha3Uncles":"0x0000000000000005",'+
'"stateRoot":"0x0000000000000006",'+
'"transactionsRoot":"0x0000000000000007",'+
'"withdrawalsRoot":"0x0000000000000008",'+
'"transactions":[],'+
'"uncles":[],'+
'"sealFields":[]'+
'}' '}'
when: when:
def json = objectMapper.writeValueAsString(obj) def json = objectMapper.writeValueAsString(obj)

View File

@@ -33,7 +33,7 @@ import io.emeraldpay.dshackle.upstream.UpstreamAvailability
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcGrpcClient import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcGrpcClient
import io.emeraldpay.dshackle.upstream.rpcclient.RpcMetrics import io.emeraldpay.dshackle.upstream.rpcclient.RpcMetrics
import io.emeraldpay.etherjar.domain.BlockHash import io.emeraldpay.etherjar.domain.BlockHash
import io.emeraldpay.etherjar.rpc.json.BlockJson import io.emeraldpay.dshackle.upstream.ethereum.json.BlockJson
import io.grpc.stub.StreamObserver import io.grpc.stub.StreamObserver
import io.micrometer.core.instrument.Counter import io.micrometer.core.instrument.Counter
import io.micrometer.core.instrument.Timer import io.micrometer.core.instrument.Timer