diff --git a/CHANGELOG.md b/CHANGELOG.md index 0646b290c5..d38016452c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added +- [#705](https://github.com/FuelLabs/fuel-vm/pull/705): Added `privileged_address` to the `ConsensusParameters` for permissioned operations(like upgrade of the network). - [#648](https://github.com/FuelLabs/fuel-vm/pull/648): Added support for generating proofs for Sparse Merkle Trees (SMTs) and proof verification. Proofs can be used to attest to the inclusion or exclusion of data from the set. ### Changed diff --git a/fuel-tx/src/tests/valid_cases.rs b/fuel-tx/src/tests/valid_cases.rs index 20dc9f6e06..cf3e1e79ce 100644 --- a/fuel-tx/src/tests/valid_cases.rs +++ b/fuel-tx/src/tests/valid_cases.rs @@ -39,6 +39,7 @@ pub fn test_params() -> ConsensusParameters { Default::default(), Default::default(), Default::default(), + Default::default(), ) } diff --git a/fuel-tx/src/transaction/consensus_parameters.rs b/fuel-tx/src/transaction/consensus_parameters.rs index 227718a1e4..0db04fd833 100644 --- a/fuel-tx/src/transaction/consensus_parameters.rs +++ b/fuel-tx/src/transaction/consensus_parameters.rs @@ -1,5 +1,6 @@ use fuel_types::{ bytes::WORD_SIZE, + Address, AssetId, Bytes32, ChainId, @@ -53,6 +54,7 @@ impl ConsensusParameters { gas_costs: GasCosts, base_asset_id: AssetId, block_gas_limit: u64, + privileged_address: Address, ) -> Self { Self::V1(ConsensusParametersV1 { tx_params, @@ -64,6 +66,7 @@ impl ConsensusParameters { gas_costs, base_asset_id, block_gas_limit, + privileged_address, }) } @@ -129,6 +132,13 @@ impl ConsensusParameters { Self::V1(params) => params.block_gas_limit, } } + + /// Get the privileged address + pub const fn privileged_address(&self) -> &Address { + match self { + Self::V1(params) => ¶ms.privileged_address, + } + } } #[cfg(feature = "builder")] @@ -195,6 +205,13 @@ impl ConsensusParameters { Self::V1(params) => params.block_gas_limit = block_gas_limit, } } + + /// Set the privileged address. + pub fn set_privileged_address(&mut self, privileged_address: Address) { + match self { + Self::V1(params) => params.privileged_address = privileged_address, + } + } } /// A collection of parameters for convenience @@ -211,22 +228,15 @@ pub struct ConsensusParametersV1 { pub gas_costs: GasCosts, pub base_asset_id: AssetId, pub block_gas_limit: u64, + /// The privileged address(user or predicate) that can perform permissioned + /// operations(like upgrading the network). + pub privileged_address: Address, } impl ConsensusParametersV1 { /// Constructor for the `ConsensusParameters` with Standard values. pub fn standard() -> Self { - Self { - tx_params: TxParameters::DEFAULT, - predicate_params: PredicateParameters::DEFAULT, - script_params: ScriptParameters::DEFAULT, - contract_params: ContractParameters::DEFAULT, - fee_params: FeeParameters::DEFAULT, - chain_id: ChainId::default(), - gas_costs: GasCosts::default(), - base_asset_id: Default::default(), - block_gas_limit: TxParameters::DEFAULT.max_gas_per_tx, - } + Self::standard_with_id(ChainId::default()) } /// Constructor for the `ConsensusParameters` with Standard values around `ChainId`. @@ -241,6 +251,7 @@ impl ConsensusParametersV1 { gas_costs: GasCosts::default(), base_asset_id: Default::default(), block_gas_limit: TxParameters::DEFAULT.max_gas_per_tx, + privileged_address: Default::default(), } } } diff --git a/fuel-vm/src/checked_transaction.rs b/fuel-vm/src/checked_transaction.rs index b285c7499d..3a2b0eb015 100644 --- a/fuel-vm/src/checked_transaction.rs +++ b/fuel-vm/src/checked_transaction.rs @@ -766,6 +766,7 @@ mod tests { Default::default(), Default::default(), Default::default(), + Default::default(), ) } diff --git a/fuel-vm/src/tests/outputs.rs b/fuel-vm/src/tests/outputs.rs index 2676ada155..6f6da24540 100644 --- a/fuel-vm/src/tests/outputs.rs +++ b/fuel-vm/src/tests/outputs.rs @@ -169,6 +169,7 @@ fn correct_change_is_provided_for_coin_outputs_create() { context.get_gas_costs().to_owned(), *context.get_base_asset_id(), context.get_block_gas_limit(), + *context.get_privileged_address(), ); let create = create .into_checked_basic(context.get_block_height(), &consensus_params) diff --git a/fuel-vm/src/util.rs b/fuel-vm/src/util.rs index e8348e7ce9..6b061779e7 100644 --- a/fuel-vm/src/util.rs +++ b/fuel-vm/src/util.rs @@ -364,6 +364,10 @@ pub mod test_helpers { self.consensus_params.block_gas_limit() } + pub fn get_privileged_address(&self) -> &Address { + self.consensus_params.privileged_address() + } + pub fn get_chain_id(&self) -> ChainId { self.consensus_params.chain_id() }