diff --git a/emerald-grpc b/emerald-grpc index e6fcfa6f8..6c969f4e7 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 96eddaf59..08133a53e 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 a573b320c..7e7336f6f 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 0bda6bf7d..dd9d040ca 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, ) }