From 7a858b033c3a684833e7d5532515339dd2625b92 Mon Sep 17 00:00:00 2001 From: Xun Li Date: Mon, 11 Dec 2023 08:55:18 -0800 Subject: [PATCH] Hardcode intent for transaction messages (#15283) ## Description All transaction messages should have the same intent, which can be hard coded instead of always passing in, which adds possibility for introducing errors and bugs. ## Test Plan CI. All changes are trivial and straightforward. --- If your changes are not user-facing and not a breaking change, you can skip the following section. Otherwise, please indicate what changed, and then add to the Release Notes section as highlighted during the release process. ### Type of Change (Check all that apply) - [ ] protocol change - [ ] user-visible impact - [ ] breaking change for a client SDKs - [ ] breaking change for FNs (FN binary must upgrade) - [ ] breaking change for validators or node operators (must upgrade binaries) - [ ] breaking change for on-chain data layout - [ ] necessitate either a data wipe or data migration ### Release notes --- Cargo.lock | 1 + crates/simulacrum/src/lib.rs | 10 +-- crates/sui-cluster-test/src/lib.rs | 3 +- crates/sui-core/src/test_utils.rs | 1 - crates/sui-faucet/src/bin/merge_coins.rs | 4 +- crates/sui-faucet/src/faucet/simple_faucet.rs | 2 +- crates/sui-graphql-rpc/src/mutation.rs | 4 +- .../src/transaction_execution_api.rs | 2 +- crates/sui-replay/Cargo.toml | 1 + crates/sui-replay/src/replay.rs | 22 +++--- crates/sui-rosetta/src/construction.rs | 1 - .../unit_tests/balance_changing_tx_tests.rs | 2 +- .../src/payload/rpc_command_processor.rs | 2 +- .../examples/programmable_transactions_api.rs | 2 +- crates/sui-sdk/examples/sign_tx_guide.rs | 1 - crates/sui-sdk/examples/tic_tac_toe.rs | 12 +--- crates/sui-sdk/examples/utils.rs | 8 +-- crates/sui-sdk/src/wallet_context.rs | 2 +- .../sui-test-transaction-builder/src/lib.rs | 9 ++- crates/sui-types/src/messages_checkpoint.rs | 9 ++- crates/sui-types/src/transaction.rs | 26 +++---- .../sui-types/src/unit_tests/intent_tests.rs | 2 +- .../src/unit_tests/messages_tests.rs | 70 ++++++------------- crates/sui-types/src/unit_tests/utils.rs | 14 ++-- crates/sui/src/client_commands.rs | 3 +- crates/sui/src/fire_drill.rs | 4 +- crates/sui/src/unit_tests/validator_tests.rs | 2 +- crates/sui/src/validator_commands.rs | 2 +- crates/sui/src/zklogin_commands_util.rs | 2 +- 29 files changed, 81 insertions(+), 142 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a2dd68c26b039..598b87e9c3c51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12591,6 +12591,7 @@ dependencies = [ "serde_json", "serde_with", "serde_yaml 0.8.26", + "shared-crypto", "shellexpand", "similar", "sui-config", diff --git a/crates/simulacrum/src/lib.rs b/crates/simulacrum/src/lib.rs index 6dbc9fd7717ef..5b9f6fce7535a 100644 --- a/crates/simulacrum/src/lib.rs +++ b/crates/simulacrum/src/lib.rs @@ -45,8 +45,6 @@ pub use self::store::in_mem_store::InMemoryStore; use self::store::in_mem_store::KeyStore; pub use self::store::SimulatorStore; use sui_types::mock_checkpoint_builder::{MockCheckpointBuilder, ValidatorKeypairProvider}; - -use shared_crypto::intent::Intent; use sui_types::{ gas_coin::GasCoin, programmable_transaction_builder::ProgrammableTransactionBuilder, @@ -358,11 +356,7 @@ impl Simulacrum { let kind = sui_types::transaction::TransactionKind::ProgrammableTransaction(pt); let tx_data = sui_types::transaction::TransactionData::new_with_gas_data(kind, *sender, gas_data); - let tx = Transaction::from_data_and_signer( - tx_data, - shared_crypto::intent::Intent::sui_transaction(), - vec![key], - ); + let tx = Transaction::from_data_and_signer(tx_data, vec![key]); self.execute_transaction(tx).map(|x| x.0) } @@ -441,7 +435,7 @@ impl Simulacrum { budget: 1_000_000_000, }; let tx_data = TransactionData::new_with_gas_data(kind, sender, gas_data); - let tx = Transaction::from_data_and_signer(tx_data, Intent::sui_transaction(), vec![key]); + let tx = Transaction::from_data_and_signer(tx_data, vec![key]); (tx, transfer_amount) } } diff --git a/crates/sui-cluster-test/src/lib.rs b/crates/sui-cluster-test/src/lib.rs index 03fd8933c5a30..6c299f0d7b8ac 100644 --- a/crates/sui-cluster-test/src/lib.rs +++ b/crates/sui-cluster-test/src/lib.rs @@ -21,7 +21,6 @@ use sui_types::object::Owner; use sui_types::quorum_driver_types::ExecuteTransactionRequestType; use sui_types::sui_system_state::sui_system_state_summary::SuiSystemStateSummary; -use shared_crypto::intent::Intent; use sui_sdk::SuiClient; use sui_types::gas_coin::GasCoin; use sui_types::{ @@ -153,7 +152,7 @@ impl TestContext { .get_fullnode_client() .quorum_driver_api() .execute_transaction_block( - Transaction::from_data(txn_data, Intent::sui_transaction(), vec![signature]), + Transaction::from_data(txn_data, vec![signature]), SuiTransactionBlockResponseOptions::new() .with_object_changes() .with_balance_changes() diff --git a/crates/sui-core/src/test_utils.rs b/crates/sui-core/src/test_utils.rs index 4a37323187d3e..3d19dfbd5f814 100644 --- a/crates/sui-core/src/test_utils.rs +++ b/crates/sui-core/src/test_utils.rs @@ -433,7 +433,6 @@ pub fn make_dummy_tx( TEST_ONLY_GAS_UNIT_FOR_TRANSFER * 10, 10, ), - Intent::sui_transaction(), vec![sender_sec], ) } diff --git a/crates/sui-faucet/src/bin/merge_coins.rs b/crates/sui-faucet/src/bin/merge_coins.rs index b70bc69be9835..0b350f84ad046 100644 --- a/crates/sui-faucet/src/bin/merge_coins.rs +++ b/crates/sui-faucet/src/bin/merge_coins.rs @@ -56,7 +56,7 @@ async fn _split_coins_equally( .keystore .sign_secure(&active_address, &tx_data, Intent::sui_transaction()) .unwrap(); - let tx = Transaction::from_data(tx_data, Intent::sui_transaction(), vec![signature]); + let tx = Transaction::from_data(tx_data, vec![signature]); let resp = client .quorum_driver_api() .execute_transaction_block( @@ -110,7 +110,7 @@ async fn _merge_coins(gas_coin: &str, mut wallet: WalletContext) -> Result<(), a .keystore .sign_secure(&active_address, &tx_data, Intent::sui_transaction()) .unwrap(); - let tx = Transaction::from_data(tx_data, Intent::sui_transaction(), vec![signature]); + let tx = Transaction::from_data(tx_data, vec![signature]); client .quorum_driver_api() .execute_transaction_block( diff --git a/crates/sui-faucet/src/faucet/simple_faucet.rs b/crates/sui-faucet/src/faucet/simple_faucet.rs index 5c5b142f9f89f..72d6687a63c70 100644 --- a/crates/sui-faucet/src/faucet/simple_faucet.rs +++ b/crates/sui-faucet/src/faucet/simple_faucet.rs @@ -420,7 +420,7 @@ impl SimpleFaucet { .keystore .sign_secure(&self.active_address, &tx_data, Intent::sui_transaction()) .map_err(FaucetError::internal)?; - let tx = Transaction::from_data(tx_data, Intent::sui_transaction(), vec![signature]); + let tx = Transaction::from_data(tx_data, vec![signature]); let tx_digest = *tx.digest(); info!( ?tx_digest, diff --git a/crates/sui-graphql-rpc/src/mutation.rs b/crates/sui-graphql-rpc/src/mutation.rs index 0d0f8db946a2a..7f7f43b764be5 100644 --- a/crates/sui-graphql-rpc/src/mutation.rs +++ b/crates/sui-graphql-rpc/src/mutation.rs @@ -5,7 +5,6 @@ use crate::{error::Error, types::execution_result::ExecutionResult}; use async_graphql::*; use fastcrypto::encoding::Encoding; use fastcrypto::{encoding::Base64, traits::ToFromBytes}; -use shared_crypto::intent::Intent; use sui_json_rpc_types::SuiTransactionBlockResponseOptions; use sui_sdk::SuiClient; use sui_types::quorum_driver_types::ExecuteTransactionRequestType; @@ -71,8 +70,7 @@ impl Mutation { .extend()?, ); } - let transaction = - Transaction::from_generic_sig_data(tx_data, Intent::sui_transaction(), sigs); + let transaction = Transaction::from_generic_sig_data(tx_data, sigs); let result = sui_sdk_client .quorum_driver_api() diff --git a/crates/sui-json-rpc/src/transaction_execution_api.rs b/crates/sui-json-rpc/src/transaction_execution_api.rs index 68e2d1c594004..64ac0f61df64b 100644 --- a/crates/sui-json-rpc/src/transaction_execution_api.rs +++ b/crates/sui-json-rpc/src/transaction_execution_api.rs @@ -104,7 +104,7 @@ impl TransactionExecutionApi { for sig in signatures { sigs.push(GenericSignature::from_bytes(&sig.to_vec()?)?); } - let txn = Transaction::from_generic_sig_data(tx_data, Intent::sui_transaction(), sigs); + let txn = Transaction::from_generic_sig_data(tx_data, sigs); let raw_transaction = if opts.show_raw_input { bcs::to_bytes(txn.data())? } else { diff --git a/crates/sui-replay/Cargo.toml b/crates/sui-replay/Cargo.toml index e6daffd63f8bc..f9d21cc07e206 100644 --- a/crates/sui-replay/Cargo.toml +++ b/crates/sui-replay/Cargo.toml @@ -34,6 +34,7 @@ move-bytecode-utils.workspace = true move-core-types.workspace = true tokio.workspace = true +shared-crypto.workspace = true sui-config.workspace = true sui-core.workspace = true sui-execution.workspace = true diff --git a/crates/sui-replay/src/replay.rs b/crates/sui-replay/src/replay.rs index 183561021a407..4752ea7fcb026 100644 --- a/crates/sui-replay/src/replay.rs +++ b/crates/sui-replay/src/replay.rs @@ -19,6 +19,7 @@ use move_core_types::{ }; use prometheus::Registry; use serde::{Deserialize, Serialize}; +use shared_crypto::intent::Intent; use similar::{ChangeTag, TextDiff}; use std::{ collections::{BTreeMap, HashSet}, @@ -828,12 +829,14 @@ impl LocalExec { let required_objects = pre_run_sandbox.required_objects.clone(); let shared_object_refs = pre_run_sandbox.transaction_info.shared_object_refs.clone(); - let transaction_intent = pre_run_sandbox - .transaction_info - .sender_signed_data - .intent_message() - .intent - .clone(); + assert_eq!( + pre_run_sandbox + .transaction_info + .sender_signed_data + .intent_message() + .intent, + Intent::sui_transaction() + ); let transaction_signatures = pre_run_sandbox .transaction_info .sender_signed_data @@ -859,11 +862,8 @@ impl LocalExec { ) .await; - let sender_signed_tx = Transaction::from_generic_sig_data( - transaction_data, - transaction_intent, - transaction_signatures, - ); + let sender_signed_tx = + Transaction::from_generic_sig_data(transaction_data, transaction_signatures); let sender_signed_tx = VerifiedTransaction::new_unchecked( VerifiedTransaction::new_unchecked(sender_signed_tx).into(), ); diff --git a/crates/sui-rosetta/src/construction.rs b/crates/sui-rosetta/src/construction.rs index f4015795721b6..4db49217526f2 100644 --- a/crates/sui-rosetta/src/construction.rs +++ b/crates/sui-rosetta/src/construction.rs @@ -107,7 +107,6 @@ pub async fn combine( let signed_tx = Transaction::from_generic_sig_data( intent_msg.value, - Intent::sui_transaction(), vec![GenericSignature::from_bytes( &[&*flag, &*sig_bytes, &*pub_key].concat(), )?], diff --git a/crates/sui-rosetta/src/unit_tests/balance_changing_tx_tests.rs b/crates/sui-rosetta/src/unit_tests/balance_changing_tx_tests.rs index 96544ea411483..27b7d3bb43f4b 100644 --- a/crates/sui-rosetta/src/unit_tests/balance_changing_tx_tests.rs +++ b/crates/sui-rosetta/src/unit_tests/balance_changing_tx_tests.rs @@ -716,7 +716,7 @@ async fn test_transaction( let response = client .quorum_driver_api() .execute_transaction_block( - Transaction::from_data(data.clone(), Intent::sui_transaction(), vec![signature]), + Transaction::from_data(data.clone(), vec![signature]), SuiTransactionBlockResponseOptions::full_content(), Some(ExecuteTransactionRequestType::WaitForLocalExecution), ) diff --git a/crates/sui-rpc-loadgen/src/payload/rpc_command_processor.rs b/crates/sui-rpc-loadgen/src/payload/rpc_command_processor.rs index 2efa609d1030e..49f629a887d76 100644 --- a/crates/sui-rpc-loadgen/src/payload/rpc_command_processor.rs +++ b/crates/sui-rpc-loadgen/src/payload/rpc_command_processor.rs @@ -778,7 +778,7 @@ pub(crate) async fn sign_and_execute( let transaction_response = match client .quorum_driver_api() .execute_transaction_block( - Transaction::from_data(txn_data, Intent::sui_transaction(), vec![signature]), + Transaction::from_data(txn_data, vec![signature]), SuiTransactionBlockResponseOptions::new().with_effects(), Some(request_type), ) diff --git a/crates/sui-sdk/examples/programmable_transactions_api.rs b/crates/sui-sdk/examples/programmable_transactions_api.rs index d3509243530b7..fba987408030c 100644 --- a/crates/sui-sdk/examples/programmable_transactions_api.rs +++ b/crates/sui-sdk/examples/programmable_transactions_api.rs @@ -83,7 +83,7 @@ async fn main() -> Result<(), anyhow::Error> { let transaction_response = sui .quorum_driver_api() .execute_transaction_block( - Transaction::from_data(tx_data, Intent::sui_transaction(), vec![signature]), + Transaction::from_data(tx_data, vec![signature]), SuiTransactionBlockResponseOptions::full_content(), Some(ExecuteTransactionRequestType::WaitForLocalExecution), ) diff --git a/crates/sui-sdk/examples/sign_tx_guide.rs b/crates/sui-sdk/examples/sign_tx_guide.rs index 1b608c50c570f..4666ccb7e9bd0 100644 --- a/crates/sui-sdk/examples/sign_tx_guide.rs +++ b/crates/sui-sdk/examples/sign_tx_guide.rs @@ -140,7 +140,6 @@ async fn main() -> Result<(), anyhow::Error> { .execute_transaction_block( sui_types::transaction::Transaction::from_generic_sig_data( intent_msg.value, - Intent::sui_transaction(), vec![GenericSignature::Signature(sui_sig)], ), SuiTransactionBlockResponseOptions::default(), diff --git a/crates/sui-sdk/examples/tic_tac_toe.rs b/crates/sui-sdk/examples/tic_tac_toe.rs index 304305b45ca46..69cf4c78c5c8c 100644 --- a/crates/sui-sdk/examples/tic_tac_toe.rs +++ b/crates/sui-sdk/examples/tic_tac_toe.rs @@ -103,11 +103,7 @@ impl TicTacToe { .client .quorum_driver_api() .execute_transaction_block( - Transaction::from_data( - create_game_call, - Intent::sui_transaction(), - vec![signature], - ), + Transaction::from_data(create_game_call, vec![signature]), SuiTransactionBlockResponseOptions::full_content(), Some(ExecuteTransactionRequestType::WaitForLocalExecution), ) @@ -207,11 +203,7 @@ impl TicTacToe { .client .quorum_driver_api() .execute_transaction_block( - Transaction::from_data( - place_mark_call, - Intent::sui_transaction(), - vec![signature], - ), + Transaction::from_data(place_mark_call, vec![signature]), SuiTransactionBlockResponseOptions::new().with_effects(), Some(ExecuteTransactionRequestType::WaitForLocalExecution), ) diff --git a/crates/sui-sdk/examples/utils.rs b/crates/sui-sdk/examples/utils.rs index 2a8657e6a5d89..406d107aba79f 100644 --- a/crates/sui-sdk/examples/utils.rs +++ b/crates/sui-sdk/examples/utils.rs @@ -48,7 +48,7 @@ pub const SUI_FAUCET: &str = "https://faucet.testnet.sui.io/v1/gas"; // testnet /// /// By default, this function will set up a wallet locally if there isn't any, or reuse the /// existing one and its active address. This function should be used when two addresses are needed, -/// e.g., transfering objects from one address to another. +/// e.g., transferring objects from one address to another. pub async fn setup_for_write() -> Result<(SuiClient, SuiAddress, SuiAddress), anyhow::Error> { let (client, active_address) = setup_for_read().await?; // make sure we have some SUI (5_000_000 MIST) on this address @@ -130,7 +130,7 @@ pub async fn request_tokens_from_faucet( let mut coin_id = "".to_string(); - // wait for the faucet to finsh the batch of token requests + // wait for the faucet to finish the batch of token requests loop { let resp = client .get("https://faucet.testnet.sui.io/v1/status") @@ -222,7 +222,7 @@ pub async fn split_coin_digest( // get the reference gas price from the network let gas_price = sui.read_api().get_reference_gas_price().await?; - // now we programatically build the transaction through several commands + // now we programmatically build the transaction through several commands let mut ptb = ProgrammableTransactionBuilder::new(); // first, we want to split the coin, and we specify how much SUI (in MIST) we want // for the new coin @@ -259,7 +259,7 @@ pub async fn split_coin_digest( let transaction_response = sui .quorum_driver_api() .execute_transaction_block( - Transaction::from_data(tx_data, Intent::sui_transaction(), vec![signature]), + Transaction::from_data(tx_data, vec![signature]), SuiTransactionBlockResponseOptions::new(), Some(ExecuteTransactionRequestType::WaitForLocalExecution), ) diff --git a/crates/sui-sdk/src/wallet_context.rs b/crates/sui-sdk/src/wallet_context.rs index 9370057106976..adb01d1a1180d 100644 --- a/crates/sui-sdk/src/wallet_context.rs +++ b/crates/sui-sdk/src/wallet_context.rs @@ -286,7 +286,7 @@ impl WalletContext { .sign_secure(&data.sender(), data, Intent::sui_transaction()) .unwrap(); // TODO: To support sponsored transaction, we should also look at the gas owner. - Transaction::from_data(data.clone(), Intent::sui_transaction(), vec![sig]) + Transaction::from_data(data.clone(), vec![sig]) } /// Execute a transaction and wait for it to be locally executed on the fullnode. diff --git a/crates/sui-test-transaction-builder/src/lib.rs b/crates/sui-test-transaction-builder/src/lib.rs index 1ad72f2384e61..d287b3621c4d0 100644 --- a/crates/sui-test-transaction-builder/src/lib.rs +++ b/crates/sui-test-transaction-builder/src/lib.rs @@ -324,7 +324,7 @@ impl TestTransactionBuilder { } pub fn build_and_sign(self, signer: &dyn Signer) -> Transaction { - Transaction::from_data_and_signer(self.build(), Intent::sui_transaction(), vec![signer]) + Transaction::from_data_and_signer(self.build(), vec![signer]) } pub fn build_and_sign_multisig( @@ -333,8 +333,7 @@ impl TestTransactionBuilder { signers: &[&dyn Signer], ) -> Transaction { let data = self.build(); - let intent = Intent::sui_transaction(); - let intent_msg = IntentMessage::new(intent.clone(), data.clone()); + let intent_msg = IntentMessage::new(Intent::sui_transaction(), data.clone()); let mut signatures = Vec::with_capacity(signers.len()); for signer in signers { @@ -344,7 +343,7 @@ impl TestTransactionBuilder { let multisig = GenericSignature::MultiSig(MultiSig::combine(signatures, multisig_pk).unwrap()); - Transaction::from_generic_sig_data(data, intent, vec![multisig]) + Transaction::from_generic_sig_data(data, vec![multisig]) } pub fn build_and_sign_multisig_legacy( @@ -365,7 +364,7 @@ impl TestTransactionBuilder { MultiSigLegacy::combine(signatures, multisig_pk).unwrap(), ); - Transaction::from_generic_sig_data(data, intent, vec![multisig]) + Transaction::from_generic_sig_data(data, vec![multisig]) } } diff --git a/crates/sui-types/src/messages_checkpoint.rs b/crates/sui-types/src/messages_checkpoint.rs index cf2378c05b328..72da7c44e6618 100644 --- a/crates/sui-types/src/messages_checkpoint.rs +++ b/crates/sui-types/src/messages_checkpoint.rs @@ -30,7 +30,7 @@ use once_cell::sync::OnceCell; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use serde_with::serde_as; -use shared_crypto::intent::{Intent, IntentScope}; +use shared_crypto::intent::IntentScope; use std::fmt::{Debug, Display, Formatter}; use std::slice::Iter; use std::time::{Duration, SystemTime, UNIX_EPOCH}; @@ -571,7 +571,6 @@ impl FullCheckpointContents { 100000000000, 100, ), - Intent::sui_transaction(), vec![&key], ); let effects = TransactionEffects::new_with_tx(&transaction); @@ -801,8 +800,8 @@ mod tests { // Tests that ConsensusCommitPrologue with different consensus commit digest will result in different checkpoint content. #[test] - fn test_checkpoing_summary_with_different_consensus_digest() { - // First, tests that same consensus commit digest will procude the same checkpoint content. + fn test_checkpoint_summary_with_different_consensus_digest() { + // First, tests that same consensus commit digest will produce the same checkpoint content. { let t1 = VerifiedTransaction::new_consensus_commit_prologue_v2( 1, @@ -821,7 +820,7 @@ mod tests { assert_eq!(c1.digest(), c2.digest()); } - // Next, tests that different consensus commit digests will procude the different checkpoint contents. + // Next, tests that different consensus commit digests will produce the different checkpoint contents. { let t1 = VerifiedTransaction::new_consensus_commit_prologue_v2( 1, diff --git a/crates/sui-types/src/transaction.rs b/crates/sui-types/src/transaction.rs index fd4cfeca321d4..2a8aaecaf8e81 100644 --- a/crates/sui-types/src/transaction.rs +++ b/crates/sui-types/src/transaction.rs @@ -2317,24 +2317,20 @@ impl Envelope { impl Transaction { pub fn from_data_and_signer( data: TransactionData, - intent: Intent, signers: Vec<&dyn Signer>, ) -> Self { - let intent_msg = IntentMessage::new(intent.clone(), data.clone()); + // TODO: Avoid clone of data. This can be done by adjusting the API around tx construction. + let intent_msg = IntentMessage::new(Intent::sui_transaction(), data.clone()); let mut signatures = Vec::with_capacity(signers.len()); for signer in signers { signatures.push(Signature::new_secure(&intent_msg, signer)); } - Self::from_data(data, intent, signatures) + Self::from_data(data, signatures) } // TODO: Rename this function and above to make it clearer. - pub fn from_data(data: TransactionData, intent: Intent, signatures: Vec) -> Self { - Self::from_generic_sig_data( - data, - intent, - signatures.into_iter().map(|s| s.into()).collect(), - ) + pub fn from_data(data: TransactionData, signatures: Vec) -> Self { + Self::from_generic_sig_data(data, signatures.into_iter().map(|s| s.into()).collect()) } pub fn signature_from_signer( @@ -2346,12 +2342,12 @@ impl Transaction { Signature::new_secure(&intent_msg, signer) } - pub fn from_generic_sig_data( - data: TransactionData, - intent: Intent, - signatures: Vec, - ) -> Self { - Self::new(SenderSignedData::new(data, intent, signatures)) + pub fn from_generic_sig_data(data: TransactionData, signatures: Vec) -> Self { + Self::new(SenderSignedData::new( + data, + Intent::sui_transaction(), + signatures, + )) } /// Returns the Base64 encoded tx_bytes diff --git a/crates/sui-types/src/unit_tests/intent_tests.rs b/crates/sui-types/src/unit_tests/intent_tests.rs index 01a294e8b36f6..811bb55fa4d0d 100644 --- a/crates/sui-types/src/unit_tests/intent_tests.rs +++ b/crates/sui-types/src/unit_tests/intent_tests.rs @@ -78,7 +78,7 @@ fn test_authority_signature_intent() { &IntentMessage::new(Intent::sui_transaction(), data.clone()), &sender_key, ); - let tx = Transaction::from_data(data, Intent::sui_transaction(), vec![signature]); + let tx = Transaction::from_data(data, vec![signature]); let tx1 = tx.clone(); assert!(tx.verify(&Default::default()).is_ok()); diff --git a/crates/sui-types/src/unit_tests/messages_tests.rs b/crates/sui-types/src/unit_tests/messages_tests.rs index 427a6db34a8f8..856bd20d27a61 100644 --- a/crates/sui-types/src/unit_tests/messages_tests.rs +++ b/crates/sui-types/src/unit_tests/messages_tests.rs @@ -57,7 +57,6 @@ fn test_signed_values() { TEST_ONLY_GAS_UNIT_FOR_TRANSFER * gas_price, gas_price, ), - Intent::sui_transaction(), vec![&sender_sec], ) .verify(&Default::default()) @@ -72,7 +71,6 @@ fn test_signed_values() { TEST_ONLY_GAS_UNIT_FOR_TRANSFER * gas_price, gas_price, ), - Intent::sui_transaction(), vec![&sender_sec2], )); @@ -144,7 +142,6 @@ fn test_certificates() { TEST_ONLY_GAS_UNIT_FOR_TRANSFER * gas_price, gas_price, ), - Intent::sui_transaction(), vec![&sender_sec], ) .verify(&Default::default()) @@ -481,7 +478,6 @@ fn test_digest_caching() { TEST_ONLY_GAS_UNIT_FOR_TRANSFER * gas_price, gas_price, ), - Intent::sui_transaction(), vec![&ssec2], ) .verify(&Default::default()) @@ -565,15 +561,9 @@ fn test_user_signature_committed_in_transactions() { let mut tx_data_2 = tx_data.clone(); tx_data_2.gas_data_mut().budget += 1; - let transaction_a = Transaction::from_data_and_signer( - tx_data.clone(), - Intent::sui_transaction(), - vec![&sender_sec], - ); - let transaction_b = - Transaction::from_data_and_signer(tx_data, Intent::sui_transaction(), vec![&sender_sec2]); - let transaction_c = - Transaction::from_data_and_signer(tx_data_2, Intent::sui_transaction(), vec![&sender_sec2]); + let transaction_a = Transaction::from_data_and_signer(tx_data.clone(), vec![&sender_sec]); + let transaction_b = Transaction::from_data_and_signer(tx_data, vec![&sender_sec2]); + let transaction_c = Transaction::from_data_and_signer(tx_data_2, vec![&sender_sec2]); let tx_digest_a = transaction_a.digest(); let tx_digest_b = transaction_b.digest(); @@ -615,17 +605,12 @@ fn test_user_signature_committed_in_signed_transactions() { TEST_ONLY_GAS_UNIT_FOR_TRANSFER * gas_price, gas_price, ); - let transaction_a = Transaction::from_data_and_signer( - tx_data.clone(), - Intent::sui_transaction(), - vec![&sender_sec], - ) - .verify(&Default::default()) - .unwrap(); + let transaction_a = Transaction::from_data_and_signer(tx_data.clone(), vec![&sender_sec]) + .verify(&Default::default()) + .unwrap(); // transaction_b intentionally invalid (sender does not match signer). let transaction_b = VerifiedTransaction::new_unchecked(Transaction::from_data_and_signer( tx_data, - Intent::sui_transaction(), vec![&sender_sec2], )); @@ -720,7 +705,6 @@ fn test_sponsored_transaction_message() { signature_from_signer(tx_data.clone(), intent.clone(), &sponsor_kp).into(); let transaction = Transaction::from_generic_sig_data( tx_data.clone(), - intent.clone(), vec![sender_sig.clone(), sponsor_sig.clone()], ) .verify(&Default::default()) @@ -737,7 +721,6 @@ fn test_sponsored_transaction_message() { // Sig order does not matter let transaction = Transaction::from_generic_sig_data( tx_data.clone(), - intent.clone(), vec![sponsor_sig.clone(), sender_sig.clone()], ) .verify(&Default::default()) @@ -745,25 +728,17 @@ fn test_sponsored_transaction_message() { // Test incomplete signature lists (missing sponsor sig) assert!(matches!( - Transaction::from_generic_sig_data( - tx_data.clone(), - intent.clone(), - vec![sender_sig.clone()], - ) - .verify(&Default::default()) - .unwrap_err(), + Transaction::from_generic_sig_data(tx_data.clone(), vec![sender_sig.clone()],) + .verify(&Default::default()) + .unwrap_err(), SuiError::SignerSignatureNumberMismatch { .. } )); // Test incomplete signature lists (missing sender sig) assert!(matches!( - Transaction::from_generic_sig_data( - tx_data.clone(), - intent.clone(), - vec![sponsor_sig.clone()], - ) - .verify(&Default::default()) - .unwrap_err(), + Transaction::from_generic_sig_data(tx_data.clone(), vec![sponsor_sig.clone()],) + .verify(&Default::default()) + .unwrap_err(), SuiError::SignerSignatureNumberMismatch { .. } )); @@ -774,7 +749,6 @@ fn test_sponsored_transaction_message() { assert!(matches!( Transaction::from_generic_sig_data( tx_data.clone(), - intent.clone(), vec![sender_sig, sponsor_sig.clone(), third_party_sig.clone()], ) .verify(&Default::default()) @@ -784,7 +758,7 @@ fn test_sponsored_transaction_message() { // Test irrelevant sigs assert!(matches!( - Transaction::from_generic_sig_data(tx_data, intent, vec![sponsor_sig, third_party_sig],) + Transaction::from_generic_sig_data(tx_data, vec![sponsor_sig, third_party_sig],) .verify(&Default::default()) .unwrap_err(), SuiError::SignerSignatureAbsent { .. } @@ -946,10 +920,9 @@ fn verify_sender_signature_correctly_with_flag() { *tx_data_3.sender_mut_for_testing() = (&sender_kp_3.public()).into(); tx_data_3.gas_data_mut().owner = tx_data_3.sender(); - let transaction = - Transaction::from_data_and_signer(tx_data, Intent::sui_transaction(), vec![&sender_kp]) - .verify(&Default::default()) - .unwrap(); + let transaction = Transaction::from_data_and_signer(tx_data, vec![&sender_kp]) + .verify(&Default::default()) + .unwrap(); // create tx also signed by authority let signed_tx = SignedTransaction::new( @@ -976,10 +949,9 @@ fn verify_sender_signature_correctly_with_flag() { ) .is_ok()); - let transaction_1 = - Transaction::from_data_and_signer(tx_data_2, Intent::sui_transaction(), vec![&sender_kp_2]) - .verify(&Default::default()) - .unwrap(); + let transaction_1 = Transaction::from_data_and_signer(tx_data_2, vec![&sender_kp_2]) + .verify(&Default::default()) + .unwrap(); let signed_tx_1 = SignedTransaction::new( committee.epoch(), @@ -1015,8 +987,7 @@ fn verify_sender_signature_correctly_with_flag() { .is_err()); // create transaction with r1 signer - let tx_3 = - Transaction::from_data_and_signer(tx_data_3, Intent::sui_transaction(), vec![&sender_kp_3]); + let tx_3 = Transaction::from_data_and_signer(tx_data_3, vec![&sender_kp_3]); let tx_31 = tx_3.clone(); let tx_32 = tx_3.clone(); @@ -1306,7 +1277,6 @@ fn test_certificate_digest() { TEST_ONLY_GAS_UNIT_FOR_TRANSFER * gas_price, gas_price, ), - Intent::sui_transaction(), vec![&sender_sec], ) .verify(&Default::default()) diff --git a/crates/sui-types/src/unit_tests/utils.rs b/crates/sui-types/src/unit_tests/utils.rs index a291335c80ae1..0803ce76b84d7 100644 --- a/crates/sui-types/src/unit_tests/utils.rs +++ b/crates/sui-types/src/unit_tests/utils.rs @@ -109,9 +109,9 @@ pub fn make_transaction_data(sender: SuiAddress) -> TransactionData { /// Make a user signed transaction with the given sender and its keypair. This /// is not verified or signed by authority. -pub fn make_transaction(sender: SuiAddress, kp: &SuiKeyPair, intent: Intent) -> Transaction { +pub fn make_transaction(sender: SuiAddress, kp: &SuiKeyPair) -> Transaction { let data = make_transaction_data(sender); - Transaction::from_data_and_signer(data, intent, vec![kp]) + Transaction::from_data_and_signer(data, vec![kp]) } // This is used to sign transaction with signer using default Intent. @@ -126,7 +126,7 @@ pub fn to_sender_signed_transaction_with_multi_signers( data: TransactionData, signers: Vec<&dyn Signer>, ) -> Transaction { - Transaction::from_data_and_signer(data, Intent::sui_transaction(), signers) + Transaction::from_data_and_signer(data, signers) } pub fn mock_certified_checkpoint<'a>( @@ -248,11 +248,7 @@ mod zk_login { proof: ZkLoginInputs, data: TransactionData, ) -> (SuiAddress, Transaction, GenericSignature) { - let tx = Transaction::from_data_and_signer( - data.clone(), - Intent::sui_transaction(), - vec![user_key], - ); + let tx = Transaction::from_data_and_signer(data.clone(), vec![user_key]); let s = match tx.inner().tx_signatures.first().unwrap() { GenericSignature::Signature(s) => s, @@ -300,7 +296,7 @@ mod zk_login { ) .unwrap(); let addr = SuiAddress::from(&multisig_pk); - let tx = make_transaction(addr, &keys[0], Intent::sui_transaction()); + let tx = make_transaction(addr, &keys[0]); let msg = IntentMessage::new(Intent::sui_transaction(), tx.transaction_data().clone()); let sig1 = Signature::new_secure(&msg, &keys[0]).into(); diff --git a/crates/sui/src/client_commands.rs b/crates/sui/src/client_commands.rs index 6c27c8f43e784..b439b51bc6a97 100644 --- a/crates/sui/src/client_commands.rs +++ b/crates/sui/src/client_commands.rs @@ -1281,8 +1281,7 @@ impl SuiClientCommands { .map_err(|e| anyhow!(e))?, ); } - let transaction = - Transaction::from_generic_sig_data(data, Intent::sui_transaction(), sigs); + let transaction = Transaction::from_generic_sig_data(data, sigs); let response = context.execute_transaction_may_fail(transaction).await?; SuiClientCommandResult::ExecuteSignedTx(response) diff --git a/crates/sui/src/fire_drill.rs b/crates/sui/src/fire_drill.rs index 03638c58de4a9..e8bdd550a7233 100644 --- a/crates/sui/src/fire_drill.rs +++ b/crates/sui/src/fire_drill.rs @@ -16,7 +16,6 @@ use clap::*; use fastcrypto::ed25519::Ed25519KeyPair; use fastcrypto::traits::{KeyPair, ToFromBytes}; use move_core_types::ident_str; -use shared_crypto::intent::Intent; use std::path::{Path, PathBuf}; use sui_config::node::{AuthorityKeyPairWithPath, KeyPairWithPath}; use sui_config::{local_ip_utils, Config, NodeConfig, PersistedConfig}; @@ -337,8 +336,7 @@ async fn execute_tx( tx_data: TransactionData, action: &str, ) -> anyhow::Result<()> { - let tx = - Transaction::from_data_and_signer(tx_data, Intent::sui_transaction(), vec![account_key]); + let tx = Transaction::from_data_and_signer(tx_data, vec![account_key]); info!("Executing {:?}", tx.digest()); let tx_digest = *tx.digest(); let resp = sui_client diff --git a/crates/sui/src/unit_tests/validator_tests.rs b/crates/sui/src/unit_tests/validator_tests.rs index f054f5a78a926..62387ea91f683 100644 --- a/crates/sui/src/unit_tests/validator_tests.rs +++ b/crates/sui/src/unit_tests/validator_tests.rs @@ -55,7 +55,7 @@ async fn test_print_raw_rgp_txn() -> Result<(), anyhow::Error> { &IntentMessage::new(Intent::sui_transaction(), deserialized_data), keypair, ); - let txn = Transaction::from_data(data, Intent::sui_transaction(), vec![signature]); + let txn = Transaction::from_data(data, vec![signature]); context.execute_transaction_must_succeed(txn).await; let (_, summary) = get_validator_summary(&sui_client, validator_address) .await? diff --git a/crates/sui/src/validator_commands.rs b/crates/sui/src/validator_commands.rs index 1e7ef2df98587..624bba3bb17f4 100644 --- a/crates/sui/src/validator_commands.rs +++ b/crates/sui/src/validator_commands.rs @@ -637,7 +637,7 @@ async fn call_0x5( .config .keystore .sign_secure(&sender, &tx_data, Intent::sui_transaction())?; - let transaction = Transaction::from_data(tx_data, Intent::sui_transaction(), vec![signature]); + let transaction = Transaction::from_data(tx_data, vec![signature]); let sui_client = context.get_client().await?; sui_client .quorum_driver_api() diff --git a/crates/sui/src/zklogin_commands_util.rs b/crates/sui/src/zklogin_commands_util.rs index 6b97afd95579f..f3c34eeb14b0b 100644 --- a/crates/sui/src/zklogin_commands_util.rs +++ b/crates/sui/src/zklogin_commands_util.rs @@ -183,7 +183,7 @@ pub async fn perform_zk_login_test_tx( let transaction_response = sui .quorum_driver_api() .execute_transaction_block( - Transaction::from_generic_sig_data(txb_res, Intent::sui_transaction(), vec![multisig]), + Transaction::from_generic_sig_data(txb_res, vec![multisig]), SuiTransactionBlockResponseOptions::full_content(), None, )