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

Unified Create and Script logic via ChargeableTransaction #706

Merged
merged 26 commits into from
Mar 26, 2024
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
26 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
b57047a
Unified `Create` and `Script` logic via `ChargeableTransaction`
xgreenx Mar 24, 2024
3ebe1d8
Updated CHANGELOG.md
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
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
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
4496d2b
Update fuel-tx/src/transaction/id.rs
xgreenx Mar 26, 2024
f975aab
Merge branch 'master' into feature/chargeable-transaction
xgreenx Mar 26, 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
460 changes: 230 additions & 230 deletions .npm/packages/fuel-tx/index.test.cjs

Large diffs are not rendered by default.

460 changes: 230 additions & 230 deletions .npm/packages/fuel-tx/index.test.mjs

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

#### Breaking

- [#703](https://github.com/FuelLabs/fuel-vm/pull/703): Reshuffled fields `Script` and `Create` transactions to unify part used by all chargeable transactions. It breaks the serialization and deserialization and requires adoption on the SDK side.
- [#702](https://github.com/FuelLabs/fuel-vm/pull/702): Wrapped `FeeParameters`, `PredicateParameters`, `TxParameters`, `ScriptParameters` and `ContractParameters` into an enum to support versioning.
- [#701](https://github.com/FuelLabs/fuel-vm/pull/701): Wrapped `ConsensusParameters` and `GasCosts` into an enum to support versioning. Moved `block_gas_limit` from `fuel_core_chain_config::ChainConfig` to `ConsensusPataremeters`. Reduced default `MAX_SIZE` to be [110kb](https://github.com/FuelLabs/fuel-core/pull/1761) and `MAX_CONTRACT_SIZE` to be [100kb](https://github.com/FuelLabs/fuel-core/pull/1761).
- [#692](https://github.com/FuelLabs/fuel-vm/pull/692): Add GTF getters for tx size and address.
- [#698](https://github.com/FuelLabs/fuel-vm/pull/698): Store input, output and witness limits to u16, while keeping the values limited to 255.
Expand Down
10 changes: 10 additions & 0 deletions fuel-derive/src/deserialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ fn deserialize_struct(s: &mut synstructure::Structure) -> TokenStream2 {
quote! {}
};

let mut s = s.clone();

let variant: &mut synstructure::VariantInfo = &mut s.variants_mut()[0];
variant.filter(|binding| !should_skip_field_binding(binding));

s.gen_impl(quote! {
gen impl ::fuel_types::canonical::Deserialize for @Self {
fn decode_static<I: ::fuel_types::canonical::Input + ?Sized>(buffer: &mut I) -> ::core::result::Result<Self, ::fuel_types::canonical::Error> {
Expand Down Expand Up @@ -138,6 +143,11 @@ fn deserialize_enum(s: &synstructure::Structure) -> TokenStream2 {
}
};

let mut s = s.clone();
s.variants_mut().iter_mut().for_each(|v| {
v.filter(|binding| !should_skip_field_binding(binding));
});

s.gen_impl(quote! {
gen impl ::fuel_types::canonical::Deserialize for @Self {
fn decode_static<I: ::fuel_types::canonical::Input + ?Sized>(buffer: &mut I) -> ::core::result::Result<Self, ::fuel_types::canonical::Error> {
Expand Down
76 changes: 27 additions & 49 deletions fuel-derive/src/serialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,37 +8,28 @@ use crate::attribute::{

fn serialize_struct(s: &synstructure::Structure) -> TokenStream2 {
let attrs = StructAttrs::parse(s);
let mut s = s.clone();

assert_eq!(s.variants().len(), 1, "structs must have one variant");

let variant: &synstructure::VariantInfo = &s.variants()[0];
let variant: &mut synstructure::VariantInfo = &mut s.variants_mut()[0];
variant.filter(|binding| !should_skip_field_binding(binding));

let encode_static = variant.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
::fuel_types::canonical::Serialize::encode_static(#binding, buffer)?;
}
quote! {
::fuel_types::canonical::Serialize::encode_static(#binding, buffer)?;
}
});

let encode_dynamic = variant.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
::fuel_types::canonical::Serialize::encode_dynamic(#binding, buffer)?;
}
quote! {
::fuel_types::canonical::Serialize::encode_dynamic(#binding, buffer)?;
}
});

let size_static_code = variant.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_static());
}
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_static());
}
});

Expand All @@ -50,12 +41,8 @@ fn serialize_struct(s: &synstructure::Structure) -> TokenStream2 {
let size_static_code = quote! { #initial_size match self { #size_static_code}; size };

let size_dynamic_code = variant.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_dynamic());
}
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_dynamic());
}
});
let size_dynamic_code =
Expand Down Expand Up @@ -104,16 +91,19 @@ fn serialize_struct(s: &synstructure::Structure) -> TokenStream2 {

fn serialize_enum(s: &synstructure::Structure) -> TokenStream2 {
assert!(!s.variants().is_empty(), "got invalid empty enum");
let mut s = s.clone();
let mut next_discriminant = quote! { { 0u64 } };

s.variants_mut().iter_mut().for_each(|v| {
v.filter(|binding| !should_skip_field_binding(binding));
});

let encode_static = s.variants().iter().map(|v| {
let pat = v.pat();

let encode_static_iter = v.bindings().iter().map(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
::fuel_types::canonical::Serialize::encode_static(#binding, buffer)?;
}
quote! {
::fuel_types::canonical::Serialize::encode_static(#binding, buffer)?;
}
});

Expand All @@ -138,12 +128,8 @@ fn serialize_enum(s: &synstructure::Structure) -> TokenStream2 {
});
let encode_dynamic = s.variants().iter().map(|v| {
let encode_dynamic_iter = v.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
::fuel_types::canonical::Serialize::encode_dynamic(#binding, buffer)?;
}
quote! {
::fuel_types::canonical::Serialize::encode_dynamic(#binding, buffer)?;
}
});
quote! {
Expand All @@ -156,12 +142,8 @@ fn serialize_enum(s: &synstructure::Structure) -> TokenStream2 {
.iter()
.map(|variant| {
variant.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_static());
}
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_static());
}
})
})
Expand All @@ -177,12 +159,8 @@ fn serialize_enum(s: &synstructure::Structure) -> TokenStream2 {
.iter()
.map(|variant| {
variant.each(|binding| {
if should_skip_field_binding(binding) {
quote! {}
} else {
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_dynamic());
}
quote! {
size = ::fuel_types::canonical::add_sizes(size, #binding.size_dynamic());
}
})
})
Expand Down
26 changes: 17 additions & 9 deletions fuel-tx/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ use crate::{
WitnessLimit,
},
policies::Policies,
transaction::{
CreateBody,
ScriptBody,
},
};
use alloc::{
collections::BTreeMap,
Expand Down Expand Up @@ -116,14 +120,16 @@ pub struct TransactionBuilder<Tx> {
impl TransactionBuilder<Script> {
pub fn script(script: Vec<u8>, script_data: Vec<u8>) -> Self {
let tx = Script {
script_gas_limit: Default::default(),
script,
script_data,
body: ScriptBody {
script_gas_limit: Default::default(),
receipts_root: Default::default(),
script,
script_data,
},
policies: Policies::new().with_max_fee(0),
inputs: Default::default(),
outputs: Default::default(),
witnesses: Default::default(),
receipts_root: Default::default(),
metadata: None,
};
Self::with_tx(tx)
Expand All @@ -139,10 +145,12 @@ impl TransactionBuilder<Create> {
// sort the storage slots before initializing the builder
storage_slots.sort();
let mut tx = Create {
bytecode_length: Default::default(),
bytecode_witness_index: Default::default(),
salt,
storage_slots,
body: CreateBody {
bytecode_length: Default::default(),
bytecode_witness_index: Default::default(),
salt,
storage_slots,
},
policies: Policies::new().with_max_fee(0),
inputs: Default::default(),
outputs: Default::default(),
Expand Down Expand Up @@ -410,7 +418,7 @@ impl<Tx: Buildable> TransactionBuilder<Tx> {
let witness_len = u16::try_from(self.witnesses().len())
.expect("The number of witnesses can't exceed `u16::MAX`");

if u32::from(witness_len) > self.params.tx_params().max_witnesses {
if u32::from(witness_len) > self.params.tx_params().max_witnesses() {
panic!("Max witnesses exceeded");
}

Expand Down
1 change: 1 addition & 0 deletions fuel-tx/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ pub use transaction::{
};

pub use transaction::{
PrepareSign,
Signable,
UniqueIdentifier,
};
Expand Down
10 changes: 5 additions & 5 deletions fuel-tx/src/tests/valid_cases/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ fn message_metadata() {

assert_eq!(ValidityError::InputPredicateOwner { index: 1 }, err);

let data = vec![0xff; PREDICATE_PARAMS.max_message_data_length as usize + 1];
let data = vec![0xff; PREDICATE_PARAMS.max_message_data_length() as usize + 1];

let err = Input::message_data_signed(
rng.gen(),
Expand Down Expand Up @@ -417,7 +417,7 @@ fn message_metadata() {

assert_eq!(ValidityError::InputMessageDataLength { index: 1 }, err,);

let predicate = vec![0xff; PREDICATE_PARAMS.max_predicate_length as usize + 1];
let predicate = vec![0xff; PREDICATE_PARAMS.max_predicate_length() as usize + 1];

let err = Input::message_data_predicate(
rng.gen(),
Expand All @@ -435,7 +435,7 @@ fn message_metadata() {
assert_eq!(ValidityError::InputPredicateLength { index: 1 }, err,);

let predicate_data =
vec![0xff; PREDICATE_PARAMS.max_predicate_data_length as usize + 1];
vec![0xff; PREDICATE_PARAMS.max_predicate_data_length() as usize + 1];

let err = Input::message_data_predicate(
rng.gen(),
Expand Down Expand Up @@ -503,7 +503,7 @@ fn message_message_coin() {

assert_eq!(ValidityError::InputPredicateOwner { index: 1 }, err);

let predicate = vec![0xff; PREDICATE_PARAMS.max_predicate_length as usize + 1];
let predicate = vec![0xff; PREDICATE_PARAMS.max_predicate_length() as usize + 1];

let err = Input::message_coin_predicate(
rng.gen(),
Expand All @@ -520,7 +520,7 @@ fn message_message_coin() {
assert_eq!(ValidityError::InputPredicateLength { index: 1 }, err,);

let predicate_data =
vec![0xff; PREDICATE_PARAMS.max_predicate_data_length as usize + 1];
vec![0xff; PREDICATE_PARAMS.max_predicate_data_length() as usize + 1];

let err = Input::message_coin_predicate(
rng.gen(),
Expand Down
Loading
Loading