Skip to content

Commit 68b7b69

Browse files
authored
Improve predeclaration/predeployment startup log (#734)
* Abstract public+private key as KeyPair: reduce number of fn args
1 parent 0e49d71 commit 68b7b69

File tree

11 files changed

+93
-48
lines changed

11 files changed

+93
-48
lines changed

crates/starknet-devnet-core/src/account.rs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,18 @@ pub enum FeeToken {
3333
}
3434

3535
#[derive(Clone)]
36-
pub struct Account {
36+
pub struct KeyPair {
3737
pub public_key: Key,
3838
pub private_key: Key,
39+
}
40+
41+
#[derive(Clone)]
42+
pub struct Account {
43+
pub keys: KeyPair,
3944
pub account_address: ContractAddress,
4045
pub initial_balance: Balance,
4146
pub class_hash: ClassHash,
47+
pub class_metadata: &'static str,
4248
pub(crate) contract_class: ContractClass,
4349
pub(crate) eth_fee_token_address: ContractAddress,
4450
pub(crate) strk_fee_token_address: ContractAddress,
@@ -49,20 +55,23 @@ impl Account {
4955
eth_fee_token_address: ContractAddress,
5056
strk_fee_token_address: ContractAddress,
5157
) -> DevnetResult<Self> {
52-
let AccountClassWrapper { contract_class, class_hash } =
58+
let AccountClassWrapper { contract_class, class_hash, class_metadata } =
5359
AccountContractClassChoice::Cairo1.get_class_wrapper()?;
5460

5561
// very big number
5662
let initial_balance = BigUint::from(u128::MAX) << 10;
5763

5864
Ok(Self {
59-
public_key: Key::from_hex(CHARGEABLE_ACCOUNT_PUBLIC_KEY)?,
60-
private_key: Key::from_hex(CHARGEABLE_ACCOUNT_PRIVATE_KEY)?,
65+
keys: KeyPair {
66+
public_key: Key::from_hex(CHARGEABLE_ACCOUNT_PUBLIC_KEY)?,
67+
private_key: Key::from_hex(CHARGEABLE_ACCOUNT_PRIVATE_KEY)?,
68+
},
6169
account_address: ContractAddress::new(felt_from_prefixed_hex(
6270
CHARGEABLE_ACCOUNT_ADDRESS,
6371
)?)?,
6472
initial_balance,
6573
class_hash,
74+
class_metadata,
6675
contract_class,
6776
eth_fee_token_address,
6877
strk_fee_token_address,
@@ -71,20 +80,21 @@ impl Account {
7180

7281
pub(crate) fn new(
7382
initial_balance: Balance,
74-
public_key: Key,
75-
private_key: Key,
83+
keys: KeyPair,
7684
class_hash: ClassHash,
85+
class_metadata: &'static str,
7786
contract_class: ContractClass,
7887
eth_fee_token_address: ContractAddress,
7988
strk_fee_token_address: ContractAddress,
8089
) -> DevnetResult<Self> {
90+
let account_address = Account::compute_account_address(&keys.public_key)?;
8191
Ok(Self {
8292
initial_balance,
83-
public_key,
84-
private_key,
93+
keys,
8594
class_hash,
95+
class_metadata,
8696
contract_class,
87-
account_address: Account::compute_account_address(&public_key)?,
97+
account_address,
8898
eth_fee_token_address,
8999
strk_fee_token_address,
90100
})
@@ -123,7 +133,7 @@ impl Account {
123133
state.state.state.set_storage_at(
124134
core_address,
125135
public_key_storage_var.try_into()?,
126-
self.public_key,
136+
self.keys.public_key,
127137
)?;
128138

129139
Ok(())
@@ -218,7 +228,7 @@ mod tests {
218228
use starknet_types::felt::felt_from_prefixed_hex;
219229
use starknet_types::rpc::state::Balance;
220230

221-
use super::Account;
231+
use super::{Account, KeyPair};
222232
use crate::account::FeeToken;
223233
use crate::constants::CAIRO_1_ERC20_CONTRACT_CLASS_HASH;
224234
use crate::state::{CustomState, StarknetState};
@@ -314,9 +324,9 @@ mod tests {
314324
(
315325
Account::new(
316326
Balance::from(10_u8),
317-
Felt::from(13431515),
318-
Felt::from(11),
327+
KeyPair { public_key: Felt::from(13431515), private_key: Felt::from(11) },
319328
dummy_felt(),
329+
"Dummy account",
320330
dummy_cairo_1_contract_class().into(),
321331
fee_token_address,
322332
fee_token_address,

crates/starknet-devnet-core/src/constants.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ pub const CAIRO_0_ACCOUNT_CONTRACT: &str = include_str!(concat!(
99
env!("CARGO_MANIFEST_DIR"),
1010
"/contracts/accounts_artifacts/OpenZeppelin/0.5.1/Account.cairo/Account.json"
1111
));
12-
1312
pub const CAIRO_0_ACCOUNT_CONTRACT_HASH: &str =
1413
"0x4d07e40e93398ed3c76981e72dd1fd22557a78ce36c0515f679e27f0bb5bc5f";
1514

@@ -18,12 +17,10 @@ pub const CAIRO_1_ACCOUNT_CONTRACT_SIERRA_PATH: &str = concat!(
1817
env!("CARGO_MANIFEST_DIR"),
1918
"/contracts/accounts_artifacts/OpenZeppelin/0.20.0/Account.cairo/Account.sierra"
2019
);
21-
2220
pub const CAIRO_1_ACCOUNT_CONTRACT_SIERRA: &str = include_str!(concat!(
2321
env!("CARGO_MANIFEST_DIR"),
2422
"/contracts/accounts_artifacts/OpenZeppelin/0.20.0/Account.cairo/Account.sierra"
2523
));
26-
2724
pub const CAIRO_1_ACCOUNT_CONTRACT_SIERRA_HASH: &str =
2825
"0x02b31e19e45c06f29234e06e2ee98a9966479ba3067f8785ed972794fdb0065c";
2926

crates/starknet-devnet-core/src/contract_class_choice.rs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,27 @@ impl AccountContractClassChoice {
2525
AccountClassWrapper {
2626
class_hash: contract_class.generate_hash()?,
2727
contract_class: ContractClass::Cairo0(contract_class),
28+
class_metadata: "OpenZeppelin 0.5.1",
2829
}
2930
}
3031
AccountContractClassChoice::Cairo1 => {
3132
let contract_class = ContractClass::Cairo1(
3233
ContractClass::cairo_1_from_sierra_json_str(CAIRO_1_ACCOUNT_CONTRACT_SIERRA)?,
3334
);
34-
AccountClassWrapper { class_hash: contract_class.generate_hash()?, contract_class }
35+
AccountClassWrapper {
36+
class_hash: contract_class.generate_hash()?,
37+
contract_class,
38+
class_metadata: "OpenZeppelin 0.20.0",
39+
}
3540
}
3641
})
3742
}
3843
}
39-
4044
#[derive(Clone, Debug)]
4145
pub struct AccountClassWrapper {
4246
pub contract_class: ContractClass,
4347
pub class_hash: Felt,
48+
pub class_metadata: &'static str,
4449
}
4550

4651
impl FromStr for AccountClassWrapper {
@@ -76,27 +81,33 @@ impl FromStr for AccountClassWrapper {
7681
// generate the hash and return
7782
let contract_class = ContractClass::Cairo1(contract_class);
7883
let class_hash = contract_class.generate_hash()?;
79-
Ok(Self { contract_class, class_hash })
84+
Ok(Self { contract_class, class_hash, class_metadata: "Custom" })
8085
}
8186
}
8287

8388
#[cfg(test)]
8489
mod tests {
90+
use std::str::FromStr;
91+
8592
use clap::ValueEnum;
8693
use starknet_types::felt::felt_from_prefixed_hex;
8794
use starknet_types::traits::HashProducer;
8895

8996
use super::AccountContractClassChoice;
90-
use crate::constants::{CAIRO_0_ACCOUNT_CONTRACT_HASH, CAIRO_1_ACCOUNT_CONTRACT_SIERRA_HASH};
97+
use crate::constants::{
98+
CAIRO_0_ACCOUNT_CONTRACT_HASH, CAIRO_1_ACCOUNT_CONTRACT_SIERRA_HASH,
99+
CAIRO_1_ACCOUNT_CONTRACT_SIERRA_PATH,
100+
};
91101
use crate::contract_class_choice::AccountClassWrapper;
92102

93103
#[test]
94104
fn all_methods_work_with_all_options() {
95105
for implementation in AccountContractClassChoice::value_variants().iter() {
96-
let AccountClassWrapper { contract_class, class_hash } =
106+
let AccountClassWrapper { contract_class, class_hash, class_metadata } =
97107
implementation.get_class_wrapper().unwrap();
98108
let generated_hash = contract_class.generate_hash().unwrap();
99109
assert_eq!(generated_hash, class_hash);
110+
assert!(class_metadata.starts_with("OpenZeppelin"));
100111
}
101112
}
102113

@@ -112,4 +123,20 @@ mod tests {
112123
felt_from_prefixed_hex(CAIRO_1_ACCOUNT_CONTRACT_SIERRA_HASH).unwrap()
113124
)
114125
}
126+
127+
#[test]
128+
fn correct_metadata() {
129+
assert_eq!(
130+
AccountContractClassChoice::Cairo0.get_class_wrapper().unwrap().class_metadata,
131+
"OpenZeppelin 0.5.1"
132+
);
133+
assert_eq!(
134+
AccountContractClassChoice::Cairo1.get_class_wrapper().unwrap().class_metadata,
135+
"OpenZeppelin 0.20.0"
136+
);
137+
138+
let custom_class =
139+
AccountClassWrapper::from_str(CAIRO_1_ACCOUNT_CONTRACT_SIERRA_PATH).unwrap();
140+
assert_eq!(custom_class.class_metadata, "Custom");
141+
}
115142
}

crates/starknet-devnet-core/src/predeployed_accounts.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use starknet_types::contract_class::ContractClass;
44
use starknet_types::felt::{ClassHash, Key};
55
use starknet_types::rpc::state::Balance;
66

7-
use crate::account::Account;
7+
use crate::account::{Account, KeyPair};
88
use crate::error::DevnetResult;
99
use crate::traits::AccountGenerator;
1010
use crate::utils::random_number_generator::generate_u128_random_numbers;
@@ -64,9 +64,9 @@ impl AccountGenerator for PredeployedAccounts {
6464
for private_key in private_keys {
6565
let account = Account::new(
6666
self.initial_balance.clone(),
67-
self.generate_public_key(&private_key),
68-
private_key,
67+
KeyPair { public_key: self.generate_public_key(&private_key), private_key },
6968
class_hash,
69+
"Custom",
7070
contract_class.clone(),
7171
self.eth_fee_token_address,
7272
self.strk_fee_token_address,

crates/starknet-devnet-core/src/starknet/add_invoke_transaction.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ mod tests {
9999
use crate::utils::exported_test_utils::dummy_cairo_0_contract_class;
100100
use crate::utils::get_storage_var_address;
101101
use crate::utils::test_utils::{
102-
cairo_0_account_without_validations, dummy_contract_address, dummy_felt,
102+
cairo_0_account_without_validations, dummy_contract_address, dummy_felt, dummy_key_pair,
103103
};
104104

105105
fn test_invoke_transaction_v1(
@@ -493,9 +493,9 @@ mod tests {
493493

494494
let account = Account::new(
495495
Balance::from(1000000000_u32),
496-
dummy_felt(),
497-
dummy_felt(),
496+
dummy_key_pair(),
498497
account_without_validations_class_hash,
498+
"Custom",
499499
ContractClass::Cairo0(account_without_validations_contract_class),
500500
eth_erc_20_contract.get_address(),
501501
strk_erc_20_contract.get_address(),

crates/starknet-devnet-core/src/starknet/add_l1_handler_transaction.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ mod tests {
6666
use crate::state::CustomState;
6767
use crate::traits::{Deployed, HashIdentifiedMut};
6868
use crate::utils::exported_test_utils::dummy_cairo_l1l2_contract;
69-
use crate::utils::test_utils::{cairo_0_account_without_validations, dummy_felt};
69+
use crate::utils::test_utils::{cairo_0_account_without_validations, dummy_key_pair};
7070

7171
#[test]
7272
fn l1_handler_transaction_hash_computation() {
@@ -210,9 +210,9 @@ mod tests {
210210

211211
let account = Account::new(
212212
Balance::from(10000_u32),
213-
dummy_felt(),
214-
dummy_felt(),
213+
dummy_key_pair(),
215214
account_without_validations_class_hash,
215+
"Custom",
216216
ContractClass::Cairo0(account_without_validations_contract_class),
217217
eth_erc_20_contract.get_address(),
218218
strk_erc_20_contract.get_address(),

crates/starknet-devnet-core/src/starknet/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,7 +1543,7 @@ mod tests {
15431543
use crate::traits::{Accounted, Deployed, HashIdentified};
15441544
use crate::utils::test_utils::{
15451545
cairo_0_account_without_validations, dummy_contract_address, dummy_declare_transaction_v3,
1546-
dummy_felt,
1546+
dummy_felt, dummy_key_pair,
15471547
};
15481548

15491549
/// Initializes starknet with 1 account that doesn't perform actual tx signature validation.
@@ -1567,9 +1567,9 @@ mod tests {
15671567
let account_class = cairo_0_account_without_validations();
15681568
let acc = Account::new(
15691569
Balance::from(acc_balance),
1570-
dummy_felt(),
1571-
dummy_felt(),
1570+
dummy_key_pair(),
15721571
account_class.generate_hash().unwrap(),
1572+
"Custom",
15731573
account_class.into(),
15741574
starknet.block_context.chain_info().fee_token_addresses.eth_fee_token_address.into(),
15751575
starknet.block_context.chain_info().fee_token_addresses.strk_fee_token_address.into(),

crates/starknet-devnet-core/src/state/state_diff.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ mod tests {
203203
use crate::traits::Deployed;
204204
use crate::utils::test_utils::{
205205
DUMMY_CAIRO_1_COMPILED_CLASS_HASH, cairo_0_account_without_validations,
206-
dummy_cairo_1_contract_class, dummy_contract_address, dummy_felt,
206+
dummy_cairo_1_contract_class, dummy_contract_address, dummy_felt, dummy_key_pair,
207207
};
208208

209209
#[test]
@@ -283,9 +283,9 @@ mod tests {
283283

284284
let account = Account::new(
285285
Balance::from(u128::MAX),
286-
dummy_felt(),
287-
dummy_felt(),
286+
dummy_key_pair(),
288287
account_without_validations_class_hash,
288+
"Custom",
289289
ContractClass::Cairo0(account_without_validations_contract_class),
290290
ContractAddress::new(ETH_ERC20_CONTRACT_ADDRESS).unwrap(),
291291
ContractAddress::new(STRK_ERC20_CONTRACT_ADDRESS).unwrap(),

crates/starknet-devnet-core/src/utils.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ pub(crate) mod test_utils {
9494
};
9595
use starknet_types::traits::HashProducer;
9696

97+
use crate::account::KeyPair;
9798
use crate::constants::DEVNET_DEFAULT_CHAIN_ID;
9899

99100
pub(crate) fn dummy_felt() -> Felt {
@@ -217,6 +218,10 @@ pub(crate) mod test_utils {
217218
account_deployment_data: vec![],
218219
}
219220
}
221+
222+
pub fn dummy_key_pair() -> KeyPair {
223+
KeyPair { public_key: dummy_felt(), private_key: dummy_felt() }
224+
}
220225
}
221226

222227
#[cfg(any(test, feature = "test_utils"))]

crates/starknet-devnet-server/src/api/http/endpoints/accounts.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ pub(crate) async fn get_predeployed_accounts_impl(
5151
.map(|acc| SerializableAccount {
5252
initial_balance: acc.initial_balance.to_string(),
5353
address: acc.account_address,
54-
public_key: acc.public_key,
55-
private_key: acc.private_key,
54+
public_key: acc.keys.public_key,
55+
private_key: acc.keys.private_key,
5656
balance: None,
5757
})
5858
.collect();

0 commit comments

Comments
 (0)