agglayer_types/aggchain_data/
multisig.rs1use agglayer_primitives::{Address, Signature, B256};
2use pessimistic_proof::core;
3
4use crate::aggchain_data::PayloadWithCtx;
5
6#[derive(Clone, Debug)]
8pub struct Payload {
9 pub(crate) signatures: Vec<Option<Signature>>,
10}
11
12impl From<Vec<Option<Signature>>> for Payload {
13 fn from(signatures: Vec<Option<Signature>>) -> Self {
14 Self { signatures }
15 }
16}
17
18impl From<&[Option<Signature>]> for Payload {
19 fn from(signatures: &[Option<Signature>]) -> Self {
20 Self {
21 signatures: signatures.to_vec(),
22 }
23 }
24}
25
26impl From<agglayer_interop_types::aggchain_proof::MultisigPayload> for Payload {
27 fn from(value: agglayer_interop_types::aggchain_proof::MultisigPayload) -> Self {
28 Self {
29 signatures: value.0,
30 }
31 }
32}
33
34impl From<&agglayer_interop_types::aggchain_proof::MultisigPayload> for Payload {
35 fn from(value: &agglayer_interop_types::aggchain_proof::MultisigPayload) -> Self {
36 Self {
37 signatures: value.0.clone(),
38 }
39 }
40}
41
42#[derive(Clone, Debug)]
44pub struct Ctx {
45 pub signers: Vec<Address>,
47 pub threshold: usize,
49 pub prehash: B256,
51}
52
53impl From<PayloadWithCtx<Payload, Ctx>> for core::MultiSignature {
55 fn from(d: PayloadWithCtx<Payload, Ctx>) -> core::MultiSignature {
56 let PayloadWithCtx(Payload { signatures }, multisig) = d;
57
58 core::MultiSignature {
59 signatures,
60 expected_signers: multisig.signers,
61 threshold: multisig.threshold,
62 }
63 }
64}