From db405a86b87dc0cc838e5fd90c4fe74bd5926244 Mon Sep 17 00:00:00 2001 From: Vyacheslav Date: Mon, 27 Nov 2023 16:55:20 +0200 Subject: [PATCH] add slot to chain head (#351) --- emerald-grpc | 2 +- .../kotlin/io/emeraldpay/dshackle/data/BlockContainer.kt | 3 ++- src/main/kotlin/io/emeraldpay/dshackle/rpc/StreamHead.kt | 1 + .../dshackle/upstream/solana/SolanaChainSpecific.kt | 7 ++++--- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/emerald-grpc b/emerald-grpc index e6fcfa6f..6c969f4e 160000 --- a/emerald-grpc +++ b/emerald-grpc @@ -1 +1 @@ -Subproject commit e6fcfa6f811afc445c4a8966ed7cfebcbf678d4a +Subproject commit 6c969f4e74bb5f363af57e66d9d89bf7da068d1b diff --git a/src/main/kotlin/io/emeraldpay/dshackle/data/BlockContainer.kt b/src/main/kotlin/io/emeraldpay/dshackle/data/BlockContainer.kt index 96eddaf5..08133a53 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/data/BlockContainer.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/data/BlockContainer.kt @@ -27,7 +27,7 @@ import io.emeraldpay.etherjar.rpc.json.TransactionRefJson import java.math.BigInteger import java.time.Instant -class BlockContainer( +class BlockContainer @JvmOverloads constructor( val height: Long, val hash: BlockId, val difficulty: BigInteger, @@ -39,6 +39,7 @@ class BlockContainer( val transactions: List = emptyList(), val nodeRating: Int = 0, val upstreamId: String = "", + val slot: Long = 0, ) : SourceContainer(json, parsed) { val enriched: Boolean = transactions.isNotEmpty() diff --git a/src/main/kotlin/io/emeraldpay/dshackle/rpc/StreamHead.kt b/src/main/kotlin/io/emeraldpay/dshackle/rpc/StreamHead.kt index a573b320..7e7336f6 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/rpc/StreamHead.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/rpc/StreamHead.kt @@ -52,6 +52,7 @@ class StreamHead( return BlockchainOuterClass.ChainHead.newBuilder() .setChainValue(chain.id) .setHeight(block.height) + .setSlot(block.slot) .setTimestamp(block.timestamp.toEpochMilli()) .setWeight(ByteString.copyFrom(block.difficulty.toByteArray())) .setBlockId(block.hash.toHex()) diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/solana/SolanaChainSpecific.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/solana/SolanaChainSpecific.kt index 0bda6bf7..dd9d040c 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/solana/SolanaChainSpecific.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/solana/SolanaChainSpecific.kt @@ -65,7 +65,7 @@ object SolanaChainSpecific : AbstractChainSpecific() { ).map { val raw = it.getResult() val block = Global.objectMapper.readValue(it.getResult(), SolanaBlock::class.java) - makeBlock(raw, block, upstreamId) + makeBlock(raw, block, upstreamId, response.max()) }.onErrorResume { log.debug("error during getting last solana block - ${it.message}") Mono.empty() @@ -77,10 +77,10 @@ object SolanaChainSpecific : AbstractChainSpecific() { override fun parseHeader(data: ByteArray, upstreamId: String): BlockContainer { val res = Global.objectMapper.readValue(data, SolanaWrapper::class.java) - return makeBlock(data, res.value.block, upstreamId) + return makeBlock(data, res.value.block, upstreamId, res.context.slot) } - private fun makeBlock(raw: ByteArray, block: SolanaBlock, upstreamId: String): BlockContainer { + private fun makeBlock(raw: ByteArray, block: SolanaBlock, upstreamId: String, slot: Long): BlockContainer { return BlockContainer( height = block.height, hash = BlockId.fromBase64(block.hash), @@ -92,6 +92,7 @@ object SolanaChainSpecific : AbstractChainSpecific() { transactions = emptyList(), upstreamId = upstreamId, parentHash = BlockId.fromBase64(block.parent), + slot = slot, ) }