diff --git a/program-tests/utils/src/e2e_test_env.rs b/program-tests/utils/src/e2e_test_env.rs index f5ecfdb405..b7ae6acc99 100644 --- a/program-tests/utils/src/e2e_test_env.rs +++ b/program-tests/utils/src/e2e_test_env.rs @@ -1281,6 +1281,7 @@ where .metadata .rollover_metadata .rollover_fee as i64, + network_fee: FeeConfig::default().network_fee, accounts: StateMerkleTreeAccounts { merkle_tree: merkle_tree_keypair.pubkey(), nullifier_queue: nullifier_queue_keypair.pubkey(), @@ -1547,6 +1548,7 @@ where TreeType::StateV2 => bundle.accounts.nullifier_queue, _ => panic!("Unsupported version"), }; + let network_fee = bundle.network_fee; let recipients = vec![*to]; let transaction_params = if self.keypair_action_config.fee_assert { let (inputs, is_v2) = if bundle.tree_type == TreeType::StateV2 { @@ -1562,6 +1564,7 @@ where compress: 0, fee_config: FeeConfig { state_merkle_tree_rollover: rollover_fee as u64, + network_fee, ..Default::default() }, }) @@ -1700,6 +1703,7 @@ where }; let bundle = self.indexer.get_state_merkle_trees()[tree_index.unwrap_or(0)].clone(); let rollover_fee = bundle.rollover_fee; + let network_fee = bundle.network_fee; let output_merkle_tree = match bundle.tree_type { TreeType::StateV1 => bundle.accounts.merkle_tree, // Output queue for batched trees @@ -1721,6 +1725,7 @@ where compress: amount as i64, fee_config: FeeConfig { state_merkle_tree_rollover: rollover_fee as u64, + network_fee, ..Default::default() }, }) @@ -2406,6 +2411,7 @@ where .push(StateMerkleTreeBundle { // TODO: fetch correct fee when this property is used rollover_fee: 0, + network_fee: FeeConfig::default().network_fee, accounts: StateMerkleTreeAccounts { merkle_tree: new_merkle_tree_keypair.pubkey(), nullifier_queue: new_nullifier_queue_keypair.pubkey(), diff --git a/programs/registry/src/lib.rs b/programs/registry/src/lib.rs index 0bd6dc01af..a4882c4ede 100644 --- a/programs/registry/src/lib.rs +++ b/programs/registry/src/lib.rs @@ -833,6 +833,9 @@ pub fn check_forester( } Ok(()) } else if metadata.access_metadata.forester == authority { + if metadata.rollover_metadata.network_fee != 0 { + return err!(RegistryError::InvalidNetworkFee); + } Ok(()) } else { err!(RegistryError::InvalidSigner) diff --git a/sdk-libs/program-test/src/indexer/state_tree.rs b/sdk-libs/program-test/src/indexer/state_tree.rs index 832fb962ed..b0f1407f1f 100644 --- a/sdk-libs/program-test/src/indexer/state_tree.rs +++ b/sdk-libs/program-test/src/indexer/state_tree.rs @@ -15,6 +15,7 @@ pub struct LeafIndexInfo { #[derive(Debug, Clone)] pub struct StateMerkleTreeBundle { pub rollover_fee: i64, + pub network_fee: u64, pub merkle_tree: Box>, pub accounts: StateMerkleTreeAccounts, pub tree_type: TreeType, diff --git a/sdk-libs/program-test/src/indexer/test_indexer.rs b/sdk-libs/program-test/src/indexer/test_indexer.rs index 6218a75fd4..f01b9ec8e9 100644 --- a/sdk-libs/program-test/src/indexer/test_indexer.rs +++ b/sdk-libs/program-test/src/indexer/test_indexer.rs @@ -1328,6 +1328,7 @@ impl TestIndexer { accounts: *state_merkle_tree_account, merkle_tree, rollover_fee: FeeConfig::default().state_merkle_tree_rollover as i64, + network_fee: FeeConfig::default().network_fee, tree_type, output_queue_elements: vec![], input_leaf_indices: vec![], @@ -1709,10 +1710,16 @@ impl TestIndexer { tree_type, }; + let network_fee = if forester.is_some() { + 0 + } else { + FeeConfig::default().network_fee + }; self.state_merkle_trees.push(StateMerkleTreeBundle { merkle_tree, accounts: state_merkle_tree_account, rollover_fee, + network_fee, tree_type, output_queue_elements: vec![], input_leaf_indices: vec![],