Search by name, SuiNS, address, digest, object ID, coin type or checkpoint.

Move path
0xfdc8…ea77::bls_aggregate
Functions
160 public, 0 entry
Structs
3
bls_aggregate

Bytecode737 lines

The on-chain disassembly. Offsets are instruction numbers within each function.

// Move bytecode v7
module fdc88f7d7cf30afab2f82e8380d11ee8f70efb90e863d1de8616fae1bb09ea77.bls_aggregate {
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000001::u64;
use 0000000000000000000000000000000000000000000000000000000000000001::vector;
use 0000000000000000000000000000000000000000000000000000000000000002::bls12381;
use 0000000000000000000000000000000000000000000000000000000000000002::group_ops;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::vec_map;
use fdc88f7d7cf30afab2f82e8380d11ee8f70efb90e863d1de8616fae1bb09ea77::messages;
 
struct BlsCommitteeMember has copy, drop, store {
public_key: Element<UncompressedG1>,
weight: u16,
node_id: ID
}
 
struct BlsCommittee has copy, drop, store {
members: vector<BlsCommitteeMember>,
n_shards: u16,
epoch: u32,
total_aggregated_key: Element<G1>
}
 
enum RequiredWeight {
Quorum { },
OneCorrectNode { }
}
 
public(friend) new_bls_committee(Arg0: u32, Arg1: vector<BlsCommitteeMember>): BlsCommittee {
L2: loc0: u64
L3: loc1: u64
L4: loc2: Element<UncompressedG1>
L5: loc3: &mut vector<Element<UncompressedG1>>
L6: loc4: vector<Element<UncompressedG1>>
L7: loc5: Element<UncompressedG1>
L8: loc6: BlsCommitteeMember
L9: loc7: u64
L10: loc8: u64
L11: loc9: u64
L12: loc10: BlsCommitteeMember
L13: loc11: u16
L14: loc12: vector<Element<UncompressedG1>>
L15: loc13: u64
L16: loc14: u64
L17: loc15: Element<G1>
L18: loc16: &vector<BlsCommitteeMember>
L19: loc17: vector<BlsCommitteeMember>
L20: loc18: vector<BlsCommitteeMember>
L21: loc19: u16
B0:
0LdU16(0)
1StLoc[13](loc11: u16)
2ImmBorrowLoc[1](Arg1: vector<BlsCommitteeMember>)
3StLoc[18](loc16: &vector<BlsCommitteeMember>)
4CopyLoc[18](loc16: &vector<BlsCommitteeMember>)
5VecLen(3)
6StLoc[3](loc1: u64)
7LdU64(0)
8StLoc[10](loc8: u64)
9MoveLoc[3](loc1: u64)
10StLoc[16](loc14: u64)
B1:
11CopyLoc[10](loc8: u64)
12CopyLoc[16](loc14: u64)
13Lt
14BrFalse(41)
B2:
15CopyLoc[10](loc8: u64)
16StLoc[11](loc9: u64)
17CopyLoc[18](loc16: &vector<BlsCommitteeMember>)
18MoveLoc[11](loc9: u64)
19VecImmBorrow(3)
20ImmBorrowField[0](BlsCommitteeMember.weight: u16)
21ReadRef
22StLoc[21](loc19: u16)
23CopyLoc[21](loc19: u16)
24LdU16(0)
25Gt
26BrFalse(28)
B3:
27Branch(32)
B4:
28MoveLoc[18](loc16: &vector<BlsCommitteeMember>)
29Pop
30LdConst[3](u64: 3)
31Abort
B5:
32MoveLoc[13](loc11: u16)
33MoveLoc[21](loc19: u16)
34Add
35StLoc[13](loc11: u16)
36MoveLoc[10](loc8: u64)
37LdU64(1)
38Add
39StLoc[10](loc8: u64)
40Branch(11)
B6:
41MoveLoc[18](loc16: &vector<BlsCommitteeMember>)
42Pop
43CopyLoc[1](Arg1: vector<BlsCommitteeMember>)
44StLoc[19](loc17: vector<BlsCommitteeMember>)
45VecPack(20, 0)
46StLoc[14](loc12: vector<Element<UncompressedG1>>)
47MoveLoc[19](loc17: vector<BlsCommitteeMember>)
48StLoc[20](loc18: vector<BlsCommitteeMember>)
49MutBorrowLoc[20](loc18: vector<BlsCommitteeMember>)
50Call vector::reverse<BlsCommitteeMember>(&mut vector<BlsCommitteeMember>)
51ImmBorrowLoc[20](loc18: vector<BlsCommitteeMember>)
52VecLen(3)
53StLoc[2](loc0: u64)
54LdU64(0)
55StLoc[9](loc7: u64)
56MoveLoc[2](loc0: u64)
57StLoc[15](loc13: u64)
B7:
58CopyLoc[9](loc7: u64)
59CopyLoc[15](loc13: u64)
60Lt
61BrFalse(83)
B8:
62CopyLoc[9](loc7: u64)
63Pop
64MutBorrowLoc[20](loc18: vector<BlsCommitteeMember>)
65VecPopBack(3)
66StLoc[8](loc6: BlsCommitteeMember)
67MutBorrowLoc[14](loc12: vector<Element<UncompressedG1>>)
68StLoc[5](loc3: &mut vector<Element<UncompressedG1>>)
69MoveLoc[8](loc6: BlsCommitteeMember)
70StLoc[12](loc10: BlsCommitteeMember)
71ImmBorrowLoc[12](loc10: BlsCommitteeMember)
72ImmBorrowField[1](BlsCommitteeMember.public_key: Element<UncompressedG1>)
73ReadRef
74StLoc[4](loc2: Element<UncompressedG1>)
75MoveLoc[5](loc3: &mut vector<Element<UncompressedG1>>)
76MoveLoc[4](loc2: Element<UncompressedG1>)
77VecPushBack(20)
78MoveLoc[9](loc7: u64)
79LdU64(1)
80Add
81StLoc[9](loc7: u64)
82Branch(58)
B9:
83MoveLoc[20](loc18: vector<BlsCommitteeMember>)
84VecUnpack(3, 0)
85MoveLoc[14](loc12: vector<Element<UncompressedG1>>)
86StLoc[6](loc4: vector<Element<UncompressedG1>>)
87ImmBorrowLoc[6](loc4: vector<Element<UncompressedG1>>)
88Call bls12381::uncompressed_g1_sum(&vector<Element<UncompressedG1>>): Element<UncompressedG1>
89StLoc[7](loc5: Element<UncompressedG1>)
90ImmBorrowLoc[7](loc5: Element<UncompressedG1>)
91Call bls12381::uncompressed_g1_to_g1(&Element<UncompressedG1>): Element<G1>
92StLoc[17](loc15: Element<G1>)
93MoveLoc[1](Arg1: vector<BlsCommitteeMember>)
94MoveLoc[13](loc11: u16)
95MoveLoc[0](Arg0: u32)
96MoveLoc[17](loc15: Element<G1>)
97Pack[1](BlsCommittee)
98Ret
}
 
public(friend) new_bls_committee_member(Arg0: Element<UncompressedG1>, Arg1: u16, Arg2: ID): BlsCommitteeMember {
B0:
0MoveLoc[0](Arg0: Element<UncompressedG1>)
1MoveLoc[1](Arg1: u16)
2MoveLoc[2](Arg2: ID)
3Pack[0](BlsCommitteeMember)
4Ret
}
 
public(friend) node_id(Arg0: &BlsCommitteeMember): ID {
B0:
0MoveLoc[0](Arg0: &BlsCommitteeMember)
1ImmBorrowField[2](BlsCommitteeMember.node_id: ID)
2ReadRef
3Ret
}
 
public(friend) epoch(Arg0: &BlsCommittee): u32 {
B0:
0MoveLoc[0](Arg0: &BlsCommittee)
1ImmBorrowField[3](BlsCommittee.epoch: u32)
2ReadRef
3Ret
}
 
public(friend) n_shards(Arg0: &BlsCommittee): u16 {
B0:
0MoveLoc[0](Arg0: &BlsCommittee)
1ImmBorrowField[4](BlsCommittee.n_shards: u16)
2ReadRef
3Ret
}
 
public(friend) n_members(Arg0: &BlsCommittee): u64 {
B0:
0MoveLoc[0](Arg0: &BlsCommittee)
1ImmBorrowField[5](BlsCommittee.members: vector<BlsCommitteeMember>)
2VecLen(3)
3Ret
}
 
public(friend) get_idx(Arg0: &BlsCommittee, Arg1: u64): &BlsCommitteeMember {
B0:
0MoveLoc[0](Arg0: &BlsCommittee)
1ImmBorrowField[5](BlsCommittee.members: vector<BlsCommitteeMember>)
2MoveLoc[1](Arg1: u64)
3VecImmBorrow(3)
4Ret
}
 
public(friend) contains(Arg0: &BlsCommittee, Arg1: &ID): bool {
L2: loc0: Option<u64>
B0:
0MoveLoc[0](Arg0: &BlsCommittee)
1MoveLoc[1](Arg1: &ID)
2Call find_index(&BlsCommittee, &ID): Option<u64>
3StLoc[2](loc0: Option<u64>)
4ImmBorrowLoc[2](loc0: Option<u64>)
5Call option::is_some<u64>(&Option<u64>): bool
6Ret
}
 
public(friend) get_member_weight(Arg0: &BlsCommittee, Arg1: &ID): u16 {
L2: loc0: Option<u16>
L3: loc1: u16
L4: loc2: u64
L5: loc3: Option<u64>
L6: loc4: Option<u16>
B0:
0CopyLoc[0](Arg0: &BlsCommittee)
1MoveLoc[1](Arg1: &ID)
2Call find_index(&BlsCommittee, &ID): Option<u64>
3StLoc[5](loc3: Option<u64>)
4ImmBorrowLoc[5](loc3: Option<u64>)
5Call option::is_some<u64>(&Option<u64>): bool
6BrFalse(19)
B1:
7MoveLoc[5](loc3: Option<u64>)
8Call option::destroy_some<u64>(Option<u64>): u64
9StLoc[4](loc2: u64)
10MoveLoc[0](Arg0: &BlsCommittee)
11ImmBorrowField[5](BlsCommittee.members: vector<BlsCommitteeMember>)
12MoveLoc[4](loc2: u64)
13VecImmBorrow(3)
14ImmBorrowField[0](BlsCommitteeMember.weight: u16)
15ReadRef
16Call option::some<u16>(u16): Option<u16>
17StLoc[2](loc0: Option<u16>)
18Branch(25)
B2:
19MoveLoc[0](Arg0: &BlsCommittee)
20Pop
21MoveLoc[5](loc3: Option<u64>)
22Call option::destroy_none<u64>(Option<u64>)
23Call option::none<u16>(): Option<u16>
24StLoc[2](loc0: Option<u16>)
B3:
25MoveLoc[2](loc0: Option<u16>)
26StLoc[6](loc4: Option<u16>)
27ImmBorrowLoc[6](loc4: Option<u16>)
28Call option::is_some<u16>(&Option<u16>): bool
29BrFalse(34)
B4:
30MoveLoc[6](loc4: Option<u16>)
31Call option::destroy_some<u16>(Option<u16>): u16
32StLoc[3](loc1: u16)
33Branch(38)
B5:
34MoveLoc[6](loc4: Option<u16>)
35Call option::destroy_none<u16>(Option<u16>)
36LdU16(0)
37StLoc[3](loc1: u16)
B6:
38MoveLoc[3](loc1: u16)
39Ret
}
 
public(friend) find_index(Arg0: &BlsCommittee, Arg1: &ID): Option<u64> {
L2: loc0: u64
L3: loc1: Option<u64>
L4: loc2: u64
L5: loc3: u64
L6: loc4: u64
L7: loc5: &vector<BlsCommitteeMember>
B0:
0MoveLoc[0](Arg0: &BlsCommittee)
1ImmBorrowField[5](BlsCommittee.members: vector<BlsCommitteeMember>)
2StLoc[7](loc5: &vector<BlsCommitteeMember>)
3CopyLoc[7](loc5: &vector<BlsCommitteeMember>)
4VecLen(3)
5StLoc[2](loc0: u64)
6LdU64(0)
7StLoc[4](loc2: u64)
8MoveLoc[2](loc0: u64)
9StLoc[6](loc4: u64)
B1:
10CopyLoc[4](loc2: u64)
11CopyLoc[6](loc4: u64)
12Lt
13BrFalse(36)
B2:
14CopyLoc[4](loc2: u64)
15StLoc[5](loc3: u64)
16CopyLoc[7](loc5: &vector<BlsCommitteeMember>)
17CopyLoc[5](loc3: u64)
18VecImmBorrow(3)
19ImmBorrowField[2](BlsCommitteeMember.node_id: ID)
20CopyLoc[1](Arg1: &ID)
21Eq
22BrFalse(31)
B3:
23MoveLoc[7](loc5: &vector<BlsCommitteeMember>)
24Pop
25MoveLoc[1](Arg1: &ID)
26Pop
27MoveLoc[5](loc3: u64)
28Call option::some<u64>(u64): Option<u64>
29StLoc[3](loc1: Option<u64>)
30Branch(42)
B4:
31MoveLoc[4](loc2: u64)
32LdU64(1)
33Add
34StLoc[4](loc2: u64)
35Branch(10)
B5:
36MoveLoc[7](loc5: &vector<BlsCommitteeMember>)
37Pop
38MoveLoc[1](Arg1: &ID)
39Pop
40Call option::none<u64>(): Option<u64>
41StLoc[3](loc1: Option<u64>)
B6:
42MoveLoc[3](loc1: Option<u64>)
43Ret
}
 
public(friend) to_vec_map(Arg0: &BlsCommittee): VecMap<ID, u16> {
L1: loc0: u64
L2: loc1: u64
L3: loc2: u64
L4: loc3: &BlsCommitteeMember
L5: loc4: VecMap<ID, u16>
L6: loc5: u64
L7: loc6: &vector<BlsCommitteeMember>
B0:
0Call vec_map::empty<ID, u16>(): VecMap<ID, u16>
1StLoc[5](loc4: VecMap<ID, u16>)
2MoveLoc[0](Arg0: &BlsCommittee)
3ImmBorrowField[5](BlsCommittee.members: vector<BlsCommitteeMember>)
4StLoc[7](loc6: &vector<BlsCommitteeMember>)
5CopyLoc[7](loc6: &vector<BlsCommitteeMember>)
6VecLen(3)
7StLoc[1](loc0: u64)
8LdU64(0)
9StLoc[2](loc1: u64)
10MoveLoc[1](loc0: u64)
11StLoc[6](loc5: u64)
B1:
12CopyLoc[2](loc1: u64)
13CopyLoc[6](loc5: u64)
14Lt
15BrFalse(35)
B2:
16CopyLoc[2](loc1: u64)
17StLoc[3](loc2: u64)
18CopyLoc[7](loc6: &vector<BlsCommitteeMember>)
19MoveLoc[3](loc2: u64)
20VecImmBorrow(3)
21StLoc[4](loc3: &BlsCommitteeMember)
22MutBorrowLoc[5](loc4: VecMap<ID, u16>)
23CopyLoc[4](loc3: &BlsCommitteeMember)
24ImmBorrowField[2](BlsCommitteeMember.node_id: ID)
25ReadRef
26MoveLoc[4](loc3: &BlsCommitteeMember)
27ImmBorrowField[0](BlsCommitteeMember.weight: u16)
28ReadRef
29Call vec_map::insert<ID, u16>(&mut VecMap<ID, u16>, ID, u16)
30MoveLoc[2](loc1: u64)
31LdU64(1)
32Add
33StLoc[2](loc1: u64)
34Branch(12)
B3:
35MoveLoc[7](loc6: &vector<BlsCommitteeMember>)
36Pop
37MoveLoc[5](loc4: VecMap<ID, u16>)
38Ret
}
 
public(friend) verify_quorum_in_epoch(Arg0: &BlsCommittee, Arg1: vector<u8>, Arg2: vector<u8>, Arg3: vector<u8>): CertifiedMessage {
L4: loc0: u16
B0:
0CopyLoc[0](Arg0: &BlsCommittee)
1ImmBorrowLoc[1](Arg1: vector<u8>)
2ImmBorrowLoc[2](Arg2: vector<u8>)
3ImmBorrowLoc[3](Arg3: vector<u8>)
4PackVariant(VariantHandleIndex(0))
5Call verify_certificate_and_weight(&BlsCommittee, &vector<u8>, &vector<u8>, &vector<u8>, RequiredWeight): u16
6StLoc[4](loc0: u16)
7MoveLoc[3](Arg3: vector<u8>)
8MoveLoc[0](Arg0: &BlsCommittee)
9ImmBorrowField[3](BlsCommittee.epoch: u32)
10ReadRef
11MoveLoc[4](loc0: u16)
12Call messages::new_certified_message(vector<u8>, u32, u16): CertifiedMessage
13Ret
}
 
public(friend) is_quorum(Arg0: &BlsCommittee, Arg1: u16): bool {
B0:
0LdU64(3)
1MoveLoc[1](Arg1: u16)
2CastU64
3Mul
4LdU64(2)
5MoveLoc[0](Arg0: &BlsCommittee)
6ImmBorrowField[4](BlsCommittee.n_shards: u16)
7ReadRef
8CastU64
9Mul
10LdU64(1)
11Add
12Ge
13Ret
}
 
public(friend) verify_one_correct_node_in_epoch(Arg0: &BlsCommittee, Arg1: vector<u8>, Arg2: vector<u8>, Arg3: vector<u8>): CertifiedMessage {
L4: loc0: u16
B0:
0CopyLoc[0](Arg0: &BlsCommittee)
1ImmBorrowLoc[1](Arg1: vector<u8>)
2ImmBorrowLoc[2](Arg2: vector<u8>)
3ImmBorrowLoc[3](Arg3: vector<u8>)
4PackVariant(VariantHandleIndex(1))
5Call verify_certificate_and_weight(&BlsCommittee, &vector<u8>, &vector<u8>, &vector<u8>, RequiredWeight): u16
6StLoc[4](loc0: u16)
7MoveLoc[3](Arg3: vector<u8>)
8MoveLoc[0](Arg0: &BlsCommittee)
9ImmBorrowField[3](BlsCommittee.epoch: u32)
10ReadRef
11MoveLoc[4](loc0: u16)
12Call messages::new_certified_message(vector<u8>, u32, u16): CertifiedMessage
13Ret
}
 
public(friend) includes_one_correct_node(Arg0: &BlsCommittee, Arg1: u16): bool {
B0:
0LdU64(3)
1MoveLoc[1](Arg1: u16)
2CastU64
3Mul
4MoveLoc[0](Arg0: &BlsCommittee)
5ImmBorrowField[4](BlsCommittee.n_shards: u16)
6ReadRef
7CastU64
8LdU64(1)
9Add
10Ge
11Ret
}
 
verify_certificate_and_weight(Arg0: &BlsCommittee, Arg1: &vector<u8>, Arg2: &vector<u8>, Arg3: &vector<u8>, Arg4: RequiredWeight): u16 {
L5: loc0: u64
L6: loc1: u8
L7: loc2: Element<UncompressedG1>
L8: loc3: Element<G1>
L9: loc4: &Element<G1>
L10: loc5: &RequiredWeight
L11: loc6: RequiredWeight
L12: loc7: Element<G1>
L13: loc8: u16
L14: loc9: u8
L15: loc10: u8
L16: loc11: u64
L17: loc12: u64
L18: loc13: u8
L19: loc14: u64
L20: loc15: bool
L21: loc16: u64
L22: loc17: BlsCommitteeMember
L23: loc18: u64
L24: loc19: u16
L25: loc20: vector<Element<UncompressedG1>>
L26: loc21: u64
L27: loc22: &vector<u8>
L28: loc23: u64
B0:
0LdU16(0)
1StLoc[24](loc19: u16)
2VecPack(20, 0)
3StLoc[25](loc20: vector<Element<UncompressedG1>>)
4LdU64(0)
5StLoc[26](loc21: u64)
6CopyLoc[0](Arg0: &BlsCommittee)
7Call n_members(&BlsCommittee): u64
8StLoc[23](loc18: u64)
9CopyLoc[23](loc18: u64)
10LdU64(8)
11Call u64::div_ceil(u64, u64): u64
12StLoc[21](loc16: u64)
13CopyLoc[2](Arg2: &vector<u8>)
14VecLen(38)
15CopyLoc[21](loc16: u64)
16Le
17BrFalse(19)
B1:
18Branch(29)
B2:
19MoveLoc[2](Arg2: &vector<u8>)
20Pop
21MoveLoc[1](Arg1: &vector<u8>)
22Pop
23MoveLoc[0](Arg0: &BlsCommittee)
24Pop
25MoveLoc[3](Arg3: &vector<u8>)
26Pop
27LdConst[0](u64: 0)
28Abort
B3:
29MoveLoc[21](loc16: u64)
30StLoc[5](loc0: u64)
31LdU64(0)
32StLoc[16](loc11: u64)
33MoveLoc[5](loc0: u64)
34StLoc[28](loc23: u64)
B4:
35CopyLoc[16](loc11: u64)
36CopyLoc[28](loc23: u64)
37Lt
38BrFalse(130)
B5:
39CopyLoc[16](loc11: u64)
40StLoc[17](loc12: u64)
41CopyLoc[17](loc12: u64)
42CopyLoc[2](Arg2: &vector<u8>)
43VecLen(38)
44Lt
45BrFalse(52)
B6:
46CopyLoc[2](Arg2: &vector<u8>)
47MoveLoc[17](loc12: u64)
48VecImmBorrow(38)
49ReadRef
50StLoc[6](loc1: u8)
51Branch(54)
B7:
52LdU8(0)
53StLoc[6](loc1: u8)
B8:
54MoveLoc[6](loc1: u8)
55StLoc[14](loc9: u8)
56LdU8(0)
57StLoc[15](loc10: u8)
58Branch(59)
B9:
59CopyLoc[15](loc10: u8)
60LdU8(8)
61Lt
62BrFalse(121)
B10:
63CopyLoc[15](loc10: u8)
64StLoc[18](loc13: u8)
65CopyLoc[26](loc21: u64)
66CopyLoc[18](loc13: u8)
67CastU64
68Add
69StLoc[19](loc14: u64)
70CopyLoc[14](loc9: u8)
71MoveLoc[18](loc13: u8)
72Shr
73LdU8(1)
74BitAnd
75LdU8(1)
76Eq
77StLoc[20](loc15: bool)
78CopyLoc[19](loc14: u64)
79CopyLoc[23](loc18: u64)
80Ge
81BrFalse(96)
B11:
82MoveLoc[20](loc15: bool)
83Not
84BrFalse(86)
B12:
85Branch(116)
B13:
86MoveLoc[2](Arg2: &vector<u8>)
87Pop
88MoveLoc[1](Arg1: &vector<u8>)
89Pop
90MoveLoc[0](Arg0: &BlsCommittee)
91Pop
92MoveLoc[3](Arg3: &vector<u8>)
93Pop
94LdConst[0](u64: 0)
95Abort
B14:
96MoveLoc[20](loc15: bool)
97Not
98BrFalse(116)
B15:
99CopyLoc[0](Arg0: &BlsCommittee)
100ImmBorrowField[5](BlsCommittee.members: vector<BlsCommitteeMember>)
101MoveLoc[19](loc14: u64)
102VecImmBorrow(3)
103ReadRef
104StLoc[22](loc17: BlsCommitteeMember)
105MoveLoc[24](loc19: u16)
106ImmBorrowLoc[22](loc17: BlsCommitteeMember)
107ImmBorrowField[0](BlsCommitteeMember.weight: u16)
108ReadRef
109Add
110StLoc[24](loc19: u16)
111MutBorrowLoc[25](loc20: vector<Element<UncompressedG1>>)
112ImmBorrowLoc[22](loc17: BlsCommitteeMember)
113ImmBorrowField[1](BlsCommitteeMember.public_key: Element<UncompressedG1>)
114ReadRef
115VecPushBack(20)
B16:
116MoveLoc[15](loc10: u8)
117LdU8(1)
118Add
119StLoc[15](loc10: u8)
120Branch(59)
B17:
121MoveLoc[26](loc21: u64)
122LdU64(8)
123Add
124StLoc[26](loc21: u64)
125MoveLoc[16](loc11: u64)
126LdU64(1)
127Add
128StLoc[16](loc11: u64)
129Branch(35)
B18:
130MoveLoc[2](Arg2: &vector<u8>)
131Pop
132CopyLoc[0](Arg0: &BlsCommittee)
133ImmBorrowField[4](BlsCommittee.n_shards: u16)
134ReadRef
135MoveLoc[24](loc19: u16)
136Sub
137StLoc[13](loc8: u16)
138MoveLoc[4](Arg4: RequiredWeight)
139StLoc[11](loc6: RequiredWeight)
140ImmBorrowLoc[11](loc6: RequiredWeight)
141StLoc[10](loc5: &RequiredWeight)
142CopyLoc[10](loc5: &RequiredWeight)
143VariantSwitch(VariantJumpTableIndex(0))
B19:
144MoveLoc[10](loc5: &RequiredWeight)
145UnpackVariantImmRef(VariantHandleIndex(0))
146MoveLoc[11](loc6: RequiredWeight)
147UnpackVariant(VariantHandleIndex(0))
148CopyLoc[0](Arg0: &BlsCommittee)
149CopyLoc[13](loc8: u16)
150Call is_quorum(&BlsCommittee, u16): bool
151BrFalse(153)
B20:
152Branch(178)
B21:
153MoveLoc[1](Arg1: &vector<u8>)
154Pop
155MoveLoc[0](Arg0: &BlsCommittee)
156Pop
157MoveLoc[3](Arg3: &vector<u8>)
158Pop
159LdConst[2](u64: 2)
160Abort
B22:
161MoveLoc[10](loc5: &RequiredWeight)
162UnpackVariantImmRef(VariantHandleIndex(1))
163MoveLoc[11](loc6: RequiredWeight)
164UnpackVariant(VariantHandleIndex(1))
165CopyLoc[0](Arg0: &BlsCommittee)
166CopyLoc[13](loc8: u16)
167Call includes_one_correct_node(&BlsCommittee, u16): bool
168BrFalse(170)
B23:
169Branch(178)
B24:
170MoveLoc[1](Arg1: &vector<u8>)
171Pop
172MoveLoc[0](Arg0: &BlsCommittee)
173Pop
174MoveLoc[3](Arg3: &vector<u8>)
175Pop
176LdConst[2](u64: 2)
177Abort
B25:
178MoveLoc[0](Arg0: &BlsCommittee)
179ImmBorrowField[6](BlsCommittee.total_aggregated_key: Element<G1>)
180StLoc[9](loc4: &Element<G1>)
181ImmBorrowLoc[25](loc20: vector<Element<UncompressedG1>>)
182Call bls12381::uncompressed_g1_sum(&vector<Element<UncompressedG1>>): Element<UncompressedG1>
183StLoc[7](loc2: Element<UncompressedG1>)
184ImmBorrowLoc[7](loc2: Element<UncompressedG1>)
185Call bls12381::uncompressed_g1_to_g1(&Element<UncompressedG1>): Element<G1>
186StLoc[8](loc3: Element<G1>)
187MoveLoc[9](loc4: &Element<G1>)
188ImmBorrowLoc[8](loc3: Element<G1>)
189Call bls12381::g1_sub(&Element<G1>, &Element<G1>): Element<G1>
190StLoc[12](loc7: Element<G1>)
191ImmBorrowLoc[12](loc7: Element<G1>)
192Call group_ops::bytes<G1>(&Element<G1>): &vector<u8>
193StLoc[27](loc22: &vector<u8>)
194MoveLoc[1](Arg1: &vector<u8>)
195MoveLoc[27](loc22: &vector<u8>)
196MoveLoc[3](Arg3: &vector<u8>)
197Call bls12381::bls12381_min_pk_verify(&vector<u8>, &vector<u8>, &vector<u8>): bool
198BrFalse(200)
B26:
199Branch(202)
B27:
200LdConst[1](u64: 1)
201Abort
B28:
202MoveLoc[13](loc8: u16)
203CastU16
204Ret
Jump tables:
[0]: variant_switch RequiredWeight {
Variant0 => jump 144
Variant1 => jump 161
}
}
 
Constants [
0 => u64: 0
1 => u64: 1
2 => u64: 2
3 => u64: 3
]
}