Untitled
unknown
kotlin
a year ago
2.2 kB
7
Indexable
class BlockVerifyTest { companion object { private val LEADER_VRF_HEADER = ByteArray(1) { 0x4C.toByte() /* 'L' */ } } @Test fun testBlockVerify() { val libraryPath = "/usr/local/lib/libsodium.so" SodiumLibrary.setLibraryPath(libraryPath) // preprod block // https://preprod.cardanoscan.io/block/1864129 val slot = 50670495L // // epoch nonce val eta0 = "f80b9ba7ea6efd2e2d6ec4bb6d83aed5caa2326bd02ab792755bcec46dc00b25".hexToByteArray() val vrfVkey = "e9fff58586a4a588f15f371b4d7bfc04344b6a281bce39a7ab81fe5b6751cbac".hexToByteArray() val blockVrf = "bdc34cb0cd1b05a66f571bae655e5ded79e05363d75474873ea293ef1c0929f3d80236fd6d88137ec601953c3c430b6c72f1593570c3bd94bba4f3ac788e2846".hexToByteArray() val blockVrfSignature = "e5cfc760a2c6fb8cbc73c9cfab3492a19aafc8e6a103cbfb3c9e72cd737a6aac5248fda1a49e61a1ee128e02265ad56a7fcaa75a0c7c9260d8dc29e434b9a646ba8f8a8dd613eedf0acc3e8a4d91c605".hexToByteArray() val blockBodyHash = "c4a1ce54bf726c66ea5a1384d5952f8c14491b9a36e22d3635fa448ab5e77a4f".hexToByteArray() // calculate the leader vrf from the block vrf val expectedLeaderVrf = "00000d9118cdc93f8640c71693ffe8f80796d07423691f00611e66f988672d24" val leaderVrf = Blake2b.hash256(LEADER_VRF_HEADER + blockVrf).toHexString() assertThat(leaderVrf).isEqualTo(expectedLeaderVrf) // Quick verification that the block's Vrf is not malformed so we can fail-fast for people trying to // game the system. val message = SodiumLibrary.cryptoVrfProofToHash_ietfdraft03(blockVrfSignature) assertThat(message.toHexString()).isEqualTo(blockVrf.toHexString()) val blockUtils = BlockUtils(mockk {}, libraryPath) val inputVrf = blockUtils.mkInputVRF(slot, eta0) println("inputVrf: ${inputVrf.toHexString()}") // This PROVES that the block was signed by the node's VRF SKey. We only need their public VKey to verify that. val blockVrfVerify = SodiumLibrary.cryptoVrfVerify_ietfdraft03(vrfVkey, blockVrfSignature, inputVrf) assertThat(blockVrfVerify.toHexString()).isEqualTo(blockVrf.toHexString()) } }
Editor is loading...
Leave a Comment