Skip to content

Commit e757ccf

Browse files
committed
wip
1 parent 91bd0ca commit e757ccf

File tree

7 files changed

+34
-232
lines changed

7 files changed

+34
-232
lines changed

Cargo.lock

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/cartridge/src/vrf/bootstrap.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,17 @@ pub struct VrfDerivedAccounts {
8888
/// This computes the deterministic VRF account address and VRF key pair
8989
/// from the source account's private key.
9090
pub fn derive_vrf_accounts(
91-
source_address: ContractAddress,
92-
source_private_key: Felt,
91+
bootstrapper_address: ContractAddress,
92+
bootstrapper_private_key: Felt,
9393
) -> Result<VrfDerivedAccounts> {
9494
// vrf-server expects a u64 secret, so derive one from the account key.
95-
let secret_key = vrf_secret_key_from_account_key(source_private_key);
95+
let secret_key = vrf_secret_key_from_account_key(bootstrapper_private_key);
9696
let public_key = generate_public_key(scalar_from_felt(secret_key.into()));
9797
let vrf_public_key_x = felt_from_field(public_key.x)?;
9898
let vrf_public_key_y = felt_from_field(public_key.y)?;
9999

100100
let account_public_key =
101-
SigningKey::from_secret_scalar(source_private_key).verifying_key().scalar();
101+
SigningKey::from_secret_scalar(bootstrapper_private_key).verifying_key().scalar();
102102
let vrf_account_class_hash = katana_contracts::vrf::CartridgeVrfAccount::HASH;
103103
// When using UDC with unique=0 (non-unique deployment), the deployer_address
104104
// used in address computation is 0, not the actual deployer or UDC address.
@@ -111,8 +111,8 @@ pub fn derive_vrf_accounts(
111111
.into();
112112

113113
Ok(VrfDerivedAccounts {
114-
source_address,
115-
source_private_key,
114+
source_address: bootstrapper_address,
115+
source_private_key: bootstrapper_private_key,
116116
vrf_account_address,
117117
vrf_public_key_x,
118118
vrf_public_key_y,

crates/cli/src/args.rs

Lines changed: 27 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ use url::Url;
3838

3939
use crate::file::NodeArgsConfig;
4040
use crate::options::*;
41-
#[cfg(feature = "vrf")]
42-
use crate::sidecar::build_vrf_config;
4341
use crate::utils::{self, parse_chain_config_dir, parse_seed};
4442

4543
pub(crate) const LOG_TARGET: &str = "katana::cli";
@@ -554,7 +552,7 @@ impl SequencerNodeArgs {
554552
#[cfg(feature = "cartridge")]
555553
if self.paymaster.cartridge_paymaster {
556554
#[cfg(feature = "vrf")]
557-
let vrf = self.vrf_config()?;
555+
let vrf = self.vrf_config(chain_spec)?;
558556

559557
use anyhow::anyhow;
560558
use katana_genesis::allocation::GenesisAccountAlloc;
@@ -589,8 +587,32 @@ impl SequencerNodeArgs {
589587
}
590588

591589
#[cfg(feature = "vrf")]
592-
fn vrf_config(&self) -> Result<Option<VrfConfig>> {
593-
build_vrf_config(&self.paymaster.vrf)
590+
fn vrf_config(&self, chain: &ChainSpec) -> Result<Option<VrfConfig>> {
591+
let options = &self.paymaster.vrf;
592+
593+
if !options.enabled {
594+
return Ok(None);
595+
}
596+
597+
if options.is_external() {
598+
let url = options.url.clone().expect("must be set if external");
599+
let vrf_account = options.vrf_account_contract.expect("must be set if external");
600+
601+
Ok(Some(VrfConfig { url, vrf_account }))
602+
} else {
603+
use cartridge::derive_vrf_accounts;
604+
605+
use crate::sidecar::prefunded_account;
606+
607+
let listener = std::net::TcpListener::bind("127.0.0.1:0")?;
608+
let addr = listener.local_addr()?;
609+
let url = Url::parse(&format!("http://{addr}"))?;
610+
611+
let (account_address, pk) = prefunded_account(chain, 0)?;
612+
let derived_result = derive_vrf_accounts(account_address, pk)?;
613+
614+
Ok(Some(VrfConfig { url, vrf_account: derived_result.vrf_account_address }))
615+
}
594616
}
595617

596618
#[cfg(feature = "tee")]
@@ -1069,58 +1091,4 @@ explorer = true
10691091
assert!(config.chain.genesis().classes.get(&ControllerV109::HASH).is_none());
10701092
assert!(config.chain.genesis().classes.get(&ControllerLatest::HASH).is_none());
10711093
}
1072-
1073-
#[cfg(feature = "cartridge")]
1074-
#[test]
1075-
fn vrf_mode_adds_classes() {
1076-
use katana_primitives::utils::class::parse_sierra_class;
1077-
1078-
let args = SequencerNodeArgs::parse_from(["katana", "--paymaster", "--vrf"]);
1079-
let result = args.config().unwrap();
1080-
let config = &result;
1081-
1082-
let vrf_account_class = parse_sierra_class(include_str!(concat!(
1083-
env!("CARGO_MANIFEST_DIR"),
1084-
"/../controller/classes/cartridge_vrf_VrfAccount.contract_class.json"
1085-
)))
1086-
.unwrap();
1087-
let vrf_account_hash = vrf_account_class.class_hash().unwrap();
1088-
1089-
let vrf_consumer_class = parse_sierra_class(include_str!(concat!(
1090-
env!("CARGO_MANIFEST_DIR"),
1091-
"/../controller/classes/cartridge_vrf_VrfConsumer.contract_class.json"
1092-
)))
1093-
.unwrap();
1094-
let vrf_consumer_hash = vrf_consumer_class.class_hash().unwrap();
1095-
1096-
assert!(config.chain.genesis().classes.get(&vrf_account_hash).is_some());
1097-
assert!(config.chain.genesis().classes.get(&vrf_consumer_hash).is_some());
1098-
}
1099-
1100-
#[cfg(feature = "paymaster")]
1101-
#[test]
1102-
fn paymaster_adds_forwarder_class() {
1103-
use katana_primitives::utils::class::parse_sierra_class;
1104-
1105-
let args = SequencerNodeArgs::parse_from(["katana", "--paymaster"]);
1106-
let result = args.config().unwrap();
1107-
let config = &result;
1108-
1109-
let forwarder_class = parse_sierra_class(include_str!(concat!(
1110-
env!("CARGO_MANIFEST_DIR"),
1111-
"/../controller/classes/avnu_Forwarder.contract_class.json"
1112-
)))
1113-
.unwrap();
1114-
let forwarder_hash = forwarder_class.class_hash().unwrap();
1115-
1116-
assert!(config.chain.genesis().classes.get(&forwarder_hash).is_some());
1117-
}
1118-
1119-
#[cfg(feature = "vrf")]
1120-
#[test]
1121-
fn vrf_requires_paymaster() {
1122-
let args = SequencerNodeArgs::parse_from(["katana", "--vrf"]);
1123-
let err = args.config().unwrap_err();
1124-
assert!(err.to_string().contains("--vrf requires paymaster"));
1125-
}
11261094
}

crates/cli/src/sidecar.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ pub use cartridge::vrf::{
99
use katana_chain_spec::ChainSpec;
1010
use katana_genesis::allocation::GenesisAccountAlloc;
1111
use katana_genesis::constant::{DEFAULT_ETH_FEE_TOKEN_ADDRESS, DEFAULT_STRK_FEE_TOKEN_ADDRESS};
12-
#[cfg(feature = "vrf")]
13-
use katana_node::config::paymaster::VrfConfig;
1412
pub use katana_paymaster::{
1513
format_felt, wait_for_paymaster_ready, PaymasterService, PaymasterServiceConfig,
1614
PaymasterServiceConfigBuilder, PaymasterSidecarProcess,
@@ -25,28 +23,6 @@ use crate::options::VrfOptions;
2523
/// Default API key for the paymaster sidecar.
2624
pub const DEFAULT_PAYMASTER_API_KEY: &str = "paymaster_katana";
2725

28-
#[cfg(feature = "vrf")]
29-
pub fn build_vrf_config(options: &VrfOptions) -> Result<Option<VrfConfig>> {
30-
if !options.enabled {
31-
return Ok(None);
32-
}
33-
34-
if options.is_external() {
35-
let url = options.url.clone().expect("must be set if external");
36-
let vrf_account = options.vrf_account_contract.expect("must be set if external");
37-
38-
Ok(Some(VrfConfig { url, vrf_account }))
39-
} else {
40-
let listener = std::net::TcpListener::bind("127.0.0.1:0")?;
41-
let addr = listener.local_addr()?;
42-
let url = Url::parse(&format!("http://{addr}"))?;
43-
44-
todo!("infer vrf contract address")
45-
46-
// Ok(Some(VrfConfig { url }))
47-
}
48-
}
49-
5026
pub async fn bootstrap_paymaster(
5127
options: &PaymasterOptions,
5228
paymaster_url: Url,
@@ -101,7 +77,7 @@ pub async fn bootstrap_vrf(
10177
Ok(vrf_service)
10278
}
10379

104-
fn prefunded_account(chain_spec: &ChainSpec, index: u16) -> Result<(ContractAddress, Felt)> {
80+
pub fn prefunded_account(chain_spec: &ChainSpec, index: u16) -> Result<(ContractAddress, Felt)> {
10581
let (address, allocation) = chain_spec
10682
.genesis()
10783
.accounts()

crates/node/Cargo.toml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ katana-pool.workspace = true
2121
katana-pool-api.workspace = true
2222
katana-primitives.workspace = true
2323
katana-provider.workspace = true
24-
katana-genesis = { workspace = true, optional = true }
2524
katana-rpc-server.workspace = true
2625
katana-rpc-api.workspace = true
2726
katana-rpc-client.workspace = true
@@ -41,27 +40,19 @@ parking_lot.workspace = true
4140
thiserror.workspace = true
4241
tracing.workspace = true
4342
url.workspace = true
44-
ark-ff = { version = "0.4.2", optional = true }
4543

4644
strum.workspace = true
4745
strum_macros.workspace = true
4846

49-
stark-vrf = { workspace = true, optional = true }
50-
starknet = { workspace = true, optional = true }
51-
5247
tokio = { workspace = true, features = [ "time" ] }
5348

5449
[features]
5550
paymaster = [
56-
"dep:katana-genesis",
57-
"dep:starknet",
5851
"katana-rpc-api/paymaster",
5952
"katana-rpc-server/paymaster",
6053
]
6154
vrf = [
6255
"katana-rpc-server/vrf",
63-
"dep:stark-vrf",
64-
"dep:ark-ff",
6556
"cartridge",
6657
]
6758
cartridge = [

crates/node/src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ pub mod full;
44

55
pub mod config;
66
pub mod exit;
7-
#[cfg(feature = "vrf")]
8-
pub mod sidecar;
97

108
use std::future::IntoFuture;
119
use std::sync::Arc;

crates/node/src/sidecar.rs

Lines changed: 0 additions & 127 deletions
This file was deleted.

0 commit comments

Comments
 (0)