Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Process Upgrade transaction inside of the Interpreter #712

Merged
merged 60 commits into from
Apr 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
cb9d324
Versioned `GasCosts`
xgreenx Mar 21, 2024
2feab92
Versioned `ConsensusParameters`ю
xgreenx Mar 21, 2024
57c7730
Updated CHANGELOG.md
xgreenx Mar 21, 2024
41a537c
Versioned `FeeParameters`
xgreenx Mar 21, 2024
83721d9
Versioned `PredicateParameters`, `ScriptParameters`, `ContractParamet…
xgreenx Mar 21, 2024
ed2e94b
Versioned `TxParameters`
xgreenx Mar 21, 2024
34aa7dc
Updated CHANGELOG.md
xgreenx Mar 21, 2024
0ca4ddf
Make CI happy
xgreenx Mar 21, 2024
38e515d
Merge branch 'master' into feature/versioning-sub-parameters
xgreenx Mar 21, 2024
5c5b009
Reshuffled fields `Script` and `Create` transactions to unify part us…
xgreenx Mar 22, 2024
5eae221
Updated CHANGELOG.md
xgreenx Mar 22, 2024
bd12db3
Merge branch 'master' into feature/versioning-sub-parameters
xgreenx Mar 22, 2024
a3618cc
Merge branch 'feature/versioning-sub-parameters' into feature/common-…
xgreenx Mar 22, 2024
edc0c1d
Added privileged address to the `ConsensusParameters`
xgreenx Mar 23, 2024
a015fcc
Updated CHANGELOG.md
xgreenx Mar 23, 2024
b57047a
Unified `Create` and `Script` logic via `ChargeableTransaction`
xgreenx Mar 24, 2024
3ebe1d8
Updated CHANGELOG.md
xgreenx Mar 24, 2024
8f8fdf0
Merge branch 'feature/privileged-address' into feature/upgrade-transa…
xgreenx Mar 24, 2024
27d18ac
Merge branch 'master' into feature/versioning-sub-parameters
xgreenx Mar 25, 2024
2f2cfdc
Merge branch 'feature/versioning-sub-parameters' into feature/common-…
xgreenx Mar 25, 2024
13592ac
Merge branch 'feature/common-payable-part' into feature/chargeable-tr…
xgreenx Mar 25, 2024
fa4c795
A new `Upgrade` transaction to perform network upgrades
xgreenx Mar 25, 2024
cbee779
Merge branch 'feature/chargeable-transaction' into feature/upgrade-tr…
xgreenx Mar 25, 2024
e374ea3
Merge branch 'master' into feature/versioning-sub-parameters
xgreenx Mar 25, 2024
c4cbc5f
Merge branch 'feature/versioning-sub-parameters' into feature/common-…
xgreenx Mar 25, 2024
6db8b16
Merge branch 'feature/common-payable-part' into feature/chargeable-tr…
xgreenx Mar 25, 2024
d5532d0
Merge branch 'feature/chargeable-transaction' into feature/upgrade-tr…
xgreenx Mar 25, 2024
f9f2f39
Merge branch 'master' into feature/common-payable-part
xgreenx Mar 25, 2024
0fbcb44
Merge branch 'master' into feature/common-payable-part
xgreenx Mar 25, 2024
50502cf
Merge branch 'feature/common-payable-part' into feature/chargeable-tr…
xgreenx Mar 26, 2024
87424ec
Merge branch 'feature/chargeable-transaction' into feature/upgrade-tr…
xgreenx Mar 26, 2024
4496d2b
Update fuel-tx/src/transaction/id.rs
xgreenx Mar 26, 2024
f975aab
Merge branch 'master' into feature/chargeable-transaction
xgreenx Mar 26, 2024
09327bd
Merge branch 'feature/chargeable-transaction' into feature/upgrade-tr…
Dentosal Mar 26, 2024
652157e
Merge branch 'master' into feature/upgrade-transaction
xgreenx Apr 1, 2024
080e73c
Added tests required for any transaction
xgreenx Apr 1, 2024
3f07b06
Process `Upgrade` transaction inside of the `Interpreter`
xgreenx Apr 2, 2024
5ce49dc
Added tests to verify correctness of the upgrade behaviour.
xgreenx Apr 3, 2024
462e515
Review from meself
xgreenx Apr 3, 2024
3a9e27c
Updated CHANGELOG.md
xgreenx Apr 3, 2024
0b815be
Updated CHANGELOG.md
xgreenx Apr 3, 2024
68a41da
Updated CHANGELOG.md
xgreenx Apr 3, 2024
919560d
Updated CHANGELOG.md
xgreenx Apr 3, 2024
3510e37
Added a comment
xgreenx Apr 4, 2024
17957b3
Merge branch 'feature/upgrade-transaction' into feature/process-upgra…
xgreenx Apr 4, 2024
bb585a7
Merge branch 'master' into feature/upgrade-transaction
xgreenx Apr 5, 2024
68a1767
Merge branch 'feature/upgrade-transaction' into feature/process-upgra…
xgreenx Apr 5, 2024
71c026c
Merge branch 'master' into feature/upgrade-transaction
xgreenx Apr 6, 2024
f2a3c83
Merge branch 'feature/upgrade-transaction' into feature/process-upgra…
xgreenx Apr 6, 2024
4771d5a
Use right discriminant for the `Upgrade` transaction
xgreenx Apr 7, 2024
04f459c
Merge branch 'feature/upgrade-transaction' into feature/process-upgra…
xgreenx Apr 7, 2024
29aa53b
Applied comments from PR
xgreenx Apr 9, 2024
120de10
Removed iow
xgreenx Apr 9, 2024
c5163fb
Merge branch 'feature/upgrade-transaction' into feature/process-upgra…
xgreenx Apr 9, 2024
f9a04cc
Merge branch 'master' into feature/process-upgrade-transaction-within…
xgreenx Apr 9, 2024
b63bbd6
Applied comments from the review
xgreenx Apr 10, 2024
628e567
Removed non requried test
xgreenx Apr 10, 2024
e6aeef8
Update fuel-asm/src/panic_reason.rs
xgreenx Apr 10, 2024
e871566
Update fuel-asm/src/panic_reason.rs
xgreenx Apr 10, 2024
47bad74
Applied comment
xgreenx Apr 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

#### Breaking

- [#712](https://github.com/FuelLabs/fuel-vm/pull/712): The `Interpreter` supports the processing of the `Upgrade` transaction. The change affects `InterpreterStorage`, adding 5 new methods that must be implemented.
- [#707](https://github.com/FuelLabs/fuel-vm/pull/707): The change adds a new `Upgrade` transaction that allows upgrading either consensus parameters or state transition function used by the network to produce future blocks.
The purpose of the upgrade is defined by the `Upgrade Purpose` type:

Expand Down
6 changes: 6 additions & 0 deletions fuel-asm/src/panic_reason.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ enum_from! {
/// Attempting to read or write uninitialized memory.
/// Also occurs when boundary crosses from stack to heap.
UninitalizedMemoryAccess = 0x30,
/// Overriding consensus parameters is not allowed.
OverridingConsensusParameters = 0x31,
/// The storage doesn't know about the hash of the state transition bytecode.
UnknownStateTransactionBytecodeHash = 0x32,
/// Overriding the state transition bytecode is not allowed.
OverridingStateTransactionBytecode = 0x33,
}
}

Expand Down
3 changes: 3 additions & 0 deletions fuel-tx/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ pub use transaction::{
policies,
Cacheable,
Chargeable,
ChargeableMetadata,
ChargeableTransaction,
ConsensusParameters,
ContractParameters,
Create,
Expand All @@ -102,6 +104,7 @@ pub use transaction::{
TxParameters,
Upgrade,
UpgradeBody,
UpgradeMetadata,
UpgradePurpose,
UtxoId,
ValidityError,
Expand Down
5 changes: 5 additions & 0 deletions fuel-tx/src/transaction/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ mod upgrade;
mod utxo_id;
mod witness;

pub use chargeable_transaction::{
ChargeableMetadata,
ChargeableTransaction,
};
pub use create::{
Create,
CreateBody,
Expand All @@ -22,6 +26,7 @@ pub use storage::StorageSlot;
pub use upgrade::{
Upgrade,
UpgradeBody,
UpgradeMetadata,
UpgradePurpose,
};
pub use utxo_id::UtxoId;
Expand Down
4 changes: 2 additions & 2 deletions fuel-vm/src/interpreter/blockchain/code_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use fuel_tx::Contract;

#[test]
fn test_load_contract() -> IoResult<(), Infallible> {
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
let mut pc = 4;
let mut cgas = 1000;
Expand Down Expand Up @@ -70,7 +70,7 @@ fn test_load_contract() -> IoResult<(), Infallible> {

#[test]
fn test_code_copy() -> IoResult<(), Infallible> {
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
let mut cgas = 1000;
let mut ggas = 1000;
Expand Down
6 changes: 3 additions & 3 deletions fuel-vm/src/interpreter/blockchain/croo_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ fn test_code_root() {
// Given
let contract_id = new_contract_id();

let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
memory[0..ContractId::LEN].copy_from_slice(contract_id.as_slice());

Expand Down Expand Up @@ -114,7 +114,7 @@ fn test_code_root_contract_not_found() {
// Given
let contract_id = new_contract_id();

let storage = MemoryStorage::new(Default::default(), Default::default());
let storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
memory[0..ContractId::LEN].copy_from_slice(contract_id.as_slice());

Expand Down Expand Up @@ -161,7 +161,7 @@ fn test_code_root_contract_not_in_inputs() {
// Given
let contract_id = new_contract_id();

let storage = MemoryStorage::new(Default::default(), Default::default());
let storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
memory[0..ContractId::LEN].copy_from_slice(contract_id.as_slice());

Expand Down
12 changes: 6 additions & 6 deletions fuel-vm/src/interpreter/blockchain/other_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ fn test_burn(
amount: Word,
sub_id: [u8; 32],
) -> IoResult<(), Infallible> {
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
let contract_id = ContractId::from([3u8; 32]);
memory[0..ContractId::LEN].copy_from_slice(contract_id.as_slice());
Expand Down Expand Up @@ -108,7 +108,7 @@ fn test_mint(
amount: Word,
sub_id: [u8; 32],
) -> IoResult<(), Infallible> {
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
let contract_id = ContractId::from([3u8; 32]);
memory[0..ContractId::LEN].copy_from_slice(contract_id.as_slice());
Expand Down Expand Up @@ -176,7 +176,7 @@ fn test_mint(

#[test]
fn test_block_hash() {
let storage = MemoryStorage::new(Default::default(), Default::default());
let storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
let owner = OwnershipRegisters {
sp: 1000,
Expand Down Expand Up @@ -207,7 +207,7 @@ fn test_block_height() {

#[test]
fn test_coinbase() {
let storage = MemoryStorage::new(Default::default(), Default::default());
let storage = MemoryStorage::new(Default::default(), ContractId::zeroed());
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
let owner = OwnershipRegisters {
sp: 1000,
Expand All @@ -227,7 +227,7 @@ fn test_coinbase() {
#[test]
fn test_code_size() {
let contract_id = ContractId::new([3u8; ContractId::LEN]);
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
memory[0..ContractId::LEN].copy_from_slice(contract_id.as_slice());
StorageAsMut::storage::<ContractsRawCode>(&mut storage)
Expand Down Expand Up @@ -294,7 +294,7 @@ fn test_code_size() {

#[test]
fn test_timestamp() {
let storage = MemoryStorage::new(Default::default(), Default::default());
let storage = MemoryStorage::default();
let mut pc = 4;
let mut result = 0;
let _ = timestamp(
Expand Down
2 changes: 1 addition & 1 deletion fuel-vm/src/interpreter/blockchain/smo_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ fn test_smo(
memory[offset..offset + bytes.len()].copy_from_slice(bytes.as_slice());
}
let mut receipts = Default::default();
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let old_balance = storage
.contract_asset_id_balance_insert(
&ContractId::default(),
Expand Down
4 changes: 2 additions & 2 deletions fuel-vm/src/interpreter/blockchain/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ fn test_state_read_word(
insert: impl Into<Option<Word>>,
key: Word,
) -> Result<(Word, Word), RuntimeError<Infallible>> {
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
memory[0..ContractId::LEN].copy_from_slice(&[3u8; ContractId::LEN][..]);
memory[32..64].copy_from_slice(&[4u8; 32][..]);
Expand Down Expand Up @@ -137,7 +137,7 @@ fn test_state_write_word(
insert: bool,
key: Word,
) -> Result<Word, RuntimeError<Infallible>> {
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let mut memory: Memory = vec![1u8; MEM_SIZE].try_into().unwrap();
memory[0..ContractId::LEN].copy_from_slice(&[3u8; ContractId::LEN][..]);
memory[32..64].copy_from_slice(&[4u8; 32][..]);
Expand Down
2 changes: 1 addition & 1 deletion fuel-vm/src/interpreter/blockchain/test/scwq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ fn test_state_clear_qword(
storage_slots,
memory,
} = input;
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();

for (k, v) in storage_slots {
storage
Expand Down
2 changes: 1 addition & 1 deletion fuel-vm/src/interpreter/blockchain/test/srwq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ fn test_state_read_qword(
origin_key_pointer,
num_slots,
} = input;
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
for (k, v) in storage_slots {
storage
.storage::<ContractsState>()
Expand Down
2 changes: 1 addition & 1 deletion fuel-vm/src/interpreter/blockchain/test/swwq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ fn test_state_write_qword(
storage_slots,
memory,
} = input;
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();

for (k, v) in storage_slots {
storage
Expand Down
10 changes: 5 additions & 5 deletions fuel-vm/src/interpreter/contract/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ fn test_contract_balance(b: Word, c: Word) -> IoResult<(), Infallible> {
memory[c as usize..(c as usize + ContractId::LEN)]
.copy_from_slice(&[3u8; ContractId::LEN][..]);
let contract_id = ContractId::from([3u8; 32]);
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let old_balance = storage
.contract_asset_id_balance_insert(&contract_id, &AssetId::from([2u8; 32]), 33)
.unwrap();
Expand Down Expand Up @@ -97,7 +97,7 @@ fn test_transfer(
memory[fp as usize..(fp as usize + ContractId::LEN)]
.copy_from_slice(SOURCE_CONTRACT_ID.as_ref());

let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();

let initial_recipient_contract_balance = 0;
let initial_source_contract_balance = 60;
Expand Down Expand Up @@ -240,7 +240,7 @@ fn test_transfer_output(
memory[fp as usize..(fp as usize + ContractId::LEN)]
.copy_from_slice(SOURCE_CONTRACT_ID.as_ref());

let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();

let initial_contract_balance = 60;

Expand Down Expand Up @@ -359,7 +359,7 @@ fn test_balance_increase(
) -> IoResult<(), Infallible> {
let contract_id = ContractId::from([3u8; 32]);
let asset_id = AssetId::from([2u8; 32]);
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let initial = initial.into();
if let Some(initial) = initial {
let old_balance = storage
Expand Down Expand Up @@ -397,7 +397,7 @@ fn test_balance_decrease(
) -> IoResult<(), Infallible> {
let contract_id = ContractId::from([3u8; 32]);
let asset_id = AssetId::from([2u8; 32]);
let mut storage = MemoryStorage::new(Default::default(), Default::default());
let mut storage = MemoryStorage::default();
let initial = initial.into();
if let Some(initial) = initial {
let old_balance = storage
Expand Down
34 changes: 34 additions & 0 deletions fuel-vm/src/interpreter/diff/storage.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use alloc::borrow::Cow;
use core::fmt::Debug;
use hashbrown::HashMap;

Expand All @@ -6,6 +7,7 @@ use fuel_storage::{
StorageSize,
StorageWrite,
};
use fuel_tx::ConsensusParameters;
use fuel_types::{
BlockHeight,
Bytes32,
Expand Down Expand Up @@ -395,6 +397,14 @@ where
self.0.block_height()
}

fn consensus_parameters_version(&self) -> Result<u32, Self::DataError> {
self.0.consensus_parameters_version()
}

fn state_transition_version(&self) -> Result<u32, Self::DataError> {
self.0.state_transition_version()
}

fn timestamp(&self, height: BlockHeight) -> Result<Word, Self::DataError> {
self.0.timestamp(height)
}
Expand All @@ -407,6 +417,30 @@ where
self.0.coinbase()
}

fn set_consensus_parameters(
&mut self,
version: u32,
consensus_parameters: &ConsensusParameters,
) -> Result<Option<Cow<'_, ConsensusParameters>>, Self::DataError> {
self.0
.set_consensus_parameters(version, consensus_parameters)
}

fn contains_state_transition_bytecode_hash(
&self,
hash: &Bytes32,
) -> Result<bool, Self::DataError> {
self.0.contains_state_transition_bytecode_hash(hash)
}

fn set_state_transition_bytecode(
&mut self,
version: u32,
hash: &Bytes32,
) -> Result<Option<Cow<'_, Bytes32>>, Self::DataError> {
self.0.set_state_transition_bytecode(version, hash)
}

fn contract_state_range(
&self,
id: &ContractId,
Expand Down
Loading
Loading