-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathrandao.zig
More file actions
40 lines (38 loc) · 1.58 KB
/
randao.zig
File metadata and controls
40 lines (38 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const types = @import("consensus_types");
const Slot = types.primitive.Slot.Type;
const BeaconConfig = @import("config").BeaconConfig;
const EpochCache = @import("../cache/epoch_cache.zig").EpochCache;
const Root = types.primitive.Root.Type;
const SingleSignatureSet = @import("../utils/signature_sets.zig").SingleSignatureSet;
const computeEpochAtSlot = @import("../epoch.zig").computeEpochAtSlot;
const c = @import("constants");
const computeSigningRoot = @import("../utils/signing_root.zig").computeSigningRoot;
const verifySingleSignatureSet = @import("../utils/signature_sets.zig").verifySingleSignatureSet;
pub fn verifyRandaoSignature(
config: *const BeaconConfig,
epoch_cache: *const EpochCache,
randao_reveal: *const [96]u8,
slot: Slot,
proposer_idx: u64,
) !bool {
const signature_set = try randaoRevealSignatureSet(config, epoch_cache, randao_reveal, slot, proposer_idx);
return verifySingleSignatureSet(&signature_set);
}
pub fn randaoRevealSignatureSet(
config: *const BeaconConfig,
epoch_cache: *const EpochCache,
randao_reveal: *const [96]u8,
slot: Slot,
proposer_idx: u64,
) !SingleSignatureSet {
// should not get epoch from epoch_cache
const epoch = computeEpochAtSlot(slot);
const domain = try config.getDomain(epoch_cache.epoch, c.DOMAIN_RANDAO, slot);
var signing_root: Root = undefined;
try computeSigningRoot(types.primitive.Epoch, &epoch, domain, &signing_root);
return .{
.pubkey = epoch_cache.index_to_pubkey.items[proposer_idx],
.signing_root = signing_root,
.signature = randao_reveal.*,
};
}