@@ -4,22 +4,41 @@ use crate::{
44} ;
55
66use async_trait:: async_trait;
7- use starknet_core:: types:: { BlockId , BlockTag , Felt } ;
7+ use starknet_core:: {
8+ codec:: Encode ,
9+ types:: { BlockId , BlockTag , Felt } ,
10+ } ;
811use starknet_providers:: Provider ;
912use starknet_signers:: { Signer , SignerInteractivityContext } ;
1013
11- /// [`AccountFactory`] implementation for deploying `Argent X` account contracts.
14+ /// [`AccountFactory`] implementation for deploying `Argent X` account contracts (v0.4.0) .
1215#[ derive( Debug ) ]
1316pub struct ArgentAccountFactory < S , P > {
1417 class_hash : Felt ,
1518 chain_id : Felt ,
1619 owner_public_key : Felt ,
17- guardian_public_key : Felt ,
20+ guardian_public_key : Option < Felt > ,
1821 signer : S ,
1922 provider : P ,
2023 block_id : BlockId ,
2124}
2225
26+ /// Constructor parameters for Argent account v0.4.0.
27+ #[ derive( Encode ) ]
28+ #[ starknet( core = "starknet_core" ) ]
29+ struct ArgentAccountConstructorParams {
30+ owner : ArgentSigner ,
31+ guardian : Option < ArgentSigner > ,
32+ }
33+
34+ /// A simplified version of `argent::signer::signer_signature::Signer` that only supports the simple
35+ /// Starknet signer.
36+ #[ derive( Encode ) ]
37+ #[ starknet( core = "starknet_core" ) ]
38+ enum ArgentSigner {
39+ Starknet ( Felt ) ,
40+ }
41+
2342impl < S , P > ArgentAccountFactory < S , P >
2443where
2544 S : Signer ,
2847 pub async fn new (
2948 class_hash : Felt ,
3049 chain_id : Felt ,
31- guardian_public_key : Felt ,
50+ guardian_public_key : Option < Felt > ,
3251 signer : S ,
3352 provider : P ,
3453 ) -> Result < Self , S :: GetPublicKeyError > {
6685 }
6786
6887 fn calldata ( & self ) -> Vec < Felt > {
69- vec ! [ self . owner_public_key, self . guardian_public_key]
88+ let mut calldata = vec ! [ ] ;
89+
90+ // Encoding this sturct never fails
91+ ArgentAccountConstructorParams {
92+ owner : ArgentSigner :: Starknet ( self . owner_public_key ) ,
93+ guardian : self . guardian_public_key . map ( ArgentSigner :: Starknet ) ,
94+ }
95+ . encode ( & mut calldata)
96+ . unwrap ( ) ;
97+
98+ calldata
7099 }
71100
72101 fn chain_id ( & self ) -> Felt {
0 commit comments