Skip to content

Commit 99be816

Browse files
authored
Changing TransactionV1 structure follwing casper-network/casper-node#4890 (#191)
* merge changes * Cargo types * is_install_upgrade / additional_computation_factor wip * Fix tests and additional_computation_factor * Update json-schema
1 parent c2780cd commit 99be816

File tree

8 files changed

+350
-191
lines changed

8 files changed

+350
-191
lines changed

Cargo.toml

+8-8
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,29 @@ default = ["async-trait", "clap", "clap_complete", "std-fs-io"]
2929
std-fs-io = ["casper-types/std-fs-io"]
3030

3131
[dependencies]
32-
async-trait = { version = "0.1.59", default-features = false, optional = true }
32+
async-trait = { version = "0.1.74", default-features = false, optional = true }
3333
base16 = "0.2.1"
3434
casper-types = { version = "5.0.0", features = ["std", "json-schema"] }
3535
clap = { version = "~4.4", features = ["cargo", "deprecated"], optional = true }
3636
clap_complete = { version = "~4.4", default-features = false, optional = true }
3737
hex-buffer-serde = "0.4.0"
38-
humantime = "2"
39-
itertools = "0.11.0"
38+
humantime = "2.1.0"
39+
itertools = "0.12.0"
4040
jsonrpc-lite = "0.6.0"
4141
num-traits = "0.2.15"
42-
once_cell = "1"
42+
once_cell = "1.18.0"
4343
rand = "0.8.5"
4444
reqwest = { version = "0.12.5", features = ["json"] }
45-
schemars = "0.8.13"
45+
schemars = "0.8.18"
4646
serde = { version = "1", default-features = false, features = ["derive"] }
4747
serde-map-to-array = "1.1.1"
4848
serde_json = { version = "1", features = ["preserve_order"] }
4949
thiserror = "1"
50-
tokio = { version = "1.38.0", features = ["macros", "rt", "sync", "time"] }
51-
uint = "0.9.4"
50+
tokio = { version = "1.39.3", features = ["macros", "rt", "sync", "time"] }
51+
uint = "0.9.5"
5252

5353
[dev-dependencies]
54-
tempfile = "3.7.1"
54+
tempfile = "3.8.1"
5555

5656
[patch.crates-io]
5757
casper-types = { git = "https://github.com/casper-network/casper-node.git", branch = "feat-2.0" }

lib/cli/error.rs

-4
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,6 @@ pub enum CliError {
184184
#[error("Failed to parse a transfer target")]
185185
FailedToParseTransferTarget,
186186

187-
/// Failed to parse transaction category.
188-
#[error("Failed to parse a transaction category")]
189-
FailedToParseTransactionCategory,
190-
191187
/// Failed to parse a validator public key.
192188
#[error("Failed to parse a validator public key")]
193189
FailedToParseValidatorPublicKey,

lib/cli/parse.rs

+93-24
Original file line numberDiff line numberDiff line change
@@ -824,72 +824,85 @@ pub(super) fn public_key(public_key: &str) -> Result<Option<PublicKey>, CliError
824824

825825
pub(super) fn pricing_mode(
826826
pricing_mode_identifier_str: &str,
827-
maybe_payment_amount_str: &str,
828-
maybe_gas_price_tolerance_str: &str,
829-
maybe_standard_payment_str: &str,
827+
payment_amount_str: &str,
828+
gas_price_tolerance_str: &str,
829+
additional_computation_factor_str: &str,
830+
standard_payment_str: &str,
830831
maybe_receipt: Option<Digest>,
831832
) -> Result<PricingMode, CliError> {
832833
match pricing_mode_identifier_str.to_lowercase().as_str() {
833834
"classic" => {
834-
if maybe_gas_price_tolerance_str.is_empty() {
835+
if gas_price_tolerance_str.is_empty() {
835836
return Err(CliError::InvalidArgument {
836837
context: "gas_price_tolerance",
837838
error: "Gas price tolerance is required".to_string(),
838839
});
839840
}
840-
if maybe_payment_amount_str.is_empty() {
841+
if payment_amount_str.is_empty() {
841842
return Err(CliError::InvalidArgument {
842843
context: "payment_amount",
843844
error: "Payment amount is required".to_string(),
844845
});
845846
}
846-
if maybe_standard_payment_str.is_empty() {
847+
if standard_payment_str.is_empty() {
847848
return Err(CliError::InvalidArgument {
848849
context: "standard_payment",
849850
error: "Standard payment flag is required".to_string(),
850851
});
851852
}
852-
let gas_price_tolerance =
853-
maybe_gas_price_tolerance_str
854-
.parse::<u8>()
855-
.map_err(|error| CliError::FailedToParseInt {
856-
context: "gas_price_tolerance",
857-
error,
858-
})?;
859-
let payment_amount = maybe_payment_amount_str.parse::<u64>().map_err(|error| {
853+
let gas_price_tolerance = gas_price_tolerance_str.parse::<u8>().map_err(|error| {
860854
CliError::FailedToParseInt {
861-
context: "payment_amount",
855+
context: "gas_price_tolerance",
862856
error,
863857
}
864858
})?;
865-
let standard_payment = maybe_standard_payment_str
866-
.parse::<bool>()
867-
.map_err(|error| CliError::FailedToParseBool {
859+
let payment_amount =
860+
payment_amount_str
861+
.parse::<u64>()
862+
.map_err(|error| CliError::FailedToParseInt {
863+
context: "payment_amount",
864+
error,
865+
})?;
866+
let standard_payment = standard_payment_str.parse::<bool>().map_err(|error| {
867+
CliError::FailedToParseBool {
868868
context: "standard_payment",
869869
error,
870-
})?;
870+
}
871+
})?;
871872
Ok(PricingMode::Classic {
872873
payment_amount,
873874
gas_price_tolerance,
874875
standard_payment,
875876
})
876877
}
877878
"fixed" => {
878-
if maybe_gas_price_tolerance_str.is_empty() {
879+
if gas_price_tolerance_str.is_empty() {
879880
return Err(CliError::InvalidArgument {
880881
context: "gas_price_tolerance",
881882
error: "Gas price tolerance is required".to_string(),
882883
});
883884
}
884-
let gas_price_tolerance =
885-
maybe_gas_price_tolerance_str
885+
let gas_price_tolerance = gas_price_tolerance_str.parse::<u8>().map_err(|error| {
886+
CliError::FailedToParseInt {
887+
context: "gas_price_tolerance",
888+
error,
889+
}
890+
})?;
891+
892+
// Additional Computation Factor defaults to 0 if the string is empty
893+
let additional_computation_factor = if additional_computation_factor_str.is_empty() {
894+
u8::default()
895+
} else {
896+
additional_computation_factor_str
886897
.parse::<u8>()
887898
.map_err(|error| CliError::FailedToParseInt {
888-
context: "gas_price_tolerance",
899+
context: "additional_computation_factor",
889900
error,
890-
})?;
901+
})?
902+
};
891903
Ok(PricingMode::Fixed {
892904
gas_price_tolerance,
905+
additional_computation_factor,
893906
})
894907
}
895908
"reserved" => {
@@ -1689,32 +1702,63 @@ mod tests {
16891702
let pricing_mode_str = "fixed";
16901703
let payment_amount = "";
16911704
let gas_price_tolerance = "10";
1705+
let additional_computation_factor = "1";
1706+
let standard_payment = "";
1707+
let parsed = pricing_mode(
1708+
pricing_mode_str,
1709+
payment_amount,
1710+
gas_price_tolerance,
1711+
additional_computation_factor,
1712+
standard_payment,
1713+
None,
1714+
)
1715+
.unwrap();
1716+
assert_eq!(
1717+
parsed,
1718+
PricingMode::Fixed {
1719+
additional_computation_factor: 1,
1720+
gas_price_tolerance: 10,
1721+
}
1722+
);
1723+
}
1724+
1725+
#[test]
1726+
fn should_parse_fixed_pricing_mode_identifier_without_additional_computation_factor() {
1727+
let pricing_mode_str = "fixed";
1728+
let payment_amount = "";
1729+
let gas_price_tolerance = "10";
1730+
let additional_computation_factor = "";
16921731
let standard_payment = "";
16931732
let parsed = pricing_mode(
16941733
pricing_mode_str,
16951734
payment_amount,
16961735
gas_price_tolerance,
1736+
additional_computation_factor,
16971737
standard_payment,
16981738
None,
16991739
)
17001740
.unwrap();
17011741
assert_eq!(
17021742
parsed,
17031743
PricingMode::Fixed {
1744+
additional_computation_factor: 0,
17041745
gas_price_tolerance: 10,
17051746
}
17061747
);
17071748
}
1749+
17081750
#[test]
17091751
fn should_parse_reserved_pricing_mode() {
17101752
let pricing_mode_str = "reserved";
17111753
let payment_amount = "";
17121754
let gas_price_tolerance = "";
1755+
let additional_computation_factor = "0";
17131756
let standard_payment = "";
17141757
let parsed = pricing_mode(
17151758
pricing_mode_str,
17161759
payment_amount,
17171760
gas_price_tolerance,
1761+
additional_computation_factor,
17181762
standard_payment,
17191763
Some(Digest::from_hex(VALID_HASH).unwrap()),
17201764
)
@@ -1732,10 +1776,12 @@ mod tests {
17321776
let payment_amount = "10";
17331777
let standard_payment = "true";
17341778
let gas_price_tolerance = "10";
1779+
let additional_computation_factor = "0";
17351780
let parsed = pricing_mode(
17361781
pricing_mode_str,
17371782
payment_amount,
17381783
gas_price_tolerance,
1784+
additional_computation_factor,
17391785
standard_payment,
17401786
None,
17411787
)
@@ -1756,27 +1802,50 @@ mod tests {
17561802
let payment_amount = "10";
17571803
let standard_payment = "true";
17581804
let gas_price_tolerance = "10";
1805+
let additional_computation_factor = "0";
17591806
let parsed = pricing_mode(
17601807
pricing_mode_str,
17611808
payment_amount,
17621809
gas_price_tolerance,
1810+
additional_computation_factor,
17631811
standard_payment,
17641812
None,
17651813
);
17661814
assert!(parsed.is_err());
17671815
assert!(matches!(parsed, Err(CliError::InvalidArgument { .. })));
17681816
}
17691817

1818+
#[test]
1819+
fn should_fail_to_parse_invalid_additional_computation_factor() {
1820+
let pricing_mode_str = "fixed";
1821+
let payment_amount = "10";
1822+
let standard_payment = "true";
1823+
let gas_price_tolerance = "10";
1824+
let additional_computation_factor = "invalid";
1825+
let parsed = pricing_mode(
1826+
pricing_mode_str,
1827+
payment_amount,
1828+
gas_price_tolerance,
1829+
additional_computation_factor,
1830+
standard_payment,
1831+
None,
1832+
);
1833+
assert!(parsed.is_err());
1834+
assert!(matches!(parsed, Err(CliError::FailedToParseInt { .. })));
1835+
}
1836+
17701837
#[test]
17711838
fn should_fail_to_parse_classic_without_amount() {
17721839
let pricing_mode_str = "classic";
17731840
let payment_amount = "";
17741841
let standard_payment = "true";
17751842
let gas_price_tolerance = "10";
1843+
let additional_computation_factor = "0";
17761844
let parsed = pricing_mode(
17771845
pricing_mode_str,
17781846
payment_amount,
17791847
gas_price_tolerance,
1848+
additional_computation_factor,
17801849
standard_payment,
17811850
None,
17821851
);

0 commit comments

Comments
 (0)