From 6b638fc7698d558464175b1ce5fcc41375453fb6 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 14 Feb 2024 16:23:48 +0200 Subject: [PATCH 1/3] Add input field to CallRequest --- core/lib/types/src/transaction_request.rs | 12 +++++++++++- core/lib/zksync_core/src/api_server/web3/tests/vm.rs | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/core/lib/types/src/transaction_request.rs b/core/lib/types/src/transaction_request.rs index f42a74bd2c5a..9861ef6bcbb5 100644 --- a/core/lib/types/src/transaction_request.rs +++ b/core/lib/types/src/transaction_request.rs @@ -50,6 +50,9 @@ pub struct CallRequest { /// Data (None for empty data) #[serde(default, skip_serializing_if = "Option::is_none")] pub data: Option, + /// Input (None for empty) + #[serde(default, skip_serializing_if = "Option::is_none")] + pub input: Option, /// Nonce #[serde(default, skip_serializing_if = "Option::is_none")] pub nonce: Option, @@ -123,6 +126,11 @@ impl CallRequestBuilder { self } + pub fn input(mut self, input: Bytes) -> Self { + self.call_request.input = Some(input); + self + } + /// Set transaction type, Some(1) for AccessList transaction, None for Legacy pub fn transaction_type(mut self, transaction_type: U64) -> Self { self.call_request.transaction_type = Some(transaction_type); @@ -869,7 +877,7 @@ impl From for TransactionRequest { value: call_request.value.unwrap_or_default(), gas_price: call_request.gas_price.unwrap_or_default(), gas: call_request.gas.unwrap_or_default(), - input: call_request.data.unwrap_or_default(), + input: call_request.data.or(call_request.input).unwrap_or_default(), transaction_type: call_request.transaction_type, access_list: call_request.access_list, eip712_meta: call_request.eip712_meta, @@ -1457,6 +1465,7 @@ mod tests { max_priority_fee_per_gas: Some(U256::from(12u32)), value: Some(U256::from(12u32)), data: Some(Bytes(factory_dep)), + input: None, nonce: None, transaction_type: Some(U64::from(EIP_712_TX_TYPE)), access_list: None, @@ -1483,6 +1492,7 @@ mod tests { max_priority_fee_per_gas: Some(U256::from(12u32)), value: Some(U256::from(12u32)), data: Some(Bytes(vec![1, 2, 3])), + input: None, nonce: Some(U256::from(123u32)), transaction_type: Some(U64::from(EIP_712_TX_TYPE)), access_list: None, diff --git a/core/lib/zksync_core/src/api_server/web3/tests/vm.rs b/core/lib/zksync_core/src/api_server/web3/tests/vm.rs index f8afa306e785..1bdb008cdc83 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/vm.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/vm.rs @@ -262,7 +262,10 @@ impl TraceCallTest { assert_eq!(call_result.from, Address::zero()); assert_eq!(call_result.gas, call_request.gas.unwrap()); assert_eq!(call_result.value, call_request.value.unwrap()); - assert_eq!(call_result.input, *call_request.data.as_ref().unwrap()); + assert_eq!( + call_result.input, + call_request.data.or(call_request.clone().input).unwrap() + ); assert_eq!(call_result.output.0, b"output"); } } From 08dbe69e8315e5246eab0e9d3475611ff5cd8890 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:14:09 +0200 Subject: [PATCH 2/3] use input as priority field --- core/lib/types/src/transaction_request.rs | 2 +- core/lib/zksync_core/src/api_server/web3/tests/vm.rs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/lib/types/src/transaction_request.rs b/core/lib/types/src/transaction_request.rs index 9861ef6bcbb5..6c20dddaf33e 100644 --- a/core/lib/types/src/transaction_request.rs +++ b/core/lib/types/src/transaction_request.rs @@ -877,7 +877,7 @@ impl From for TransactionRequest { value: call_request.value.unwrap_or_default(), gas_price: call_request.gas_price.unwrap_or_default(), gas: call_request.gas.unwrap_or_default(), - input: call_request.data.or(call_request.input).unwrap_or_default(), + input: call_request.input.or(call_request.data).unwrap_or_default(), transaction_type: call_request.transaction_type, access_list: call_request.access_list, eip712_meta: call_request.eip712_meta, diff --git a/core/lib/zksync_core/src/api_server/web3/tests/vm.rs b/core/lib/zksync_core/src/api_server/web3/tests/vm.rs index 1bdb008cdc83..d2832349ae95 100644 --- a/core/lib/zksync_core/src/api_server/web3/tests/vm.rs +++ b/core/lib/zksync_core/src/api_server/web3/tests/vm.rs @@ -264,7 +264,11 @@ impl TraceCallTest { assert_eq!(call_result.value, call_request.value.unwrap()); assert_eq!( call_result.input, - call_request.data.or(call_request.clone().input).unwrap() + call_request + .clone() + .input + .or(call_request.clone().data) + .unwrap() ); assert_eq!(call_result.output.0, b"output"); } From 4fffd707f716820611a34454801d0328b526fa8c Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:37:44 +0200 Subject: [PATCH 3/3] add test for conversion --- core/lib/types/src/transaction_request.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/core/lib/types/src/transaction_request.rs b/core/lib/types/src/transaction_request.rs index 6c20dddaf33e..01123191c097 100644 --- a/core/lib/types/src/transaction_request.rs +++ b/core/lib/types/src/transaction_request.rs @@ -1509,4 +1509,25 @@ mod tests { L2Tx::from_request(call_request_without_nonce.into(), MAX_ENCODED_TX_SIZE).unwrap(); assert_eq!(l2_tx.nonce(), Nonce(0u32)); } + + #[test] + fn test_correct_data_field() { + let mut call_request = CallRequest { + input: Some(Bytes(vec![1, 2, 3])), + data: Some(Bytes(vec![3, 2, 1])), + ..Default::default() + }; + + let tx_request = TransactionRequest::from(call_request.clone()); + assert_eq!(tx_request.input, call_request.input.unwrap()); + + call_request.input = None; + let tx_request = TransactionRequest::from(call_request.clone()); + assert_eq!(tx_request.input, call_request.data.unwrap()); + + call_request.input = Some(Bytes(vec![1, 2, 3])); + call_request.data = None; + let tx_request = TransactionRequest::from(call_request.clone()); + assert_eq!(tx_request.input, call_request.input.unwrap()); + } }