const DrandEvmnetChainHash, DrandEvmnetScheme, DrandEvmnetPeriodSeconds, DrandEvmnetGenesisTime, DrandEvmnetPubKeyHex
1const (
2 // DrandEvmnetChainHash identifies the chain. It is not used in verification
3 // -- the signed message is keccak256(uint64 round) and nothing else -- so it
4 // is here to name what a signature belongs to, and to make a wrong-chain
5 // fixture obvious to a reader rather than only to the pairing check.
6 DrandEvmnetChainHash = "04f1e9062b8a81f848fded9c12306733282b2727ecced50032187751166ec8c3"
7
8 // DrandEvmnetScheme is the scheme ID, and it is the reason drandcurve.gno
9 // uses SVDW and not SSWU. See DrandDST.
10 DrandEvmnetScheme = "bls-bn254-unchained-on-g1"
11
12 // DrandEvmnetPeriodSeconds is the cadence: ONE ROUND EVERY THREE SECONDS.
13 //
14 // THIS NUMBER IS THE ONE THAT BREAKS THINGS. The SPLASH beacon it replaces
15 // ran at five minutes, so every round-denominated duration anywhere in this
16 // repository was 100x wrong the moment the key changed, while still being
17 // dimensionally consistent and therefore invisible to the build guards that
18 // compared rounds to rounds. Any realm expressing a DURATION in rounds must
19 // multiply by this constant and compare against seconds. See
20 // r/splash/beacon/DRAND-MIGRATION.md section 6.
21 DrandEvmnetPeriodSeconds = 3
22
23 // DrandEvmnetGenesisTime is round 1's unix timestamp, so round r is signed at
24 // DrandEvmnetGenesisTime + DrandEvmnetPeriodSeconds*(r-1).
25 //
26 // NO REALM ON THIS TOOLCHAIN CAN USE THIS FOR ANYTHING, and that is worth
27 // saying where someone will look for it: there is no block-timestamp getter,
28 // so a realm cannot compare a round to the wall clock. It is here so that a
29 // human or a test harness can, and so that the round <-> time mapping the
30 // whole pin argument rests on is written down next to the period.
31 DrandEvmnetGenesisTime = 1727521075
32
33 // DrandEvmnetPubKeyHex is the 128-byte G2 group public key in EIP-197 wire
34 // order (x_imag|x_real|y_imag|y_real) -- exactly the byte string /info serves
35 // as "public_key", which is why it needs no reordering here.
36 //
37 // It is the DKG's collective key, held by no single party. That is the point
38 // of the migration: under the SPLASH beacon one key holder knew every future
39 // round's randomness, and under this one nobody below the threshold does.
40 DrandEvmnetPubKeyHex = "07e1d1d335df83fa98462005690372c643340060d205306a9aa8106b6bd0b3820557ec32c2ad488e4d4f6008f89a346f18492092ccc0d594610de2732c8b808f0095685ae3a85ba243747b1b2f426049010f6b73a0cf1d389351d5aaaa1047f6297d3a4f9749b33eb2d904c9d9ebf17224150ddd7abd7567a9bec6c74480ee0b"
41)The drand "evmnet" chain's identity: the four facts about the beacon that are properties of the CHAIN rather than of any code here.
THIS IS THE ONE PLACE THE GROUP PUBLIC KEY IS WRITTEN DOWN. Before this file it appeared only in test files, duplicated across drandvectors_test.gno and drandgas_test.gno; both now read it from here, and r/splash/beacon decodes it once at init. A second copy of a verification key is a second thing to get wrong, and the wrong one would reject every real signature or -- far worse in a different scheme -- accept a forged one.
IT LIVES IN THIS PURE PACKAGE, NOT IN THE REALM, because it describes drand, not SPLASH. The realm that consumes it is one consumer; the tests are another; r/splash/arcade/raffle needs PeriodSeconds for a build-time guard and must not have to import a realm to get it.
PROVENANCE, AND IT IS NOT DOCUMENTATION. Every value below was read from drand's own /info endpoint and is byte-identical from three independent relays -- api.drand.sh, api2.drand.sh and drand.cloudflare.com. The verbatim curl commands and responses are recorded twice, in testdata/drand/rounds.raw.txt here and in r/splash/beacon/testdata/drand-rounds.raw.txt.