From 1938ece2b7f087064dc1245e0186348b7ac0fb35 Mon Sep 17 00:00:00 2001 From: Anton Paymyshev Date: Wed, 8 Apr 2026 22:08:12 +0700 Subject: [PATCH] Drop signing fields from Eth TxData (#35012) --- .../wallet_notification_service_unittest.cc | 4 +- .../send_or_sign_transaction_browsertest.cc | 2 + ..._button_notification_source_browsertest.cc | 28 +- .../browser/bitcoin/bitcoin_tx_manager.cc | 13 +- .../browser/bitcoin/bitcoin_tx_manager.h | 8 +- .../bitcoin/bitcoin_tx_manager_unittest.cc | 19 +- .../browser/brave_wallet_p3a_unittest.cc | 13 +- .../browser/cardano/cardano_tx_manager.cc | 13 +- .../browser/cardano/cardano_tx_manager.h | 8 +- .../cardano/cardano_tx_manager_unittest.cc | 21 +- .../browser/eip1559_transaction_unittest.cc | 10 +- .../browser/eip2930_transaction_unittest.cc | 38 +-- .../brave_wallet/browser/eth_transaction.cc | 12 +- .../browser/eth_transaction_unittest.cc | 101 ++++-- .../brave_wallet/browser/eth_tx_manager.cc | 94 +++--- .../brave_wallet/browser/eth_tx_manager.h | 50 +-- .../browser/eth_tx_manager_unittest.cc | 311 ++++++++++-------- .../brave_wallet/browser/eth_tx_meta.cc | 3 +- .../browser/eth_tx_meta_unittest.cc | 52 ++- .../browser/eth_tx_state_manager_unittest.cc | 36 +- .../browser/ethereum_keyring_unittest.cc | 16 +- .../browser/ethereum_provider_impl.cc | 33 +- .../brave_wallet/browser/fil_tx_manager.cc | 23 +- .../brave_wallet/browser/fil_tx_manager.h | 29 +- .../browser/fil_tx_manager_unittest.cc | 6 +- .../browser/polkadot/polkadot_tx_manager.cc | 12 - .../browser/polkadot/polkadot_tx_manager.h | 9 - .../polkadot/polkadot_tx_manager_unittest.cc | 26 +- .../simulation_request_helper_unittest.cc | 3 +- .../browser/simulation_service_unittest.cc | 11 +- .../browser/solana_provider_impl.cc | 6 +- .../brave_wallet/browser/solana_tx_manager.cc | 13 +- .../brave_wallet/browser/solana_tx_manager.h | 19 +- .../browser/solana_tx_manager_unittest.cc | 14 +- components/brave_wallet/browser/tx_manager.h | 9 - components/brave_wallet/browser/tx_service.cc | 162 +++++---- components/brave_wallet/browser/tx_service.h | 50 ++- .../browser/zcash/zcash_tx_manager.cc | 13 +- .../browser/zcash/zcash_tx_manager.h | 10 +- .../brave_wallet/common/brave_wallet.mojom | 18 +- .../brave_wallet_ui/common/constants/mocks.ts | 2 - .../slices/endpoints/transaction.endpoints.ts | 39 +-- .../mock-data/mock-transaction-info.ts | 4 - .../stories/wallet-extension-panels.tsx | 14 - .../brave_wallet_ui/utils/tx-utils.test.ts | 25 -- components/brave_wallet_ui/utils/tx-utils.ts | 6 - .../Crypto/Stores/SendTokenStore.swift | 14 +- .../Crypto/Stores/SwapTokenStore.swift | 4 +- .../PreviewContent/MockContent.swift | 16 +- .../PreviewContent/MockEthTxService.swift | 14 +- .../SwapTokenStoreTests.swift | 9 +- .../TransactionParserTests.swift | 28 +- 52 files changed, 682 insertions(+), 811 deletions(-) diff --git a/browser/brave_wallet/notifications/wallet_notification_service_unittest.cc b/browser/brave_wallet/notifications/wallet_notification_service_unittest.cc index 5ea40b133b2..783729311c9 100644 --- a/browser/brave_wallet/notifications/wallet_notification_service_unittest.cc +++ b/browser/brave_wallet/notifications/wallet_notification_service_unittest.cc @@ -11,8 +11,6 @@ #include #include "base/files/scoped_temp_dir.h" -#include "base/memory/scoped_refptr.h" -#include "base/task/sequenced_task_runner.h" #include "brave/components/brave_wallet/browser/brave_wallet_service.h" #include "brave/components/brave_wallet/browser/eth_transaction.h" #include "brave/components/brave_wallet/browser/eth_tx_meta.h" @@ -70,7 +68,7 @@ class WalletNotificationServiceUnitTest : public testing::Test { *EthTransaction::FromTxData(mojom::TxData::New( mojom::kMainnetChainId, "0x01", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt))); + std::vector()))); EthTxMeta meta(EthAccount(0), std::move(tx)); meta.set_status(status); notification_service_->OnTransactionStatusChanged(meta.ToTransactionInfo()); diff --git a/browser/brave_wallet/send_or_sign_transaction_browsertest.cc b/browser/brave_wallet/send_or_sign_transaction_browsertest.cc index f2b0824a708..082183282f1 100644 --- a/browser/brave_wallet/send_or_sign_transaction_browsertest.cc +++ b/browser/brave_wallet/send_or_sign_transaction_browsertest.cc @@ -442,6 +442,8 @@ class SendOrSignTransactionBrowserTest : public InProcessBrowserTest { EXPECT_EQ(EvalJs(web_contents(), "getSendOrSignTransactionResult()") .ExtractString(), *expected_signed_tx); + EXPECT_EQ(*tx_service()->GetEthSignedTransaction(infos[0]->id), + *expected_signed_tx); } else { EXPECT_EQ(EvalJs(web_contents(), "getSendOrSignTransactionResult()") .ExtractString(), diff --git a/browser/ui/views/toolbar/wallet_button_notification_source_browsertest.cc b/browser/ui/views/toolbar/wallet_button_notification_source_browsertest.cc index 0c6e43dee5e..4398dd45243 100644 --- a/browser/ui/views/toolbar/wallet_button_notification_source_browsertest.cc +++ b/browser/ui/views/toolbar/wallet_button_notification_source_browsertest.cc @@ -334,18 +334,18 @@ IN_PROC_BROWSER_TEST_F(WalletButtonNotificationSourceTest, const auto from_account = GetAccountUtils().EnsureFilTestAccount(0); const std::string to_account = "t1lqarsh4nkg545ilaoqdsbtj4uofplt6sto26ziy"; - auto tx_data = brave_wallet::mojom::TxDataUnion::NewFilTxData( - brave_wallet::mojom::FilTxData::New( - "" /* nonce */, "10" /* gas_premium */, "10" /* gas_fee_cap */, - "100" /* gas_limit */, "" /* max_fee */, to_account, "11")); + auto fil_tx_data = brave_wallet::mojom::FilTxData::New( + "" /* nonce */, "10" /* gas_premium */, "10" /* gas_fee_cap */, + "100" /* gas_limit */, "" /* max_fee */, to_account, "11"); auto chain_id = network_manager()->GetCurrentChainId( brave_wallet::mojom::CoinType::FIL, std::nullopt); EXPECT_EQ(chain_id, "t"); EXPECT_EQ(from_account->account_id->unique_key, "461_3_0_t17otcil7bookogjy3ywoslq5gf5tbisdkcfui2iq"); - tx_service()->AddUnapprovedTransaction( - std::move(tx_data), chain_id, from_account->account_id.Clone(), nullptr, + tx_service()->AddUnapprovedFilecoinTransaction( + std::move(fil_tx_data), chain_id, from_account->account_id.Clone(), + nullptr, base::BindLambdaForTesting([&](bool success, const std::string& id, const std::string& err_message) { first_tx_meta_id = id; @@ -433,8 +433,8 @@ IN_PROC_BROWSER_TEST_F(WalletButtonNotificationSourceTest, std::vector(), nullptr, nullptr, nullptr); - tx_service()->AddUnapprovedTransaction( - brave_wallet::mojom::TxDataUnion::NewSolanaTxData(std::move(tx_data)), + tx_service()->AddUnapprovedSolanaTransaction( + std::move(tx_data), network_manager()->GetCurrentChainId(brave_wallet::mojom::CoinType::SOL, std::nullopt), from_account->account_id.Clone(), nullptr, @@ -526,15 +526,15 @@ IN_PROC_BROWSER_TEST_F(WalletButtonNotificationSourceTest, const auto from_account = GetAccountUtils().EnsureFilTestAccount(0); const std::string to_account = "t1lqarsh4nkg545ilaoqdsbtj4uofplt6sto26ziy"; - auto tx_data = brave_wallet::mojom::TxDataUnion::NewFilTxData( - brave_wallet::mojom::FilTxData::New( - "" /* nonce */, "10" /* gas_premium */, "10" /* gas_fee_cap */, - "100" /* gas_limit */, "" /* max_fee */, to_account, "11")); + auto fil_tx_data = brave_wallet::mojom::FilTxData::New( + "" /* nonce */, "10" /* gas_premium */, "10" /* gas_fee_cap */, + "100" /* gas_limit */, "" /* max_fee */, to_account, "11"); auto chain_id = network_manager()->GetCurrentChainId( brave_wallet::mojom::CoinType::FIL, std::nullopt); EXPECT_EQ(chain_id, "t"); - tx_service()->AddUnapprovedTransaction( - std::move(tx_data), chain_id, from_account->account_id.Clone(), nullptr, + tx_service()->AddUnapprovedFilecoinTransaction( + std::move(fil_tx_data), chain_id, from_account->account_id.Clone(), + nullptr, base::BindLambdaForTesting([&](bool success, const std::string& id, const std::string& err_message) { tx_meta_id = id; diff --git a/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.cc b/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.cc index 8578002e4c1..7594ad6490c 100644 --- a/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.cc +++ b/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.cc @@ -14,7 +14,6 @@ #include "base/check.h" #include "base/functional/bind.h" #include "base/notimplemented.h" -#include "base/notreached.h" #include "brave/components/brave_wallet/browser/bitcoin/bitcoin_block_tracker.h" #include "brave/components/brave_wallet/browser/bitcoin/bitcoin_transaction.h" #include "brave/components/brave_wallet/browser/bitcoin/bitcoin_tx_meta.h" @@ -137,19 +136,9 @@ void BitcoinTxManager::AddUnapprovedBitcoinTransaction( std::move(callback))); } -void BitcoinTxManager::AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - NOTREACHED() << "AddUnapprovedBitcoinTransaction must be used"; -} - void BitcoinTxManager::ContinueAddUnapprovedTransaction( std::unique_ptr meta, - AddUnapprovedTransactionCallback callback, + AddUnapprovedBitcoinTransactionCallback callback, base::expected bitcoin_transaction) { if (!bitcoin_transaction.has_value()) { std::move(callback).Run(false, "", bitcoin_transaction.error()); diff --git a/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.h b/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.h index 9ab59542292..7529d5a3396 100644 --- a/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.h +++ b/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.h @@ -74,12 +74,6 @@ class BitcoinTxManager : public TxManager, uint32_t latest_height) override; // TxManager - void AddUnapprovedTransaction(const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) override; void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) override; void SpeedupOrCancelTransaction( @@ -94,7 +88,7 @@ class BitcoinTxManager : public TxManager, void ContinueAddUnapprovedTransaction( std::unique_ptr meta, - AddUnapprovedTransactionCallback callback, + AddUnapprovedBitcoinTransactionCallback callback, base::expected bitcoin_transaction); void ContinueApproveTransaction(const std::string& tx_meta_id, diff --git a/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager_unittest.cc b/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager_unittest.cc index 40c1a6cf7de..920aa685033 100644 --- a/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager_unittest.cc +++ b/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager_unittest.cc @@ -7,7 +7,6 @@ #include #include -#include #include #include "base/files/scoped_temp_dir.h" @@ -90,18 +89,6 @@ class BitcoinTxManagerUnitTest : public testing::Test { PrefService* prefs() { return &prefs_; } - void AddUnapprovedTransaction( - std::string chain_id, - mojom::TxDataUnionPtr tx_data_union, - mojom::AccountIdPtr from, - std::optional origin, - mojom::SwapInfoPtr swap_info, - BitcoinTxManager::AddUnapprovedTransactionCallback callback) { - btc_tx_manager()->AddUnapprovedTransaction( - std::move(chain_id), std::move(tx_data_union), std::move(from), - std::move(origin), std::move(swap_info), std::move(callback)); - } - void ApproveTransaction( std::string tx_meta_id, BitcoinTxManager::ApproveTransactionCallback callback) { @@ -132,7 +119,8 @@ TEST_F(BitcoinTxManagerUnitTest, SubmitTransaction) { mojom::kBitcoinMainnet, from_account.Clone(), kMockBtcAddress, 5000, false, nullptr); - base::MockCallback add_callback; + base::MockCallback + add_callback; std::string meta_id; EXPECT_CALL(add_callback, Run(_, _, _)).WillOnce(SaveArg<1>(&meta_id)); btc_tx_manager()->AddUnapprovedBitcoinTransaction(params.Clone(), @@ -178,7 +166,8 @@ TEST_F(BitcoinTxManagerUnitTest, SubmitTransactionError) { mojom::kBitcoinMainnet, from_account.Clone(), kMockBtcAddress, 5000, false, nullptr); - base::MockCallback add_callback; + base::MockCallback + add_callback; std::string meta_id; EXPECT_CALL(add_callback, Run(_, _, _)).WillOnce(SaveArg<1>(&meta_id)); btc_tx_manager()->AddUnapprovedBitcoinTransaction(params.Clone(), diff --git a/components/brave_wallet/browser/brave_wallet_p3a_unittest.cc b/components/brave_wallet/browser/brave_wallet_p3a_unittest.cc index 2671aa7abe9..f29b4ed2998 100644 --- a/components/brave_wallet/browser/brave_wallet_p3a_unittest.cc +++ b/components/brave_wallet/browser/brave_wallet_p3a_unittest.cc @@ -123,7 +123,7 @@ class BraveWalletP3AUnitTest : public testing::Test { const std::string& chain_id, const mojom::AccountIdPtr& from, const std::optional& origin, - TxService::AddUnapprovedTransactionCallback callback, + TxService::AddUnapprovedZCashTransactionCallback callback, base::expected zcash_transaction) { tx_service()->GetZCashTxManager()->ContinueAddUnapprovedTransaction( from, origin, nullptr, std::move(callback), @@ -691,9 +691,9 @@ TEST_F(BraveWalletP3AUnitTest, SolTransactionSentObservation) { last_valid_block_height1); TestFuture tx_add_future; - tx_service()->AddUnapprovedTransaction( - mojom::TxDataUnion::NewSolanaTxData(std::move(solana_tx_data)), - mojom::kSolanaMainnet, sol_from(), nullptr, tx_add_future.GetCallback()); + tx_service()->AddUnapprovedSolanaTransaction( + std::move(solana_tx_data), mojom::kSolanaMainnet, sol_from(), nullptr, + tx_add_future.GetCallback()); auto [success, tx_meta_id, error_message] = tx_add_future.Take(); EXPECT_TRUE(success); EXPECT_NE(tx_meta_id, ""); @@ -725,9 +725,8 @@ TEST_F(BraveWalletP3AUnitTest, FilTransactionSentObservation) { "" /* gas_fee_cap */, "" /* gas_limit */, "" /* max_fee */, to_account, "11"); TestFuture tx_add_future; - tx_service()->AddUnapprovedTransaction( - mojom::TxDataUnion::NewFilTxData(std::move(tx_data)), - mojom::kFilecoinMainnet, fil_from(), nullptr, + tx_service()->AddUnapprovedFilecoinTransaction( + std::move(tx_data), mojom::kFilecoinMainnet, fil_from(), nullptr, tx_add_future.GetCallback()); auto [success, tx_meta_id, error_message] = tx_add_future.Take(); EXPECT_TRUE(success); diff --git a/components/brave_wallet/browser/cardano/cardano_tx_manager.cc b/components/brave_wallet/browser/cardano/cardano_tx_manager.cc index 6741718dffc..5552d85d491 100644 --- a/components/brave_wallet/browser/cardano/cardano_tx_manager.cc +++ b/components/brave_wallet/browser/cardano/cardano_tx_manager.cc @@ -13,7 +13,6 @@ #include "base/functional/bind.h" #include "base/notimplemented.h" -#include "base/notreached.h" #include "base/strings/string_number_conversions.h" #include "brave/components/brave_wallet/browser/brave_wallet_utils.h" #include "brave/components/brave_wallet/browser/cardano/cardano_block_tracker.h" @@ -93,22 +92,12 @@ void CardanoTxManager::OnLatestHeightUpdated(const std::string& chain_id, UpdatePendingTransactions(chain_id); } -void CardanoTxManager::AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - NOTREACHED() << "AddUnapprovedCardanoTransaction must be used"; -} - void CardanoTxManager::ContinueAddUnapprovedTransaction( const std::string& chain_id, const mojom::AccountIdPtr& from, const std::optional& origin, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback, + AddUnapprovedCardanoTransactionCallback callback, base::expected cardano_transaction) { if (!cardano_transaction.has_value()) { std::move(callback).Run(false, "", cardano_transaction.error()); diff --git a/components/brave_wallet/browser/cardano/cardano_tx_manager.h b/components/brave_wallet/browser/cardano/cardano_tx_manager.h index c7f7348fcee..9e7e9747b44 100644 --- a/components/brave_wallet/browser/cardano/cardano_tx_manager.h +++ b/components/brave_wallet/browser/cardano/cardano_tx_manager.h @@ -62,12 +62,6 @@ class CardanoTxManager : public TxManager, uint32_t latest_height) override; // TxManager - void AddUnapprovedTransaction(const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) override; void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) override; void SpeedupOrCancelTransaction( @@ -85,7 +79,7 @@ class CardanoTxManager : public TxManager, const mojom::AccountIdPtr& from, const std::optional& origin, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback, + AddUnapprovedCardanoTransactionCallback callback, base::expected cardano_transaction); void ContinueApproveTransaction(const std::string& tx_meta_id, diff --git a/components/brave_wallet/browser/cardano/cardano_tx_manager_unittest.cc b/components/brave_wallet/browser/cardano/cardano_tx_manager_unittest.cc index 0124b1f7e62..04808c154ed 100644 --- a/components/brave_wallet/browser/cardano/cardano_tx_manager_unittest.cc +++ b/components/brave_wallet/browser/cardano/cardano_tx_manager_unittest.cc @@ -105,18 +105,6 @@ class CardanoTxManagerUnitTest : public testing::Test { PrefService* prefs() { return &prefs_; } - void AddUnapprovedTransaction( - std::string chain_id, - mojom::TxDataUnionPtr tx_data_union, - mojom::AccountIdPtr from, - std::optional origin, - mojom::SwapInfoPtr swap_info, - CardanoTxManager::AddUnapprovedTransactionCallback callback) { - cardano_tx_manager()->AddUnapprovedTransaction( - std::move(chain_id), std::move(tx_data_union), std::move(from), - std::move(origin), std::move(swap_info), std::move(callback)); - } - void ApproveTransaction( std::string tx_meta_id, CardanoTxManager::ApproveTransactionCallback callback) { @@ -147,7 +135,8 @@ TEST_F(CardanoTxManagerUnitTest, SubmitTransaction) { mojom::kCardanoMainnet, from_account.Clone(), kMockCardanoAddress1, 1000000, false, std::nullopt, nullptr); - base::MockCallback add_callback; + base::MockCallback + add_callback; std::string meta_id; EXPECT_CALL(add_callback, Run(_, _, _)) .WillOnce( @@ -209,7 +198,8 @@ TEST_F(CardanoTxManagerUnitTest, SubmitTransaction_SendToken) { mojom::kCardanoMainnet, from_account.Clone(), kMockCardanoAddress1, 5, false, base::HexEncodeLower(GetMockTokenId("brave")), nullptr); - base::MockCallback add_callback; + base::MockCallback + add_callback; std::string meta_id; EXPECT_CALL(add_callback, Run(_, _, _)) .WillOnce( @@ -265,7 +255,8 @@ TEST_F(CardanoTxManagerUnitTest, SubmitTransactionError) { mojom::kCardanoMainnet, from_account.Clone(), kMockCardanoAddress1, 1000000, false, std::nullopt, nullptr); - base::MockCallback add_callback; + base::MockCallback + add_callback; std::string meta_id; EXPECT_CALL(add_callback, Run(_, _, _)) .WillOnce( diff --git a/components/brave_wallet/browser/eip1559_transaction_unittest.cc b/components/brave_wallet/browser/eip1559_transaction_unittest.cc index 9b5f3fb5601..7d08ed2449e 100644 --- a/components/brave_wallet/browser/eip1559_transaction_unittest.cc +++ b/components/brave_wallet/browser/eip1559_transaction_unittest.cc @@ -25,7 +25,7 @@ TEST(Eip1559TransactionUnitTest, GetMessageToSign) { *Eip1559Transaction::FromTxData(mojom::TxData1559::New( mojom::TxData::New("0x04", "0x00", "0x00", "0x00", "0x0101010101010101010101010101010101010101", - "0x00", data, false, std::nullopt), + "0x00", data), "0x0", "0x0")); ASSERT_EQ(tx.type(), EthTransactionType::kEip1559); auto* access_list = tx.access_list(); @@ -125,8 +125,7 @@ TEST(Eip1559TransactionUnitTest, GetSignedTransactionAndHash) { *Eip1559Transaction::FromTxData(mojom::TxData1559::New( mojom::TxData::New("0x04", entry.nonce, "0x00", entry.gas_limit, "0x000000000000000000000000000000000000aaaa", - entry.value, std::vector(), false, - std::nullopt), + entry.value, std::vector()), entry.max_priority_fee_per_gas, entry.max_fee_per_gas)); auto signature = *key->SignCompact(tx.GetHashedMessageToSign()); @@ -141,8 +140,7 @@ TEST(Eip1559TransactionUnitTest, Serialization) { *Eip1559Transaction::FromTxData(mojom::TxData1559::New( mojom::TxData::New("0x15BE", "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", - "0xde0b6b3a7640000", std::vector(), false, - std::nullopt), + "0xde0b6b3a7640000", std::vector()), "0x7B", "0x1C8")); auto* access_list = tx.access_list(); @@ -164,7 +162,7 @@ TEST(Eip1559TransactionUnitTest, FromTxData) { auto valid_tx_data = mojom::TxData1559::New( mojom::TxData::New("0x15BE", "0x01", "0x3E8", "0x989680", "0x3535353535353535353535353535353535353535", "0x2A", - std::vector{1}, false, std::nullopt), + std::vector{1}), "0x7B", "0x1C8"); auto tx = Eip1559Transaction::FromTxData(valid_tx_data); diff --git a/components/brave_wallet/browser/eip2930_transaction_unittest.cc b/components/brave_wallet/browser/eip2930_transaction_unittest.cc index 666d46628d8..fbe033ac307 100644 --- a/components/brave_wallet/browser/eip2930_transaction_unittest.cc +++ b/components/brave_wallet/browser/eip2930_transaction_unittest.cc @@ -78,10 +78,9 @@ TEST(Eip2930TransactionUnitTest, AccessListAndValue) { TEST(Eip2930TransactionUnitTest, GetHashedMessageToSign) { std::vector data; EXPECT_TRUE(base::HexStringToBytes("010200", &data)); - Eip2930Transaction tx = *Eip2930Transaction::FromTxData( - mojom::TxData::New(mojom::kMainnetChainId, "0x00", "0x00", "0x00", - "0x0101010101010101010101010101010101010101", "0x00", - data, false, std::nullopt)); + Eip2930Transaction tx = *Eip2930Transaction::FromTxData(mojom::TxData::New( + mojom::kMainnetChainId, "0x00", "0x00", "0x00", + "0x0101010101010101010101010101010101010101", "0x00", data)); ASSERT_EQ(tx.type(), EthTransactionType::kEip2930); auto* access_list = tx.access_list(); Eip2930Transaction::AccessListItem item; @@ -101,7 +100,7 @@ TEST(Eip2930TransactionUnitTest, GetSignedTransactionAndHash) { Eip2930Transaction tx = *Eip2930Transaction::FromTxData( mojom::TxData::New("0x796f6c6f763378", "0x00", "0x3b9aca00", "0x62d4", "0xdf0a88b2b68c673713a8ec826003676f272e3573", "0x01", - std::vector(), false, std::nullopt)); + std::vector())); ASSERT_EQ(tx.type(), EthTransactionType::kEip2930); auto* access_list = tx.access_list(); Eip2930Transaction::AccessListItem item; @@ -147,10 +146,10 @@ TEST(Eip2930TransactionUnitTest, GetSignedTransactionAndHash) { } TEST(Eip2930TransactionUnitTest, Serialization) { - Eip2930Transaction tx = *Eip2930Transaction::FromTxData(mojom::TxData::New( - "0x15BE", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + Eip2930Transaction tx = *Eip2930Transaction::FromTxData( + mojom::TxData::New("0x15BE", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector())); auto* access_list = tx.access_list(); Eip2930Transaction::AccessListItem item_a; item_a.address.fill(0x0a); @@ -168,10 +167,9 @@ TEST(Eip2930TransactionUnitTest, Serialization) { TEST(Eip2930TransactionUnitTest, GetBaseFee) { std::vector data; ASSERT_TRUE(base::HexStringToBytes("010200", &data)); - Eip2930Transaction tx = *Eip2930Transaction::FromTxData( - mojom::TxData::New("0x15BE", "0x0", "0x0", "0x0", - "0x3535353535353535353535353535353535353535", "0x0", - data, false, std::nullopt)); + Eip2930Transaction tx = *Eip2930Transaction::FromTxData(mojom::TxData::New( + "0x15BE", "0x0", "0x0", "0x0", + "0x3535353535353535353535353535353535353535", "0x0", data)); auto* access_list = tx.access_list(); Eip2930Transaction::AccessListItem item_a; @@ -186,8 +184,8 @@ TEST(Eip2930TransactionUnitTest, GetBaseFee) { const uint256_t fee = 21000 + 2 * 16 + 4 + 2400 + 1900; EXPECT_EQ(tx.GetBaseFee(), fee); - Eip2930Transaction tx2 = *Eip2930Transaction::FromTxData(mojom::TxData::New( - "0x15BE", "0x0", "0x0", "0x0", "0x", "0x0", data, false, std::nullopt)); + Eip2930Transaction tx2 = *Eip2930Transaction::FromTxData( + mojom::TxData::New("0x15BE", "0x0", "0x0", "0x0", "0x", "0x0", data)); *tx2.access_list() = *tx.access_list(); // Plus contract creation @@ -198,7 +196,7 @@ TEST(Eip2930TransactionUnitTest, GetBaseFee) { Eip2930Transaction tx3 = *Eip2930Transaction::FromTxData( mojom::TxData::New("0x15BE", "0x0", "0x0", "0x0", "0x3535353535353535353535353535353535353535", "0x0", - std::vector(), false, std::nullopt)); + std::vector())); auto* access_list3 = tx3.access_list(); access_list3->push_back(item_a); @@ -214,7 +212,7 @@ TEST(Eip2930TransactionUnitTest, FromTxData) { auto tx = Eip2930Transaction::FromTxData( mojom::TxData::New("0x1", "0x01", "0x3E8", "0x989680", "0x3535353535353535353535353535353535353535", "0x2A", - std::vector{1}, false, std::nullopt)); + std::vector{1})); ASSERT_TRUE(tx); EXPECT_EQ(tx->nonce(), uint256_t(1)); EXPECT_EQ(tx->gas_price(), uint256_t(1000)); @@ -228,7 +226,7 @@ TEST(Eip2930TransactionUnitTest, FromTxData) { tx = Eip2930Transaction::FromTxData( mojom::TxData::New("0x1", "", "0x3E8", "0x989680", "0x3535353535353535353535353535353535353535", "0x2A", - std::vector{1}, false, std::nullopt)); + std::vector{1})); ASSERT_TRUE(tx); EXPECT_FALSE(tx->nonce()); @@ -236,13 +234,13 @@ TEST(Eip2930TransactionUnitTest, FromTxData) { // single missing value EXPECT_FALSE(Eip2930Transaction::FromTxData(mojom::TxData::New( "0x1", "0x1", "0x3E8", "", "0x3535353535353535353535353535353535353535", - "0x2A", std::vector{1}, false, std::nullopt))); + "0x2A", std::vector{1}))); // But missing data is allowed when strict is false tx = Eip2930Transaction::FromTxData( mojom::TxData::New("0x1", "", "0x3E8", "", "0x3535353535353535353535353535353535353535", "", - std::vector{1}, false, std::nullopt), + std::vector{1}), false); ASSERT_TRUE(tx); // Empty nonce should be nullopt diff --git a/components/brave_wallet/browser/eth_transaction.cc b/components/brave_wallet/browser/eth_transaction.cc index 211f4ca00e1..eedb8d4d507 100644 --- a/components/brave_wallet/browser/eth_transaction.cc +++ b/components/brave_wallet/browser/eth_transaction.cc @@ -162,11 +162,15 @@ std::optional EthTransaction::FromValue( } tx.data_ = std::vector(data_decoded.begin(), data_decoded.end()); - std::optional v = value.FindInt("v"); - if (!v) { + if (auto* v_str = value.FindString("v")) { + if (!HexValueToUint256(*v_str, &tx.v_)) { + return std::nullopt; + } + } else if (std::optional v_uint8 = value.FindInt("v")) { + tx.v_ = static_cast(*v_uint8); // Legacy buggy format. + } else { return std::nullopt; } - tx.v_ = (uint8_t)*v; const std::string* r = value.FindString("r"); if (!r) { @@ -292,7 +296,7 @@ base::DictValue EthTransaction::ToValueImpl() const { dict.Set("to", GetToHex()); dict.Set("value", Uint256ValueToHex(value_)); dict.Set("data", base::Base64Encode(data_)); - dict.Set("v", static_cast(v_)); + dict.Set("v", Uint256ValueToHex(v_)); dict.Set("r", base::Base64Encode(r_)); dict.Set("s", base::Base64Encode(s_)); dict.Set("type", static_cast(type_)); diff --git a/components/brave_wallet/browser/eth_transaction_unittest.cc b/components/brave_wallet/browser/eth_transaction_unittest.cc index cc003850641..0c780b49d41 100644 --- a/components/brave_wallet/browser/eth_transaction_unittest.cc +++ b/components/brave_wallet/browser/eth_transaction_unittest.cc @@ -17,6 +17,7 @@ #include "base/values.h" #include "brave/components/brave_wallet/browser/internal/hd_key.h" #include "brave/components/brave_wallet/common/hex_utils.h" +#include "brave/components/brave_wallet/common/test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace brave_wallet { @@ -40,7 +41,7 @@ TEST(EthTransactionUnitTest, GetMessageToSign) { EthTransaction tx1 = *EthTransaction::FromTxData( mojom::TxData::New("0x1", "0x06", "0x09184e72a000", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data, false, std::nullopt)); + "0x016345785d8a0000", data)); EXPECT_EQ(base::HexEncodeLower(tx1.GetHashedMessageToSign()), "aad787b6c7cfb13feab05f6175089c95f0b54839365fab43c7c4245bd32b3d65"); @@ -50,10 +51,9 @@ TEST(EthTransactionUnitTest, GetMessageToSign) { "9ad82175b6921c5525fc52ebc08b97118cc9709952a16b2249a3f42d44614721"); data.clear(); - EthTransaction tx2 = *EthTransaction::FromTxData( - mojom::TxData::New("0x1", "0x0b", "0x051f4d5c00", "0x5208", - "0x656e929d6fc0cac52d3d9526d288fe02dcd56fbd", - "0x2386f26fc10000", data, false, std::nullopt)); + EthTransaction tx2 = *EthTransaction::FromTxData(mojom::TxData::New( + "0x1", "0x0b", "0x051f4d5c00", "0x5208", + "0x656e929d6fc0cac52d3d9526d288fe02dcd56fbd", "0x2386f26fc10000", data)); // with chain id (mainnet) EXPECT_EQ(base::HexEncodeLower(tx2.GetHashedMessageToSign()), @@ -106,9 +106,9 @@ TEST(EthTransactionUnitTest, GetMessageToSign) { }; for (const auto& entry : cases) { - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", entry.nonce, entry.gas_price, entry.gas_limit, entry.to, - entry.value, std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", entry.nonce, entry.gas_price, entry.gas_limit, + entry.to, entry.value, std::vector())); // with chain id (mainnet) EXPECT_EQ(base::HexEncodeLower(tx.GetHashedMessageToSign()), entry.hash); } @@ -122,10 +122,10 @@ TEST(EthTransactionUnitTest, GetSignedTransactionAndHash) { std::unique_ptr key = HDKey::GenerateFromPrivateKey(private_key); ASSERT_TRUE(key); - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector())); auto message = tx.GetHashedMessageToSign(); EXPECT_EQ(base::HexEncodeLower(message), @@ -178,7 +178,12 @@ TEST(EthTransactionUnitTest, TransactionAndValue) { EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( "0x1", "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector({1, 2, 3}), false, std::nullopt)); + std::vector({1, 2, 3}))); + tx.ProcessSignature(*Secp256k1Signature::CreateFromPayload( + test::HexToArray<64>("28EF61340BD939BC2195FE537567866003E1A15D3C71FF6" + "3E1590620AA63627667CBE9D8997F761AECB703304B3800" + "CCF555C9F3DC64214B297FB1966A3B6D83"), + 1)); base::DictValue tx_value = tx.ToValue(); EXPECT_THAT(tx_value, base::test::IsJson( R"json( @@ -188,11 +193,11 @@ TEST(EthTransactionUnitTest, TransactionAndValue) { "gas_limit": "0x5208", "gas_price": "0x4a817c800", "nonce": "0x9", - "r": "", - "s": "", + "r": "KO9hNAvZObwhlf5TdWeGYAPhoV08cf9j4VkGIKpjYnY=", + "s": "Z8vp2Jl/dhrstwMwSzgAzPVVyfPcZCFLKX+xlmo7bYM=", "to": "0x3535353535353535353535353535353535353535", "type": 0, - "v": 0, + "v": "0x26", "value": "0xde0b6b3a7640000" } )json")); @@ -201,20 +206,51 @@ TEST(EthTransactionUnitTest, TransactionAndValue) { EXPECT_EQ(tx_from_value, tx); } +TEST(EthTransactionUnitTest, TransactionAndValue_LegacyV) { + auto tx_value = base::test::ParseJsonDict(R"json( + { + "chain_id": "0x1", + "data": "AQID", + "gas_limit": "0x5208", + "gas_price": "0x4a817c800", + "nonce": "0x9", + "r": "KO9hNAvZObwhlf5TdWeGYAPhoV08cf9j4VkGIKpjYnY=", + "s": "Z8vp2Jl/dhrstwMwSzgAzPVVyfPcZCFLKX+xlmo7bYM=", + "to": "0x3535353535353535353535353535353535353535", + "type": 0, + "v": 38, + "value": "0xde0b6b3a7640000" + } + )json"); + auto tx_from_value = EthTransaction::FromValue(tx_value); + ASSERT_NE(tx_from_value, std::nullopt); + EXPECT_EQ(tx_from_value->v(), (uint256_t)0x26); +} + +TEST(EthTransactionUnitTest, TransactionAndValue_BadV) { + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector())); + base::DictValue tx_value = tx.ToValue(); + tx_value.Set("v", "not a hex string"); + EXPECT_FALSE(EthTransaction::FromValue(tx_value)); +} + TEST(EthTransactionUnitTest, TransactionAndValue_BadType) { - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector())); base::DictValue tx_value = tx.ToValue(); tx_value.Set("type", 123); EXPECT_FALSE(EthTransaction::FromValue(tx_value)); } TEST(EthTransactionUnitTest, TransactionAndValue_EmptyTo) { - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", "", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", "", + "0x0de0b6b3a7640000", std::vector())); base::DictValue tx_value = tx.ToValue(); auto tx_from_value = EthTransaction::FromValue(tx_value); ASSERT_NE(tx_from_value, std::nullopt); @@ -222,9 +258,9 @@ TEST(EthTransactionUnitTest, TransactionAndValue_EmptyTo) { } TEST(EthTransactionUnitTest, TransactionAndValue_0xTo) { - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", "0x", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", "0x", + "0x0de0b6b3a7640000", std::vector())); base::DictValue tx_value = tx.ToValue(); auto tx_from_value = EthTransaction::FromValue(tx_value); ASSERT_NE(tx_from_value, std::nullopt); @@ -257,7 +293,7 @@ TEST(EthTransactionUnitTest, GetDataFee) { EthTransaction tx2 = *EthTransaction::FromTxData( mojom::TxData::New("0x1", "0x06", "0x09184e72a000", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data, false, std::nullopt)); + "0x016345785d8a0000", data)); EXPECT_EQ(tx2.GetDataFee(), uint256_t(1716)); } @@ -265,7 +301,7 @@ TEST(EthTransactionUnitTest, FromTxData) { auto valid_tx_data = mojom::TxData::New("0x1", "0x01", "0x3E8", "0x989680", "0x3535353535353535353535353535353535353535", "0x2A", - std::vector{1}, false, std::nullopt); + std::vector{1}); auto tx = EthTransaction::FromTxData(valid_tx_data); ASSERT_TRUE(tx); EXPECT_EQ(tx->chain_id(), uint256_t(1)); @@ -280,7 +316,7 @@ TEST(EthTransactionUnitTest, FromTxData) { tx = EthTransaction::FromTxData( mojom::TxData::New("0x1", "", "0x3E8", "0x989680", "0x3535353535353535353535353535353535353535", "0x2A", - std::vector{1}, false, std::nullopt)); + std::vector{1})); ASSERT_TRUE(tx); EXPECT_FALSE(tx->nonce()); @@ -318,9 +354,8 @@ TEST(EthTransactionUnitTest, FromTxData) { } TEST(EthTransactionUnitTest, FromTxData_EmptyTo) { - auto tx = EthTransaction::FromTxData( - mojom::TxData::New("0x1", "0x01", "0x3E8", "0x989680", "", "0x2A", - std::vector{1}, false, std::nullopt)); + auto tx = EthTransaction::FromTxData(mojom::TxData::New( + "0x1", "0x01", "0x3E8", "0x989680", "", "0x2A", std::vector{1})); ASSERT_TRUE(tx); EXPECT_EQ(tx->chain_id(), uint256_t(1)); EXPECT_EQ(tx->nonce(), uint256_t(1)); @@ -334,7 +369,7 @@ TEST(EthTransactionUnitTest, FromTxData_EmptyTo) { TEST(EthTransactionUnitTest, FromTxData_0xTo) { auto tx = EthTransaction::FromTxData( mojom::TxData::New("0x1", "0x01", "0x3E8", "0x989680", "0x", "0x2A", - std::vector{1}, false, std::nullopt)); + std::vector{1})); ASSERT_TRUE(tx); EXPECT_EQ(tx->chain_id(), uint256_t(1)); EXPECT_EQ(tx->nonce(), uint256_t(1)); diff --git a/components/brave_wallet/browser/eth_tx_manager.cc b/components/brave_wallet/browser/eth_tx_manager.cc index 412a74525b2..9aab5fc7be5 100644 --- a/components/brave_wallet/browser/eth_tx_manager.cc +++ b/components/brave_wallet/browser/eth_tx_manager.cc @@ -152,57 +152,53 @@ EthTxManager::~EthTxManager() { GetEthBlockTracker().RemoveObserver(this); } -void EthTxManager::AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - CHECK(tx_data_union->is_eth_tx_data() || - tx_data_union->is_eth_tx_data_1559()); - auto origin_val = - origin.value_or(url::Origin::Create(GURL("chrome://wallet"))); - if (tx_data_union->is_eth_tx_data()) { - AddUnapprovedTransaction(std::move(tx_data_union->get_eth_tx_data()), from, - std::move(origin_val), std::move(swap_info), - std::move(callback)); - } else { - AddUnapproved1559Transaction( - std::move(tx_data_union->get_eth_tx_data_1559()), from, - std::move(origin_val), std::move(swap_info), std::move(callback)); - } +void EthTxManager::AddUnapprovedEvmDappTransaction( + mojom::TxData1559Ptr tx_data_1559, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback) { + AddUnapproved1559TransactionInternal(std::move(tx_data_1559), from, origin, + sign_only, nullptr, std::move(callback)); +} + +void EthTxManager::AddUnapprovedEvmDappTransaction( + mojom::TxDataPtr tx_data, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback) { + AddUnapprovedTransactionInternal(std::move(tx_data), from, origin, sign_only, + nullptr, std::move(callback)); } void EthTxManager::AddUnapprovedEvmTransaction( mojom::NewEvmTransactionParamsPtr params, - const std::optional& origin, AddUnapprovedEvmTransactionCallback callback) { - auto origin_val = - origin.value_or(url::Origin::Create(GURL("chrome://wallet"))); + auto origin = url::Origin::Create(GURL("chrome://wallet")); auto tx_data = mojom::TxData::New(params->chain_id, "", "", params->gas_limit, - params->to, params->value, params->data, - false, std::nullopt); + params->to, params->value, params->data); if (!json_rpc_service_->network_manager()->IsEip1559Chain(params->chain_id)) { - AddUnapprovedTransaction(std::move(tx_data), params->from, - std::move(origin_val), - std::move(params->swap_info), std::move(callback)); + AddUnapprovedTransactionInternal( + std::move(tx_data), params->from, std::move(origin), false, + std::move(params->swap_info), std::move(callback)); } else { auto tx_data_1559 = mojom::TxData1559::New(std::move(tx_data), "", ""); - AddUnapproved1559Transaction( - std::move(tx_data_1559), params->from, std::move(origin_val), + AddUnapproved1559TransactionInternal( + std::move(tx_data_1559), params->from, std::move(origin), false, std::move(params->swap_info), std::move(callback)); } } -void EthTxManager::AddUnapprovedTransaction( +void EthTxManager::AddUnapprovedTransactionInternal( mojom::TxDataPtr tx_data, const mojom::AccountIdPtr& from, const url::Origin& origin, + bool sign_only, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { + AddUnapprovedEvmTransactionCallback callback) { std::string error; if (!EthTxManager::ValidateTxData(tx_data, &error)) { std::move(callback).Run(false, "", error); @@ -230,20 +226,19 @@ void EthTxManager::AddUnapprovedTransaction( base::BindOnce(&EthTxManager::OnGetGasPrice, weak_factory_.GetWeakPtr(), from.Clone(), origin, tx_data->to, tx_data->value, data, gas_limit, std::move(tx_ptr), std::move(callback), - tx_data->sign_only, std::move(swap_info))); + sign_only, std::move(swap_info))); } else if (!tx_ptr->gas_limit()) { json_rpc_service_->GetEstimateGas( chain_id, from->address, tx_data->to, "" /* gas */, "" /* gas_price */, tx_data->value, data, base::BindOnce(&EthTxManager::ContinueAddUnapprovedTransaction, weak_factory_.GetWeakPtr(), from.Clone(), origin, - std::move(tx_ptr), std::move(callback), - tx_data->sign_only, std::move(swap_info))); + std::move(tx_ptr), std::move(callback), sign_only, + std::move(swap_info))); } else { - ContinueAddUnapprovedTransaction(from, origin, std::move(tx_ptr), - std::move(callback), tx_data->sign_only, - std::move(swap_info), gas_limit, - mojom::ProviderError::kSuccess, ""); + ContinueAddUnapprovedTransaction( + from, origin, std::move(tx_ptr), std::move(callback), sign_only, + std::move(swap_info), gas_limit, mojom::ProviderError::kSuccess, ""); } } @@ -254,7 +249,7 @@ void EthTxManager::OnGetGasPrice(const mojom::AccountIdPtr& from, const std::string& data, const std::string& gas_limit, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedEvmTransactionCallback callback, bool sign_only, mojom::SwapInfoPtr swap_info, const std::string& result, @@ -291,7 +286,7 @@ void EthTxManager::ContinueAddUnapprovedTransaction( const mojom::AccountIdPtr& from, const std::optional& origin, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedEvmTransactionCallback callback, bool sign_only, mojom::SwapInfoPtr swap_info, const std::string& result, @@ -339,12 +334,13 @@ void EthTxManager::ContinueAddUnapprovedTransaction( std::move(callback).Run(true, meta.id(), ""); } -void EthTxManager::AddUnapproved1559Transaction( +void EthTxManager::AddUnapproved1559TransactionInternal( mojom::TxData1559Ptr tx_data, const mojom::AccountIdPtr& from, const url::Origin& origin, + bool sign_only, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { + AddUnapprovedEvmTransactionCallback callback) { std::string error; if (!EthTxManager::ValidateTxData1559(tx_data, &error)) { std::move(callback).Run(false, "", error); @@ -365,7 +361,6 @@ void EthTxManager::AddUnapproved1559Transaction( // as required by geth. This is typically the case with ETHSend. const std::string data = tx_data->base_data->data.empty() ? "" : ToHex(tx_data->base_data->data); - bool sign_only = tx_data->base_data->sign_only; std::string chain_id = Uint256ValueToHex(tx->chain_id()); if (!tx_ptr->max_priority_fee_per_gas() || !tx_ptr->max_fee_per_gas()) { @@ -399,7 +394,7 @@ void EthTxManager::OnGetGasOracleForUnapprovedTransaction( const std::string& data, const std::string& gas_limit, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedEvmTransactionCallback callback, bool sign_only, mojom::SwapInfoPtr swap_info, mojom::GasEstimation1559Ptr gas_estimation) { @@ -997,6 +992,15 @@ void EthTxManager::SetNonceForUnapprovedTransaction( std::move(callback).Run(true); } +std::optional EthTxManager::GetSignedTransaction( + const std::string& tx_meta_id) { + std::unique_ptr meta = GetEthTxStateManager().GetEthTx(tx_meta_id); + if (!meta || !meta->tx() || !meta->tx()->IsSigned()) { + return std::nullopt; + } + return meta->tx()->GetSignedTransaction(); +} + std::unique_ptr EthTxManager::GetTxForTesting( const std::string& tx_meta_id) { return GetEthTxStateManager().GetEthTx(tx_meta_id); diff --git a/components/brave_wallet/browser/eth_tx_manager.h b/components/brave_wallet/browser/eth_tx_manager.h index 1f2894e5a17..1aecb6a4350 100644 --- a/components/brave_wallet/browser/eth_tx_manager.h +++ b/components/brave_wallet/browser/eth_tx_manager.h @@ -47,16 +47,21 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer { void AddUnapprovedEvmTransaction( mojom::NewEvmTransactionParamsPtr params, - const std::optional& origin, + AddUnapprovedEvmTransactionCallback callback); + void AddUnapprovedEvmDappTransaction( + mojom::TxData1559Ptr tx_data_1559, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback); + void AddUnapprovedEvmDappTransaction( + mojom::TxDataPtr tx_data, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, AddUnapprovedEvmTransactionCallback callback); // TxManager - void AddUnapprovedTransaction(const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) override; void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) override; void SpeedupOrCancelTransaction( @@ -151,6 +156,8 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer { // Gas estimation API via eth_feeHistory API void GetGasEstimation1559(const std::string& chain_id, GetGasEstimation1559Callback callback); + std::optional GetSignedTransaction( + const std::string& tx_meta_id); static bool ValidateTxData(const mojom::TxDataPtr& tx_data, std::string* error); @@ -166,16 +173,19 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer { mojom::CoinType GetCoinType() const override; - void AddUnapprovedTransaction(mojom::TxDataPtr tx_data, - const mojom::AccountIdPtr& from, - const url::Origin& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback); - void AddUnapproved1559Transaction(mojom::TxData1559Ptr tx_data, - const mojom::AccountIdPtr& from, - const url::Origin& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback); + void AddUnapprovedTransactionInternal(mojom::TxDataPtr tx_data, + const mojom::AccountIdPtr& from, + const url::Origin& origin, + bool sign_only, + mojom::SwapInfoPtr swap_info, + AddUnapprovedEvmTransactionCallback); + void AddUnapproved1559TransactionInternal( + mojom::TxData1559Ptr tx_data, + const mojom::AccountIdPtr& from, + const url::Origin& origin, + bool sign_only, + mojom::SwapInfoPtr swap_info, + AddUnapprovedEvmTransactionCallback); void NotifyUnapprovedTxUpdated(TxMeta* meta); void OnConnectionError(); @@ -205,7 +215,7 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer { const std::string& data, const std::string& gas_limit, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedEvmTransactionCallback callback, bool sign_only, mojom::SwapInfoPtr swap_info, const std::string& result, @@ -215,7 +225,7 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer { const mojom::AccountIdPtr& from, const std::optional& origin, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedEvmTransactionCallback callback, bool sign_only, mojom::SwapInfoPtr swap_info, const std::string& result, @@ -238,7 +248,7 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer { const std::string& data, const std::string& gas_limit, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedEvmTransactionCallback callback, bool sign_only, mojom::SwapInfoPtr swap_info, mojom::GasEstimation1559Ptr gas_estimation); diff --git a/components/brave_wallet/browser/eth_tx_manager_unittest.cc b/components/brave_wallet/browser/eth_tx_manager_unittest.cc index 42d2073c92e..bbada5bdccc 100644 --- a/components/brave_wallet/browser/eth_tx_manager_unittest.cc +++ b/components/brave_wallet/browser/eth_tx_manager_unittest.cc @@ -254,11 +254,8 @@ class EthTxManagerUnitTest : public testing::Test { base::SequencedTaskRunner::GetCurrentDefault()); WaitForTxStorageDelegateInitialized(tx_service_->GetDelegateForTesting()); - keyring_service_->CreateWallet("testing123", base::DoNothing()); - task_environment_.RunUntilIdle(); - keyring_service_->AddAccountSync(mojom::CoinType::ETH, - mojom::KeyringId::kDefault, "Account 1"); - task_environment_.RunUntilIdle(); + GetAccountUtils().CreateWallet(kMnemonicAbandonAbandon, + kTestWalletPassword); ASSERT_TRUE(base::HexStringToBytes( "095ea7b3000000000000000000000000BFb30a082f650C2A15D0632f0e87bE4F8e6446" @@ -312,7 +309,7 @@ class EthTxManagerUnitTest : public testing::Test { auto tx_data = mojom::TxData::New(chain_id, nonce, gas_price, "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data, false, std::nullopt); + "0x016345785d8a0000", data); auto tx = EthTransaction::FromTxData(tx_data, false); ASSERT_TRUE(tx); @@ -344,7 +341,7 @@ class EthTxManagerUnitTest : public testing::Test { auto tx_data1559 = mojom::TxData1559::New( mojom::TxData::New(chain_id, nonce, "", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data, false, std::nullopt), + "0x016345785d8a0000", data), max_priority_fee_per_gas, max_fee_per_gas); auto tx1559 = Eip1559Transaction::FromTxData(tx_data1559, false); @@ -377,42 +374,29 @@ class EthTxManagerUnitTest : public testing::Test { EXPECT_TRUE(callback_called); } - void AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - EthTxManager::AddUnapprovedTransactionCallback callback) { - eth_tx_manager()->AddUnapprovedTransaction( - chain_id, std::move(tx_data), from, origin, std::move(swap_info), - std::move(callback)); - } - void AddUnapprovedEvmTransaction( mojom::NewEvmTransactionParamsPtr params, - const std::optional& origin, EthTxManager::AddUnapprovedEvmTransactionCallback callback) { - eth_tx_manager()->AddUnapprovedEvmTransaction(std::move(params), origin, + eth_tx_manager()->AddUnapprovedEvmTransaction(std::move(params), std::move(callback)); } - void AddUnapprovedTransaction( + void AddUnapprovedEvmDappTransaction( mojom::TxDataPtr tx_data, const mojom::AccountIdPtr& from, - mojom::SwapInfoPtr swap_info, - EthTxManager::AddUnapprovedTransactionCallback callback) { - eth_tx_manager()->AddUnapprovedTransaction( - std::move(tx_data), from, GetOrigin(), std::move(swap_info), + EthTxManager::AddUnapprovedEvmTransactionCallback callback) { + eth_tx_manager()->AddUnapprovedEvmDappTransaction( + std::move(tx_data), from.Clone(), GetOrigin(), false, std::move(callback)); } - void AddUnapproved1559Transaction( + void AddUnapprovedEvmDappTransaction( mojom::TxData1559Ptr tx_data, const mojom::AccountIdPtr& from, - EthTxManager::AddUnapprovedTransactionCallback callback) { - eth_tx_manager()->AddUnapproved1559Transaction( - std::move(tx_data), from, GetOrigin(), nullptr, std::move(callback)); + EthTxManager::AddUnapprovedEvmTransactionCallback callback) { + eth_tx_manager()->AddUnapprovedEvmDappTransaction( + std::move(tx_data), from.Clone(), GetOrigin(), false, + std::move(callback)); } void TestMakeERC1155TransferFromDataTxType( @@ -478,12 +462,12 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithGasPriceAndGasLimit) { auto tx_data = mojom::TxData::New("0x1", "0x06", gas_price, gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -513,7 +497,7 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedEvmTransaction) { bool callback_called = false; std::string tx_meta_id; AddUnapprovedEvmTransaction( - std::move(params), std::nullopt, + std::move(params), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -537,7 +521,7 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedEvmTransaction) { bool callback_called = false; std::string tx_meta_id; AddUnapprovedEvmTransaction( - std::move(params), std::nullopt, + std::move(params), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -560,7 +544,7 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedEvmTransaction) { bool callback_called = false; std::string tx_meta_id; AddUnapprovedEvmTransaction( - std::move(params), std::nullopt, + std::move(params), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -578,14 +562,14 @@ TEST_F(EthTxManagerUnitTest, WalletOrigin) { auto tx_data = mojom::TxData::New(mojom::kLocalhostChainId, "0x06", "0x09184e72a000", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - mojom::kLocalhostChainId, - mojom::TxDataUnion::NewEthTxData(std::move(tx_data)), from(), - std::nullopt, nullptr, + AddUnapprovedEvmTransaction( + mojom::NewEvmTransactionParams::New( + "0x1", from(), "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", "0x0974", data_, nullptr), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -601,13 +585,13 @@ TEST_F(EthTxManagerUnitTest, SomeSiteOrigin) { auto tx_data = mojom::TxData::New("0x1", "0x06", "0x09184e72a000", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - "0x1", mojom::TxDataUnion::NewEthTxData(std::move(tx_data)), from(), - url::Origin::Create(GURL("https://some.site.com")), nullptr, + eth_tx_manager()->AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), + url::Origin::Create(GURL("https://some.site.com")), false, base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -625,12 +609,12 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithoutGasLimit) { auto tx_data = mojom::TxData::New("0x1", "0x06", gas_price, "" /* gas_limit */, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - tx_data.Clone(), from(), nullptr, + AddUnapprovedEvmDappTransaction( + tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -674,13 +658,12 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithoutGasLimit) { tx_data = mojom::TxData::New("0x1", "0x06", gas_price, "" /* gas_limit */, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_decoded, false, - std::nullopt); + "0x016345785d8a0000", data_decoded); SetErrorInterceptor(); callback_called = false; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); task_environment_.RunUntilIdle(); @@ -699,12 +682,12 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithoutGasPrice) { auto tx_data = mojom::TxData::New("0x1", "0x06", "" /* gas_price */, gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - tx_data.Clone(), from(), nullptr, + AddUnapprovedEvmDappTransaction( + tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -723,8 +706,8 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithoutGasPrice) { SetErrorInterceptor(); callback_called = false; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionFailureCallback, &callback_called)); task_environment_.RunUntilIdle(); @@ -736,12 +719,12 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData::New("0x1", "0x06", "" /* gas_price */, "" /* gas_limit */, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - tx_data.Clone(), from(), nullptr, + AddUnapprovedEvmDappTransaction( + tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -759,8 +742,8 @@ TEST_F(EthTxManagerUnitTest, SetErrorInterceptor(); callback_called = false; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionFailureCallback, &callback_called)); task_environment_.RunUntilIdle(); @@ -769,15 +752,15 @@ TEST_F(EthTxManagerUnitTest, TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithoutGasPriceAndGasLimitForEthSend) { - auto tx_data = mojom::TxData::New( - "0x1", "0x06", "" /* gas_price*/, "" /* gas_limit */, - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - std::vector(), false, std::nullopt); + auto tx_data = + mojom::TxData::New("0x1", "0x06", "" /* gas_price*/, "" /* gas_limit */, + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", std::vector()); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -795,15 +778,15 @@ TEST_F(EthTxManagerUnitTest, } TEST_F(EthTxManagerUnitTest, SetGasPriceAndLimitForUnapprovedTransaction) { - auto tx_data = mojom::TxData::New( - "0x1", "0x06", "" /* gas_price*/, "" /* gas_limit */, - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - std::vector(), false, std::nullopt); + auto tx_data = + mojom::TxData::New("0x1", "0x06", "" /* gas_price*/, "" /* gas_limit */, + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", std::vector()); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -888,11 +871,11 @@ TEST_F(EthTxManagerUnitTest, SetDataForUnapprovedTransaction) { auto tx_data = mojom::TxData::New( "0x1", "0x06", "0x11" /* gas_price*/, "0x22" /* gas_limit */, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - initial_data, false, std::nullopt); + initial_data); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); task_environment_.RunUntilIdle(); @@ -939,11 +922,11 @@ TEST_F(EthTxManagerUnitTest, SetNonceForUnapprovedTransaction) { auto tx_data = mojom::TxData::New( "0x1", "0x06", "0x11" /* gas_price*/, "0x22" /* gas_limit */, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - std::vector(), false, std::nullopt); + std::vector()); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); task_environment_.RunUntilIdle(); @@ -1015,10 +998,10 @@ TEST_F(EthTxManagerUnitTest, SetNonceForUnapprovedTransaction) { } TEST_F(EthTxManagerUnitTest, ValidateTxData) { - auto valid_tx_data = mojom::TxData::New( - "0x1", "0x06", "0x09184e72a000", "0x0974", - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - std::vector({1, 2, 3}), false, std::nullopt); + auto valid_tx_data = + mojom::TxData::New("0x1", "0x06", "0x09184e72a000", "0x0974", + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", std::vector({1, 2, 3})); std::string error_message; EXPECT_TRUE(EthTxManager::ValidateTxData(valid_tx_data, &error_message)); @@ -1070,8 +1053,7 @@ TEST_F(EthTxManagerUnitTest, ValidateTxData1559) { mojom::TxData1559::New( mojom::TxData::New("0x4", "0x00", "", "0x00", "0x0101010101010101010101010101010101010101", - "0x00", std::vector(), false, - std::nullopt), + "0x00", std::vector()), "0x0", "0x1"), &error_message)); @@ -1080,8 +1062,7 @@ TEST_F(EthTxManagerUnitTest, ValidateTxData1559) { mojom::TxData1559::New( mojom::TxData::New("0x4", "0x00", "0x1", "0x00", "0x0101010101010101010101010101010101010101", - "0x00", std::vector(), false, - std::nullopt), + "0x00", std::vector()), "0x0", "0x1"), &error_message)); } @@ -1090,12 +1071,12 @@ TEST_F(EthTxManagerUnitTest, ProcessEthHardwareSignature) { auto tx_data = mojom::TxData::New("0x1", "0x06", "" /* gas_price */, "" /* gas_limit */, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - tx_data.Clone(), from(), nullptr, + AddUnapprovedEvmDappTransaction( + tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); TestTxServiceObserver observer("0x6", "", "", "", "", std::vector(), @@ -1135,13 +1116,13 @@ TEST_F(EthTxManagerUnitTest, ProcessEthHardwareSignature) { TEST_F(EthTxManagerUnitTest, ProcessEthHardwareSignatureFail) { auto tx_data = mojom::TxData::New( mojom::kLocalhostChainId, "0x06", "" /* gas_price */, "" /* gas_limit */, - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", data_, - false, std::nullopt); + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", + data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - tx_data.Clone(), from(), nullptr, + AddUnapprovedEvmDappTransaction( + tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); TestTxServiceObserver observer("0x6", "", "", "", "", std::vector(), @@ -1200,13 +1181,13 @@ TEST_F(EthTxManagerUnitTest, ProcessEthHardwareSignatureFail) { TEST_F(EthTxManagerUnitTest, GetNonceForHardwareTransaction) { auto tx_data = mojom::TxData::New( mojom::kLocalhostChainId, "", "" /* gas_price */, "" /* gas_limit */, - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", data_, - false, std::nullopt); + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", + data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - tx_data.Clone(), from(), nullptr, + AddUnapprovedEvmDappTransaction( + tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1252,13 +1233,13 @@ TEST_F(EthTxManagerUnitTest, GetNonceForHardwareTransaction1559) { auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x4", "0x00", "", "0x01", "0x0101010101010101010101010101010101010101", "0x00", - std::vector(), false, std::nullopt), + std::vector()), "0x1", "0x1"); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( tx_data.Clone(), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1329,13 +1310,13 @@ TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionWithGasFeeAndLimit) { auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x04", "0x1", "", gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "0x77359400" /* 2 Gwei */, "0xb2d05e000" /* 48 Gwei */); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1357,13 +1338,13 @@ TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionWithoutGasLimit) { auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", "", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "0x77359400" /* 2 Gwei */, "0xb2d05e000" /* 48 Gwei */); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1386,13 +1367,13 @@ TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionWithoutGasFee) { auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1415,13 +1396,13 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", "", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1473,13 +1454,13 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1535,13 +1516,13 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", "", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1580,11 +1561,11 @@ TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionFeeHistoryFailed) { auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", "0x9604", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "", ""); bool callback_called = false; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionFailureCallback, &callback_called)); @@ -1596,15 +1577,15 @@ TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionFeeHistoryFailed) { TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionWithoutGasFeeAndLimitForEthSend) { auto tx_data = mojom::TxData1559::New( - mojom::TxData::New( - "0x1", "0x1", "", "", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", std::vector(), false, std::nullopt), + mojom::TxData::New("0x1", "0x1", "", "", + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", std::vector()), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1629,14 +1610,13 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", std::vector(), false, - std::nullopt), + "0x016345785d8a0000", std::vector()), "0x77359400" /* 2 Gwei */, "0xb2d05e000" /* 48 Gwei */); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1657,14 +1637,14 @@ TEST_F(EthTxManagerUnitTest, TEST_F(EthTxManagerUnitTest, AddUnapproved1559TransactionWithoutGasLimitForEthSend) { auto tx_data = mojom::TxData1559::New( - mojom::TxData::New( - "0x1", "0x1", "", "", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", std::vector(), false, std::nullopt), + mojom::TxData::New("0x1", "0x1", "", "", + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", std::vector()), "0x77359400" /* 2 Gwei */, "0xb2d05e000" /* 48 Gwei */); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1688,14 +1668,13 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", gas_limit, "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", std::vector(), false, - std::nullopt), + "0x016345785d8a0000", std::vector()), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1719,12 +1698,12 @@ TEST_F(EthTxManagerUnitTest, SetGasFeeAndLimitForUnapprovedTransaction) { auto tx_data = mojom::TxData1559::New( mojom::TxData::New("0x1", "0x1", "", "", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "", ""); bool callback_called = false; std::string tx_meta_id; - AddUnapproved1559Transaction( + AddUnapprovedEvmDappTransaction( std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -1834,12 +1813,12 @@ TEST_F(EthTxManagerUnitTest, auto tx_data = mojom::TxData::New("0x1", "0x06", "0x09184e72a000", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); bool callback_called = false; std::string tx_meta_id; - AddUnapprovedTransaction( - std::move(tx_data), from(), nullptr, + AddUnapprovedEvmDappTransaction( + std::move(tx_data), from(), base::BindOnce(&AddUnapprovedTransactionSuccessCallback, &callback_called, &tx_meta_id)); @@ -2153,7 +2132,7 @@ TEST_F(EthTxManagerUnitTest, RetryTransaction) { auto tx_data = mojom::TxData::New(mojom::kMainnetChainId, "0x07", "0x17fcf18322", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt); + "0x016345785d8a0000", data_); auto tx = EthTransaction::FromTxData(tx_data, false); ASSERT_TRUE(tx); @@ -2181,7 +2160,7 @@ TEST_F(EthTxManagerUnitTest, RetryTransaction) { auto tx_data1559 = mojom::TxData1559::New( mojom::TxData::New("0x539", "0x08", "", "0x0974", "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", - "0x016345785d8a0000", data_, false, std::nullopt), + "0x016345785d8a0000", data_), "0x77359400" /* 2 Gwei */, "0xb2d05e000" /* 48 Gwei */); auto tx1559 = Eip1559Transaction::FromTxData(tx_data1559, false); @@ -2352,10 +2331,10 @@ TEST_F(EthTxManagerUnitTest, Reset) { meta.set_id("001"); meta.set_chain_id(mojom::kLocalhostChainId); meta.set_status(mojom::TransactionStatus::Unapproved); - auto tx_data = mojom::TxData::New( - mojom::kMainnetChainId, "0x1", "0x1", "0x0974", - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - std::vector(), false, std::nullopt); + auto tx_data = + mojom::TxData::New(mojom::kMainnetChainId, "0x1", "0x1", "0x0974", + "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", + "0x016345785d8a0000", std::vector()); auto tx = EthTransaction::FromTxData(tx_data, false); meta.set_tx(std::make_unique(*tx)); ASSERT_TRUE(eth_tx_manager()->tx_state_manager().AddOrUpdateTx(meta)); @@ -2395,15 +2374,19 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithSwapInfo) { swap_info->recipient = ""; swap_info->provider = mojom::SwapProvider::kZeroEx; - auto data = mojom::TxData::New( - mojom::kMainnetChainId, "0x01", "0x09184e72a000", "0x0974", - "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000", - std::vector({0x00, 0x01, 0x02}), false, std::nullopt); + auto params = mojom::NewEvmTransactionParams::New(); + params->chain_id = mojom::kMainnetChainId; + params->from = from(); + params->to = "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c"; + params->value = "0x016345785d8a0000"; + params->data = std::vector({0x00, 0x01, 0x02}); + params->swap_info = swap_info.Clone(); base::test::TestFuture add_tx_future; - AddUnapprovedTransaction(std::move(data), from(), swap_info.Clone(), - add_tx_future.GetCallback()); + eth_tx_manager()->AddUnapprovedEvmTransaction(std::move(params), + add_tx_future.GetCallback()); + auto [success, tx_meta_id, error_message] = add_tx_future.Take(); ASSERT_FALSE(tx_meta_id.empty()); @@ -2414,4 +2397,40 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedTransactionWithSwapInfo) { EXPECT_EQ(tx_meta->swap_info(), swap_info); } +TEST_F(EthTxManagerUnitTest, GetSignedTransaction) { + auto params = mojom::NewEvmTransactionParams::New(); + params->chain_id = mojom::kMainnetChainId; + params->from = from(); + params->to = "0xbe862ad9abfe6f22bcb087716c7d89a26051f74c"; + params->value = "0x016345785d8a0000"; + params->data = std::vector({0x00, 0x01, 0x02}); + + base::test::TestFuture + add_tx_future; + eth_tx_manager()->AddUnapprovedEvmTransaction(std::move(params), + add_tx_future.GetCallback()); + + auto [success, tx_meta_id, error_message] = add_tx_future.Take(); + ASSERT_FALSE(tx_meta_id.empty()); + + EXPECT_EQ(eth_tx_manager()->GetSignedTransaction(tx_meta_id), std::nullopt); + + // Set an interceptor and just fake a common response for + // eth_getTransactionCount and eth_sendRawTransaction + SetInterceptor("{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0x0\"}"); + + base::test::TestFuture + approve_tx_future; + eth_tx_manager()->ApproveTransaction(tx_meta_id, + approve_tx_future.GetCallback()); + + EXPECT_TRUE(approve_tx_future.Wait()); + + EXPECT_EQ(eth_tx_manager()->GetSignedTransaction(tx_meta_id), + "0x02f87601808477359400850b2d05e00082960494be862ad9abfe6f22bcb08771" + "6c7d89a26051f74c88016345785d8a000083000102c080a0353cfbd58e495f3f39" + "32e9f39c21358ea1bddf6bc873b2c56ec18d21ba19226da016f887fee07e5fa871" + "591135699691adda8d2df99383a4a16172eca36421077a"); +} + } // namespace brave_wallet diff --git a/components/brave_wallet/browser/eth_tx_meta.cc b/components/brave_wallet/browser/eth_tx_meta.cc index 7e77630c589..8e7e6016a34 100644 --- a/components/brave_wallet/browser/eth_tx_meta.cc +++ b/components/brave_wallet/browser/eth_tx_meta.cc @@ -163,8 +163,7 @@ mojom::TransactionInfoPtr EthTxMeta::ToTransactionInfo() const { tx_->nonce() ? Uint256ValueToHex(tx_->nonce().value()) : "", Uint256ValueToHex(tx_->gas_price()), Uint256ValueToHex(tx_->gas_limit()), tx_->GetToChecksumAddress(), - Uint256ValueToHex(tx_->value()), tx_->data(), sign_only_, - signed_transaction), + Uint256ValueToHex(tx_->value()), tx_->data()), max_priority_fee_per_gas, max_fee_per_gas)), status_, tx_type, tx_params, tx_args, base::Milliseconds(created_time_.InMillisecondsSinceUnixEpoch()), diff --git a/components/brave_wallet/browser/eth_tx_meta_unittest.cc b/components/brave_wallet/browser/eth_tx_meta_unittest.cc index 91845b6f3a2..55208f95afd 100644 --- a/components/brave_wallet/browser/eth_tx_meta_unittest.cc +++ b/components/brave_wallet/browser/eth_tx_meta_unittest.cc @@ -27,11 +27,11 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo) { mojom::AccountKind::kDerived, from_address); // type 0 - std::unique_ptr tx = std::make_unique( - *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt))); + std::unique_ptr tx = + std::make_unique(*EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector()))); EthTxMeta meta(eth_account_id, std::move(tx)); base::Time::Exploded x{1981, 3, 0, 1, 2}; base::Time confirmed_time = meta.confirmed_time(); @@ -75,8 +75,7 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo) { std::make_unique(*Eip2930Transaction::FromTxData( mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", std::vector(), - false, std::nullopt))); + "0x0de0b6b3a7640000", std::vector()))); auto* access_list = tx1->access_list(); Eip2930Transaction::AccessListItem item_a; item_a.address.fill(0x0a); @@ -117,8 +116,7 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo) { *Eip1559Transaction::FromTxData(mojom::TxData1559::New( mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", std::vector(), - false, std::nullopt), + "0x0de0b6b3a7640000", std::vector()), "0x1E", "0x32"))); EthTxMeta meta2(eth_account_id, std::move(tx2)); mojom::TransactionInfoPtr ti2 = meta2.ToTransactionInfo(); @@ -168,8 +166,7 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo_FinalRecipientTest) { mojom::TxData::New(mojom::kFilecoinEthereumMainnetChainId, "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", data, false, - std::nullopt), + "0x0de0b6b3a7640000", data), "0x1E", "0x32"))); EthTxMeta meta(eth_account_id, std::move(tx)); @@ -188,10 +185,10 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo_FinalRecipientTest) { std::unique_ptr tx = std::make_unique( *Eip1559Transaction::FromTxData(mojom::TxData1559::New( - mojom::TxData::New( - mojom::kSepoliaChainId, "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", encoded_data, false, std::nullopt), + mojom::TxData::New(mojom::kSepoliaChainId, "0x09", + "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", encoded_data), "0x1E", "0x32"))); EthTxMeta meta(eth_account_id, std::move(tx)); @@ -211,10 +208,10 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo_FinalRecipientTest) { std::unique_ptr tx = std::make_unique( *Eip1559Transaction::FromTxData(mojom::TxData1559::New( - mojom::TxData::New( - mojom::kSepoliaChainId, "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", encoded_data, false, std::nullopt), + mojom::TxData::New(mojom::kSepoliaChainId, "0x09", + "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", encoded_data), "0x1E", "0x32"))); EthTxMeta meta(eth_account_id, std::move(tx)); @@ -234,10 +231,10 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo_FinalRecipientTest) { std::unique_ptr tx = std::make_unique( *Eip1559Transaction::FromTxData(mojom::TxData1559::New( - mojom::TxData::New( - mojom::kSepoliaChainId, "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", encoded_data, false, std::nullopt), + mojom::TxData::New(mojom::kSepoliaChainId, "0x09", + "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", encoded_data), "0x1E", "0x32"))); EthTxMeta meta(eth_account_id, std::move(tx)); @@ -250,11 +247,10 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo_FinalRecipientTest) { std::unique_ptr tx = std::make_unique( *Eip1559Transaction::FromTxData(mojom::TxData1559::New( - mojom::TxData::New(mojom::kSepoliaChainId, "0x09", - "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", std::vector(), - false, std::nullopt), + mojom::TxData::New( + mojom::kSepoliaChainId, "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector()), "0x1E", "0x32"))); EthTxMeta meta(eth_account_id, std::move(tx)); diff --git a/components/brave_wallet/browser/eth_tx_state_manager_unittest.cc b/components/brave_wallet/browser/eth_tx_state_manager_unittest.cc index aaf329154d3..be56ae7965a 100644 --- a/components/brave_wallet/browser/eth_tx_state_manager_unittest.cc +++ b/components/brave_wallet/browser/eth_tx_state_manager_unittest.cc @@ -67,11 +67,11 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaAndValue) { "0x2f015c60e0be116b1f0cd534704db9c92118fb6a")); // type 0 - std::unique_ptr tx = std::make_unique( - *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt))); + std::unique_ptr tx = + std::make_unique(*EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector()))); EthTxMeta meta(eth_account_id, std::move(tx)); meta.set_id(TxMeta::GenerateMetaID()); meta.set_status(mojom::TransactionStatus::Submitted); @@ -126,8 +126,7 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaAndValue) { std::make_unique(*Eip2930Transaction::FromTxData( mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", std::vector(), - false, std::nullopt))); + "0x0de0b6b3a7640000", std::vector()))); auto* access_list = tx1->access_list(); Eip2930Transaction::AccessListItem item_a; item_a.address.fill(0x0a); @@ -151,8 +150,7 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaAndValue) { *Eip1559Transaction::FromTxData(mojom::TxData1559::New( mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208", "0x3535353535353535353535353535353535353535", - "0x0de0b6b3a7640000", std::vector(), - false, std::nullopt), + "0x0de0b6b3a7640000", std::vector()), "0x1E", "0x32"))); EthTxMeta meta2(eth_account_id, std::move(tx2)); base::DictValue value2 = meta2.ToValue(); @@ -164,11 +162,11 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaAndValue) { EXPECT_EQ(*tx_from_value2, *static_cast(meta2.tx())); // test sign_only - std::unique_ptr tx3 = std::make_unique( - *EthTransaction::FromTxData(mojom::TxData::New( - "0x3", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt))); + std::unique_ptr tx3 = + std::make_unique(*EthTransaction::FromTxData( + mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector()))); EthTxMeta meta3(eth_account_id, std::move(tx3)); meta3.set_sign_only(true); base::DictValue meta_value3 = meta3.ToValue(); @@ -188,11 +186,11 @@ TEST_F(EthTxStateManagerUnitTest, MetaChainIdUsedWhenTxChainIdMissing) { mojom::AccountKind::kDerived, "0x2f015c60e0be116b1f0cd534704db9c92118fb6a")); - std::unique_ptr tx = std::make_unique( - *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt))); + std::unique_ptr tx = + std::make_unique(*EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector()))); EthTxMeta meta(eth_account_id, std::move(tx)); meta.set_chain_id(mojom::kMainnetChainId); base::DictValue meta_value = meta.ToValue(); diff --git a/components/brave_wallet/browser/ethereum_keyring_unittest.cc b/components/brave_wallet/browser/ethereum_keyring_unittest.cc index ef0ca8b52c2..353b9e4cbdf 100644 --- a/components/brave_wallet/browser/ethereum_keyring_unittest.cc +++ b/components/brave_wallet/browser/ethereum_keyring_unittest.cc @@ -107,10 +107,10 @@ TEST(EthereumKeyringUnitTest, Accounts) { TEST(EthereumKeyringUnitTest, SignTransaction) { // Specific signature check is in eth_transaction_unittest.cc EthereumKeyring keyring({}, base::BindRepeating(IsAddressAllowed)); - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector())); keyring.SignTransaction("0xDEADBEEFdeadbeefdeadbeefdeadbeefDEADBEEF", &tx); EXPECT_FALSE(tx.IsSigned()); @@ -235,10 +235,10 @@ TEST(EthereumKeyringUnitTest, ImportedAccounts) { message, 0, false)); // Sign Transaction - EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New( - "0x1", "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt)); + EthTransaction tx = *EthTransaction::FromTxData( + mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector())); keyring.SignTransaction("0xbE93f9BacBcFFC8ee6663f2647917ed7A20a57BB", &tx); EXPECT_FALSE(tx.IsSigned()); diff --git a/components/brave_wallet/browser/ethereum_provider_impl.cc b/components/brave_wallet/browser/ethereum_provider_impl.cc index 51a789b4312..b92f6c950e9 100644 --- a/components/brave_wallet/browser/ethereum_provider_impl.cc +++ b/components/brave_wallet/browser/ethereum_provider_impl.cc @@ -322,7 +322,6 @@ void EthereumProviderImpl::SendOrSignTransactionInternal( } tx_data_1559->base_data->chain_id = chain->chain_id; - tx_data_1559->base_data->sign_only = sign_only; const auto account_id = FindAuthenticatedAccountByAddress(from, id, callback); if (!account_id) { @@ -331,16 +330,15 @@ void EthereumProviderImpl::SendOrSignTransactionInternal( const bool is_eip_1559_network = brave_wallet_service_->network_manager()->IsEip1559Chain(chain->chain_id); if (is_eip_1559_network && ShouldCreate1559Tx(*tx_data_1559)) { - tx_service_->AddUnapprovedTransactionWithOrigin( - mojom::TxDataUnion::NewEthTxData1559(std::move(tx_data_1559)), - chain->chain_id, account_id.Clone(), nullptr, origin_, + tx_service_->AddUnapprovedEvmDappTransaction( + std::move(tx_data_1559), account_id.Clone(), origin_, sign_only, base::BindOnce(&EthereumProviderImpl::OnAddUnapprovedTransactionAdapter, weak_factory_.GetWeakPtr(), std::move(callback), std::move(id))); } else { - tx_service_->AddUnapprovedTransactionWithOrigin( - mojom::TxDataUnion::NewEthTxData(std::move(tx_data_1559->base_data)), - chain->chain_id, account_id.Clone(), nullptr, origin_, + tx_service_->AddUnapprovedEvmDappTransaction( + std::move(tx_data_1559->base_data), account_id.Clone(), origin_, + sign_only, base::BindOnce(&EthereumProviderImpl::OnAddUnapprovedTransactionAdapter, weak_factory_.GetWeakPtr(), std::move(callback), std::move(id))); @@ -1529,19 +1527,16 @@ void EthereumProviderImpl::OnTransactionStatusChanged( formed_response = base::Value(tx_hash); reject = false; } else if (tx_status == mojom::TransactionStatus::Signed) { - std::string signed_transaction; - if (tx_info->tx_data_union->is_eth_tx_data()) { - DCHECK(tx_info->tx_data_union->get_eth_tx_data()->signed_transaction); - signed_transaction = - *tx_info->tx_data_union->get_eth_tx_data()->signed_transaction; - } else if (tx_info->tx_data_union->is_eth_tx_data_1559()) { - DCHECK(tx_info->tx_data_union->get_eth_tx_data_1559() - ->base_data->signed_transaction); - signed_transaction = *tx_info->tx_data_union->get_eth_tx_data_1559() - ->base_data->signed_transaction; + auto signed_transaction = tx_service_->GetEthSignedTransaction(tx_meta_id); + if (signed_transaction) { + formed_response = base::Value(*signed_transaction); + reject = false; + } else { + formed_response = GetProviderErrorDictionary( + mojom::ProviderError::kInternalError, + l10n_util::GetStringUTF8(IDS_WALLET_SEND_TRANSACTION_ERROR)); + reject = true; } - formed_response = base::Value(signed_transaction); - reject = false; } else if (tx_status == mojom::TransactionStatus::Rejected) { formed_response = GetProviderErrorDictionary( mojom::ProviderError::kUserRejectedRequest, diff --git a/components/brave_wallet/browser/fil_tx_manager.cc b/components/brave_wallet/browser/fil_tx_manager.cc index 40c024819de..0c53b90a847 100644 --- a/components/brave_wallet/browser/fil_tx_manager.cc +++ b/components/brave_wallet/browser/fil_tx_manager.cc @@ -47,11 +47,12 @@ FilTxManager::~FilTxManager() { GetFilBlockTracker().RemoveObserver(this); } -void FilTxManager::GetEstimatedGas(const std::string& chain_id, - const mojom::AccountIdPtr& from, - const std::optional& origin, - std::unique_ptr tx, - AddUnapprovedTransactionCallback callback) { +void FilTxManager::GetEstimatedGas( + const std::string& chain_id, + const mojom::AccountIdPtr& from, + const std::optional& origin, + std::unique_ptr tx, + AddUnapprovedFilecoinTransactionCallback callback) { const std::string gas_premium = tx->gas_premium(); const std::string gas_fee_cap = tx->gas_fee_cap(); auto gas_limit = tx->gas_limit(); @@ -72,7 +73,7 @@ void FilTxManager::ContinueAddUnapprovedTransaction( const mojom::AccountIdPtr& from, const std::optional& origin, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedFilecoinTransactionCallback callback, const std::string& gas_premium, const std::string& gas_fee_cap, int64_t gas_limit, @@ -102,17 +103,15 @@ void FilTxManager::ContinueAddUnapprovedTransaction( std::move(callback).Run(true, meta.id(), ""); } -void FilTxManager::AddUnapprovedTransaction( +void FilTxManager::AddUnapprovedFilecoinTransaction( const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, + mojom::FilTxDataPtr fil_tx_data, const mojom::AccountIdPtr& from, const std::optional& origin, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - DCHECK(tx_data_union->is_fil_tx_data()); + AddUnapprovedFilecoinTransactionCallback callback) { const bool is_mainnet = chain_id == mojom::kFilecoinMainnet; - auto tx = - FilTransaction::FromTxData(is_mainnet, tx_data_union->get_fil_tx_data()); + auto tx = FilTransaction::FromTxData(is_mainnet, fil_tx_data); if (!tx) { std::move(callback).Run( false, "", diff --git a/components/brave_wallet/browser/fil_tx_manager.h b/components/brave_wallet/browser/fil_tx_manager.h index f689b84bc40..2ce80ca9ac5 100644 --- a/components/brave_wallet/browser/fil_tx_manager.h +++ b/components/brave_wallet/browser/fil_tx_manager.h @@ -27,6 +27,13 @@ class FilTransaction; class FilTxManager : public TxManager, public FilBlockTracker::Observer { public: + using AddUnapprovedFilecoinTransactionCallback = + mojom::TxService::AddUnapprovedFilecoinTransactionCallback; + using GetFilTransactionMessageToSignCallback = + mojom::FilTxManagerProxy::GetFilTransactionMessageToSignCallback; + using ProcessFilHardwareSignatureCallback = + mojom::FilTxManagerProxy::ProcessFilHardwareSignatureCallback; + FilTxManager(TxService& tx_service, JsonRpcService* json_rpc_service, KeyringService& keyring_service, @@ -36,17 +43,13 @@ class FilTxManager : public TxManager, public FilBlockTracker::Observer { FilTxManager(const FilTxManager&) = delete; FilTxManager operator=(const FilTxManager&) = delete; - using GetFilTransactionMessageToSignCallback = - mojom::FilTxManagerProxy::GetFilTransactionMessageToSignCallback; - using ProcessFilHardwareSignatureCallback = - mojom::FilTxManagerProxy::ProcessFilHardwareSignatureCallback; - - void AddUnapprovedTransaction(const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) override; + void AddUnapprovedFilecoinTransaction( + const std::string& chain_id, + mojom::FilTxDataPtr fil_tx_data, + const mojom::AccountIdPtr& from, + const std::optional& origin, + mojom::SwapInfoPtr swap_info, + AddUnapprovedFilecoinTransactionCallback callback); void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) override; void GetFilTransactionMessageToSign( @@ -71,7 +74,7 @@ class FilTxManager : public TxManager, public FilBlockTracker::Observer { const mojom::AccountIdPtr& from_account_id, const std::optional& origin, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback); + AddUnapprovedFilecoinTransactionCallback callback); std::unique_ptr GetTxForTesting(const std::string& tx_meta_id); private: @@ -98,7 +101,7 @@ class FilTxManager : public TxManager, public FilBlockTracker::Observer { const mojom::AccountIdPtr& from_account_id, const std::optional& origin, std::unique_ptr tx, - AddUnapprovedTransactionCallback callback, + AddUnapprovedFilecoinTransactionCallback callback, const std::string& gas_premium, const std::string& gas_fee_cap, int64_t gas_limit, diff --git a/components/brave_wallet/browser/fil_tx_manager_unittest.cc b/components/brave_wallet/browser/fil_tx_manager_unittest.cc index c379a133b78..b6fc61ac723 100644 --- a/components/brave_wallet/browser/fil_tx_manager_unittest.cc +++ b/components/brave_wallet/browser/fil_tx_manager_unittest.cc @@ -148,11 +148,9 @@ class FilTxManagerUnitTest : public testing::Test { const mojom::AccountIdPtr& from, const std::optional& origin, std::string* meta_id) { - auto tx_data_union = mojom::TxDataUnion::NewFilTxData(std::move(tx_data)); - base::RunLoop run_loop; - fil_tx_manager()->AddUnapprovedTransaction( - chain_id, std::move(tx_data_union), from, origin, nullptr, + fil_tx_manager()->AddUnapprovedFilecoinTransaction( + chain_id, std::move(tx_data), from, origin, nullptr, base::BindLambdaForTesting([&](bool success, const std::string& id, const std::string& err_message) { ASSERT_TRUE(success); diff --git a/components/brave_wallet/browser/polkadot/polkadot_tx_manager.cc b/components/brave_wallet/browser/polkadot/polkadot_tx_manager.cc index c9922796503..e45916ea1b9 100644 --- a/components/brave_wallet/browser/polkadot/polkadot_tx_manager.cc +++ b/components/brave_wallet/browser/polkadot/polkadot_tx_manager.cc @@ -45,18 +45,6 @@ PolkadotTxManager::~PolkadotTxManager() { GetPolkadotBlockTracker().RemoveObserver(this); } -void PolkadotTxManager::AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - NOTIMPLEMENTED_LOG_ONCE(); - - std::move(callback).Run(false, "", "Not implemented"); -} - std::unique_ptr PolkadotTxManager::GetPolkadotTx( const std::string& tx_meta_id) { auto tx_meta = tx_state_manager().GetTx(tx_meta_id); diff --git a/components/brave_wallet/browser/polkadot/polkadot_tx_manager.h b/components/brave_wallet/browser/polkadot/polkadot_tx_manager.h index 1b367ef630d..300703ca48a 100644 --- a/components/brave_wallet/browser/polkadot/polkadot_tx_manager.h +++ b/components/brave_wallet/browser/polkadot/polkadot_tx_manager.h @@ -15,7 +15,6 @@ #include "brave/components/brave_wallet/browser/polkadot/polkadot_tx_meta.h" #include "brave/components/brave_wallet/browser/tx_manager.h" #include "brave/components/brave_wallet/common/brave_wallet.mojom.h" -#include "url/origin.h" namespace brave_wallet { @@ -42,14 +41,6 @@ class PolkadotTxManager : public TxManager, PolkadotTxManager& operator=(const PolkadotTxManager&) = delete; // TxManager - void AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) override; - void AddUnapprovedPolkadotTransaction( mojom::NewPolkadotTransactionParamsPtr params, AddUnapprovedPolkadotTransactionCallback callback); diff --git a/components/brave_wallet/browser/polkadot/polkadot_tx_manager_unittest.cc b/components/brave_wallet/browser/polkadot/polkadot_tx_manager_unittest.cc index 7ae302d5448..58087545cc7 100644 --- a/components/brave_wallet/browser/polkadot/polkadot_tx_manager_unittest.cc +++ b/components/brave_wallet/browser/polkadot/polkadot_tx_manager_unittest.cc @@ -140,28 +140,6 @@ TEST_F(PolkadotTxManagerUnitTest, GetCoinType) { EXPECT_EQ(polkadot_tx_manager_->GetCoinType(), mojom::CoinType::DOT); } -TEST_F(PolkadotTxManagerUnitTest, AddUnapprovedTransaction) { - auto tx_data_union = mojom::TxDataUnion::NewPolkadotTxData( - mojom::PolkadotTxdata::New("", Uint128ToMojom(uint128_t{0}), - Uint128ToMojom(uint128_t{0}), false)); - - auto account_id = mojom::AccountId::New(); - account_id->coin = mojom::CoinType::DOT; - account_id->keyring_id = mojom::KeyringId::kPolkadotMainnet; - account_id->kind = mojom::AccountKind::kDerived; - account_id->address = "test_address"; - - polkadot_tx_manager_->AddUnapprovedTransaction( - "polkadot_mainnet", std::move(tx_data_union), account_id, std::nullopt, - nullptr, - base::BindOnce([](bool success, const std::string& tx_meta_id, - const std::string& error_message) { - EXPECT_FALSE(success); - EXPECT_TRUE(tx_meta_id.empty()); - EXPECT_EQ(error_message, "Not implemented"); - })); -} - namespace { // Use the BOB account here: @@ -489,7 +467,7 @@ TEST_F(PolkadotTxManagerUnitTest, ApproveTransaction_NoTransaction) { } TEST_F(PolkadotTxManagerUnitTest, ApproveTransaction_RejectedExtrinsic) { - // Prove that we can handle the case where the RPC nodes reject the exrinsic + // Prove that we can handle the case where the RPC nodes reject the extrinsic // outright without returning a transaction hash. polkadot_mock_rpc_->RejectExtrinsicSubmission(); @@ -544,7 +522,7 @@ TEST_F(PolkadotTxManagerUnitTest, ApproveTransaction_RejectedExtrinsic) { } TEST_F(PolkadotTxManagerUnitTest, ApproveTransaction_NetworkFailure) { - // Prove that we can handle the case where an intermitent network failure + // Prove that we can handle the case where an intermittent network failure // during extrinsic signing fails. polkadot_mock_rpc_->AddReqResPairs(); diff --git a/components/brave_wallet/browser/simulation_request_helper_unittest.cc b/components/brave_wallet/browser/simulation_request_helper_unittest.cc index 3884f41897c..670cc0158c6 100644 --- a/components/brave_wallet/browser/simulation_request_helper_unittest.cc +++ b/components/brave_wallet/browser/simulation_request_helper_unittest.cc @@ -42,8 +42,7 @@ mojom::TransactionInfoPtr GetCannedScanEVMTransactionParams( "0x3", "0x09", "0x4a817c800", "0x5208", is_deploy_contract ? "0x" : "0x3535353535353535353535353535353535353535", "0xde0b6b3a7640000", - is_eth_send ? std::vector() : std::vector(1, 10u), - false, std::nullopt); + is_eth_send ? std::vector() : std::vector(1, 10u)); auto tx = eip1559 ? std::make_unique( diff --git a/components/brave_wallet/browser/simulation_service_unittest.cc b/components/brave_wallet/browser/simulation_service_unittest.cc index 508e494685c..ecc1d197edc 100644 --- a/components/brave_wallet/browser/simulation_service_unittest.cc +++ b/components/brave_wallet/browser/simulation_service_unittest.cc @@ -10,9 +10,7 @@ #include #include -#include "base/memory/scoped_refptr.h" #include "base/test/bind.h" -#include "base/test/gtest_util.h" #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" @@ -29,7 +27,6 @@ #include "brave/components/brave_wallet/browser/solana_tx_meta.h" #include "brave/components/brave_wallet/browser/test_utils.h" #include "brave/components/brave_wallet/common/brave_wallet.mojom.h" -#include "brave/components/brave_wallet/common/common_utils.h" #include "brave/components/brave_wallet/common/features.h" #include "brave/components/brave_wallet/common/test_utils.h" #include "components/grit/brave_components_strings.h" @@ -128,10 +125,10 @@ class SimulationServiceUnitTest : public testing::Test { mojom::TransactionInfoPtr GetCannedScanEVMTransactionParams( bool eip1559, const std::string& chain_id) { - auto base_tx_data = mojom::TxData::New( - chain_id, "0x09", "0x4a817c800", "0x5208", - "0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000", - std::vector(), false, std::nullopt); + auto base_tx_data = + mojom::TxData::New(chain_id, "0x09", "0x4a817c800", "0x5208", + "0x3535353535353535353535353535353535353535", + "0x0de0b6b3a7640000", std::vector()); if (eip1559) { std::unique_ptr tx = diff --git a/components/brave_wallet/browser/solana_provider_impl.cc b/components/brave_wallet/browser/solana_provider_impl.cc index 81a80b6c6fb..156c387b1fa 100644 --- a/components/brave_wallet/browser/solana_provider_impl.cc +++ b/components/brave_wallet/browser/solana_provider_impl.cc @@ -543,10 +543,10 @@ void SolanaProviderImpl::SignAndSendTransaction( tx.set_send_options( SolanaTransaction::SendOptions::FromValue(std::move(send_options))); - tx_service_->AddUnapprovedTransactionWithOrigin( - mojom::TxDataUnion::NewSolanaTxData(tx.ToSolanaTxData()), + tx_service_->AddUnapprovedSolanaDappTransaction( + tx.ToSolanaTxData(), json_rpc_service_->GetChainIdSync(mojom::CoinType::SOL, origin_), - account->account_id.Clone(), nullptr, origin_, + account->account_id.Clone(), origin_, base::BindOnce(&SolanaProviderImpl::OnAddUnapprovedTransaction, weak_factory_.GetWeakPtr(), std::move(callback))); } diff --git a/components/brave_wallet/browser/solana_tx_manager.cc b/components/brave_wallet/browser/solana_tx_manager.cc index d4ef3994bbc..f8d74d51370 100644 --- a/components/brave_wallet/browser/solana_tx_manager.cc +++ b/components/brave_wallet/browser/solana_tx_manager.cc @@ -206,17 +206,14 @@ SolanaTxManager::~SolanaTxManager() { GetSolanaBlockTracker().RemoveObserver(this); } -void SolanaTxManager::AddUnapprovedTransaction( +void SolanaTxManager::AddUnapprovedSolanaTransaction( const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, + mojom::SolanaTxDataPtr solana_tx_data, const mojom::AccountIdPtr& from, const std::optional& origin, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - DCHECK(tx_data_union->is_solana_tx_data()); - - auto tx = SolanaTransaction::FromSolanaTxData( - std::move(tx_data_union->get_solana_tx_data())); + AddUnapprovedSolanaTransactionCallback callback) { + auto tx = SolanaTransaction::FromSolanaTxData(std::move(solana_tx_data)); if (!tx) { std::move(callback).Run( false, "", @@ -260,7 +257,7 @@ void SolanaTxManager::AddUnapprovedTransaction( } void SolanaTxManager::ContinueAddUnapprovedTransaction( - AddUnapprovedTransactionCallback callback, + AddUnapprovedSolanaTransactionCallback callback, std::unique_ptr meta, mojom::SolanaFeeEstimationPtr estimation, mojom::SolanaProviderError error, diff --git a/components/brave_wallet/browser/solana_tx_manager.h b/components/brave_wallet/browser/solana_tx_manager.h index dc56c570563..2fec1c8d304 100644 --- a/components/brave_wallet/browser/solana_tx_manager.h +++ b/components/brave_wallet/browser/solana_tx_manager.h @@ -31,6 +31,9 @@ struct SolanaAccountInfo; class SolanaTxManager : public TxManager, public SolanaBlockTracker::Observer { public: + using AddUnapprovedSolanaTransactionCallback = + mojom::TxService::AddUnapprovedSolanaTransactionCallback; + SolanaTxManager(TxService& tx_service, JsonRpcService* json_rpc_service, KeyringService& keyring_service, @@ -38,13 +41,15 @@ class SolanaTxManager : public TxManager, public SolanaBlockTracker::Observer { AccountResolverDelegate& account_resolver_delegate); ~SolanaTxManager() override; + void AddUnapprovedSolanaTransaction( + const std::string& chain_id, + mojom::SolanaTxDataPtr solana_tx_data, + const mojom::AccountIdPtr& from, + const std::optional& origin, + mojom::SwapInfoPtr swap_info, + AddUnapprovedSolanaTransactionCallback callback); + // TxManager - void AddUnapprovedTransaction(const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) override; void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) override; @@ -210,7 +215,7 @@ class SolanaTxManager : public TxManager, public SolanaBlockTracker::Observer { const std::string& error_message); void ContinueAddUnapprovedTransaction( - AddUnapprovedTransactionCallback callback, + AddUnapprovedSolanaTransactionCallback callback, std::unique_ptr meta, mojom::SolanaFeeEstimationPtr estimation, mojom::SolanaProviderError error, diff --git a/components/brave_wallet/browser/solana_tx_manager_unittest.cc b/components/brave_wallet/browser/solana_tx_manager_unittest.cc index 61fae034007..2463ce35c2e 100644 --- a/components/brave_wallet/browser/solana_tx_manager_unittest.cc +++ b/components/brave_wallet/browser/solana_tx_manager_unittest.cc @@ -409,12 +409,9 @@ class SolanaTxManagerUnitTest : public testing::Test { const mojom::AccountIdPtr& from, const std::optional& origin, std::string* meta_id) { - auto tx_data_union = - mojom::TxDataUnion::NewSolanaTxData(std::move(solana_tx_data)); - base::RunLoop run_loop; - solana_tx_manager()->AddUnapprovedTransaction( - chain_id, std::move(tx_data_union), from, origin, nullptr, + solana_tx_manager()->AddUnapprovedSolanaTransaction( + chain_id, std::move(solana_tx_data), from, origin, nullptr, base::BindLambdaForTesting([&](bool success, const std::string& id, const std::string& err_message) { ASSERT_TRUE(success); @@ -2198,13 +2195,10 @@ TEST_F(SolanaTxManagerUnitTest, AddUnapprovedTransactionWithSwapInfo) { std::vector(), nullptr, nullptr, nullptr); - auto tx_data_union = - mojom::TxDataUnion::NewSolanaTxData(std::move(solana_tx_data)); - base::test::TestFuture add_tx_future; - solana_tx_manager()->AddUnapprovedTransaction( - mojom::kSolanaMainnet, std::move(tx_data_union), from_account, + solana_tx_manager()->AddUnapprovedSolanaTransaction( + mojom::kSolanaMainnet, std::move(solana_tx_data), from_account, GetOrigin(), swap_info.Clone(), add_tx_future.GetCallback()); auto [success, tx_meta_id, error_message] = add_tx_future.Take(); ASSERT_FALSE(tx_meta_id.empty()); diff --git a/components/brave_wallet/browser/tx_manager.h b/components/brave_wallet/browser/tx_manager.h index d1abfeaabe6..0a7f2c5e8e6 100644 --- a/components/brave_wallet/browser/tx_manager.h +++ b/components/brave_wallet/browser/tx_manager.h @@ -34,8 +34,6 @@ class TxManager : public TxStateManager::Observer, KeyringService& keyring_service); ~TxManager() override; - using AddUnapprovedTransactionCallback = - mojom::TxService::AddUnapprovedTransactionCallback; using ApproveTransactionCallback = mojom::TxService::ApproveTransactionCallback; using RejectTransactionCallback = mojom::TxService::RejectTransactionCallback; @@ -43,13 +41,6 @@ class TxManager : public TxStateManager::Observer, mojom::TxService::SpeedupOrCancelTransactionCallback; using RetryTransactionCallback = mojom::TxService::RetryTransactionCallback; - virtual void AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) = 0; virtual void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) = 0; virtual void RejectTransaction(const std::string& tx_meta_id, diff --git a/components/brave_wallet/browser/tx_service.cc b/components/brave_wallet/browser/tx_service.cc index b2a9070a221..e7d9c7a223c 100644 --- a/components/brave_wallet/browser/tx_service.cc +++ b/components/brave_wallet/browser/tx_service.cc @@ -11,7 +11,6 @@ #include "base/check.h" #include "base/check_is_test.h" #include "base/check_op.h" -#include "base/notreached.h" #include "brave/components/brave_wallet/browser/account_resolver_delegate_impl.h" #include "brave/components/brave_wallet/browser/bitcoin/bitcoin_tx_manager.h" #include "brave/components/brave_wallet/browser/blockchain_registry.h" @@ -37,42 +36,6 @@ namespace brave_wallet { namespace { -std::string GetToAddressFromTxDataUnion( - const mojom::TxDataUnion& tx_data_union) { - if (tx_data_union.is_eth_tx_data_1559()) { - return tx_data_union.get_eth_tx_data_1559()->base_data->to; - } - - if (tx_data_union.is_eth_tx_data()) { - return tx_data_union.get_eth_tx_data()->to; - } - - if (tx_data_union.is_solana_tx_data()) { - return tx_data_union.get_solana_tx_data()->to_wallet_address; - } - - if (tx_data_union.is_fil_tx_data()) { - return tx_data_union.get_fil_tx_data()->to; - } - - if (tx_data_union.is_btc_tx_data()) { - return tx_data_union.get_btc_tx_data()->to; - } - - if (tx_data_union.is_zec_tx_data()) { - return tx_data_union.get_zec_tx_data()->to; - } - - if (tx_data_union.is_cardano_tx_data()) { - return tx_data_union.get_cardano_tx_data()->to; - } - - if (tx_data_union.is_polkadot_tx_data()) { - return tx_data_union.get_polkadot_tx_data()->to; - } - NOTREACHED(); -} - size_t CalculatePendingTxCount( const std::vector& result) { size_t counter = 0u; @@ -218,62 +181,59 @@ void TxService::Bind(mojo::PendingReceiver receiver) { btc_tx_manager_receivers_.Add(this, std::move(receiver)); } -void TxService::AddUnapprovedTransaction( - mojom::TxDataUnionPtr tx_data_union, - const std::string& chain_id, +void TxService::AddUnapprovedEvmDappTransaction( + mojom::TxData1559Ptr tx_data_1559, mojom::AccountIdPtr from, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - CHECK_NE(from->coin, mojom::CoinType::ETH) - << "Wallet UI must use AddUnapprovedEvmTransaction"; - CHECK_NE(from->coin, mojom::CoinType::BTC) - << "Wallet UI must use AddUnapprovedBitcoinTransaction"; - CHECK_NE(from->coin, mojom::CoinType::ZEC) - << "Wallet UI must use AddUnapprovedZCashTransaction"; - CHECK_NE(from->coin, mojom::CoinType::ADA) - << "Wallet UI must use AddUnapprovedCardanoTransaction"; - AddUnapprovedTransactionWithOrigin(std::move(tx_data_union), chain_id, - std::move(from), std::move(swap_info), - std::nullopt, std::move(callback)); -} - -void TxService::AddUnapprovedTransactionWithOrigin( - mojom::TxDataUnionPtr tx_data_union, - const std::string& chain_id, - mojom::AccountIdPtr from, - mojom::SwapInfoPtr swap_info, - const std::optional& origin, - AddUnapprovedTransactionCallback callback) { - if (!account_resolver_delegate_->ValidateAccountId(from)) { - std::move(callback).Run( - false, "", - l10n_util::GetStringUTF8(IDS_WALLET_SEND_TRANSACTION_FROM_EMPTY)); - return; - } - + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback) { if (BlockchainRegistry::GetInstance()->IsRestrictedAddress( - GetToAddressFromTxDataUnion(*tx_data_union))) { + tx_data_1559->base_data->to)) { std::move(callback).Run(false, "", WalletRestrictedAddressErrorMessage()); return; } - auto coin_type = GetCoinTypeFromTxDataUnion(*tx_data_union); - GetTxManager(coin_type)->AddUnapprovedTransaction( - chain_id, std::move(tx_data_union), from, origin, std::move(swap_info), + GetEthTxManager()->AddUnapprovedEvmDappTransaction( + std::move(tx_data_1559), std::move(from), origin, sign_only, + std::move(callback)); +} + +void TxService::AddUnapprovedEvmDappTransaction( + mojom::TxDataPtr tx_data, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback) { + if (BlockchainRegistry::GetInstance()->IsRestrictedAddress(tx_data->to)) { + std::move(callback).Run(false, "", WalletRestrictedAddressErrorMessage()); + return; + } + + GetEthTxManager()->AddUnapprovedEvmDappTransaction( + std::move(tx_data), std::move(from), origin, sign_only, + std::move(callback)); +} + +void TxService::AddUnapprovedSolanaDappTransaction( + mojom::SolanaTxDataPtr solana_tx_data, + const std::string& chain_id, + mojom::AccountIdPtr from, + const url::Origin& origin, + AddUnapprovedSolanaTransactionCallback callback) { + if (BlockchainRegistry::GetInstance()->IsRestrictedAddress( + solana_tx_data->to_wallet_address)) { + std::move(callback).Run(false, "", WalletRestrictedAddressErrorMessage()); + return; + } + + GetSolanaTxManager()->AddUnapprovedSolanaTransaction( + chain_id, std::move(solana_tx_data), from, origin, nullptr, std::move(callback)); } void TxService::AddUnapprovedEvmTransaction( mojom::NewEvmTransactionParamsPtr params, AddUnapprovedEvmTransactionCallback callback) { - AddUnapprovedEvmTransactionWithOrigin(std::move(params), std::nullopt, - std::move(callback)); -} - -void TxService::AddUnapprovedEvmTransactionWithOrigin( - mojom::NewEvmTransactionParamsPtr params, - const std::optional& origin, - AddUnapprovedEvmTransactionCallback callback) { CHECK_EQ(params->from->coin, mojom::CoinType::ETH); if (!account_resolver_delegate_->ValidateAccountId(params->from)) { std::move(callback).Run( @@ -287,10 +247,43 @@ void TxService::AddUnapprovedEvmTransactionWithOrigin( return; } - GetEthTxManager()->AddUnapprovedEvmTransaction(std::move(params), origin, + GetEthTxManager()->AddUnapprovedEvmTransaction(std::move(params), std::move(callback)); } +void TxService::AddUnapprovedSolanaTransaction( + mojom::SolanaTxDataPtr solana_tx_data, + const std::string& chain_id, + mojom::AccountIdPtr from, + mojom::SwapInfoPtr swap_info, + AddUnapprovedSolanaTransactionCallback callback) { + if (BlockchainRegistry::GetInstance()->IsRestrictedAddress( + solana_tx_data->to_wallet_address)) { + std::move(callback).Run(false, "", WalletRestrictedAddressErrorMessage()); + return; + } + + GetSolanaTxManager()->AddUnapprovedSolanaTransaction( + chain_id, std::move(solana_tx_data), from, std::nullopt, + std::move(swap_info), std::move(callback)); +} + +void TxService::AddUnapprovedFilecoinTransaction( + mojom::FilTxDataPtr fil_tx_data, + const std::string& chain_id, + mojom::AccountIdPtr from, + mojom::SwapInfoPtr swap_info, + AddUnapprovedFilecoinTransactionCallback callback) { + if (BlockchainRegistry::GetInstance()->IsRestrictedAddress(fil_tx_data->to)) { + std::move(callback).Run(false, "", WalletRestrictedAddressErrorMessage()); + return; + } + + GetFilTxManager()->AddUnapprovedFilecoinTransaction( + chain_id, std::move(fil_tx_data), from, std::nullopt, + std::move(swap_info), std::move(callback)); +} + void TxService::AddUnapprovedBitcoinTransaction( mojom::NewBitcoinTransactionParamsPtr params, AddUnapprovedBitcoinTransactionCallback callback) { @@ -397,6 +390,11 @@ mojom::TransactionInfoPtr TxService::GetTransactionInfoSync( return GetTxManager(coin_type)->GetTransactionInfo(tx_meta_id); } +std::optional TxService::GetEthSignedTransaction( + const std::string& tx_meta_id) { + return GetEthTxManager()->GetSignedTransaction(tx_meta_id); +} + void TxService::GetAllTransactionInfo( mojom::CoinType coin_type, const std::optional& chain_id, diff --git a/components/brave_wallet/browser/tx_service.h b/components/brave_wallet/browser/tx_service.h index 3b87db92465..6ff967fbf40 100644 --- a/components/brave_wallet/browser/tx_service.h +++ b/components/brave_wallet/browser/tx_service.h @@ -75,27 +75,41 @@ class TxService : public mojom::TxService, template void Bind(mojo::PendingReceiver receiver); + void AddUnapprovedEvmDappTransaction( + mojom::TxData1559Ptr tx_data_1559, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback); + void AddUnapprovedEvmDappTransaction( + mojom::TxDataPtr tx_data, + mojom::AccountIdPtr from, + const url::Origin& origin, + bool sign_only, + AddUnapprovedEvmTransactionCallback callback); + void AddUnapprovedSolanaDappTransaction( + mojom::SolanaTxDataPtr solana_tx_data, + const std::string& chain_id, + mojom::AccountIdPtr from, + const url::Origin& origin, + AddUnapprovedSolanaTransactionCallback callback); + // mojom::TxService - void AddUnapprovedTransaction( - mojom::TxDataUnionPtr tx_data_union, - const std::string& chain_id, - mojom::AccountIdPtr from, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) override; - void AddUnapprovedTransactionWithOrigin( - mojom::TxDataUnionPtr tx_data_union, - const std::string& chain_id, - mojom::AccountIdPtr from, - mojom::SwapInfoPtr swap_info, - const std::optional& origin, - AddUnapprovedTransactionCallback callback); void AddUnapprovedEvmTransaction( mojom::NewEvmTransactionParamsPtr params, AddUnapprovedEvmTransactionCallback callback) override; - void AddUnapprovedEvmTransactionWithOrigin( - mojom::NewEvmTransactionParamsPtr params, - const std::optional& origin, - AddUnapprovedEvmTransactionCallback callback); + void AddUnapprovedSolanaTransaction( + mojom::SolanaTxDataPtr solana_tx_data, + const std::string& chain_id, + mojom::AccountIdPtr from, + mojom::SwapInfoPtr swap_info, + AddUnapprovedSolanaTransactionCallback callback) override; + void AddUnapprovedFilecoinTransaction( + mojom::FilTxDataPtr fil_tx_data, + const std::string& chain_id, + mojom::AccountIdPtr from, + mojom::SwapInfoPtr swap_info, + AddUnapprovedFilecoinTransactionCallback callback) override; void AddUnapprovedBitcoinTransaction( mojom::NewBitcoinTransactionParamsPtr params, AddUnapprovedBitcoinTransactionCallback callback) override; @@ -122,6 +136,8 @@ class TxService : public mojom::TxService, mojom::TransactionInfoPtr GetTransactionInfoSync( mojom::CoinType coin_type, const std::string& tx_meta_id); + std::optional GetEthSignedTransaction( + const std::string& tx_meta_id); void GetAllTransactionInfo(mojom::CoinType coin_type, const std::optional& chain_id, mojom::AccountIdPtr from, diff --git a/components/brave_wallet/browser/zcash/zcash_tx_manager.cc b/components/brave_wallet/browser/zcash/zcash_tx_manager.cc index 6b9363d00cb..3f16c7bce32 100644 --- a/components/brave_wallet/browser/zcash/zcash_tx_manager.cc +++ b/components/brave_wallet/browser/zcash/zcash_tx_manager.cc @@ -13,7 +13,6 @@ #include "base/functional/bind.h" #include "base/notimplemented.h" -#include "base/notreached.h" #include "brave/components/brave_wallet/browser/zcash/zcash_block_tracker.h" #include "brave/components/brave_wallet/browser/zcash/zcash_transaction.h" #include "brave/components/brave_wallet/browser/zcash/zcash_tx_meta.h" @@ -48,16 +47,6 @@ void ZCashTxManager::OnLatestHeightUpdated(const std::string& chain_id, UpdatePendingTransactions(chain_id); } -void ZCashTxManager::AddUnapprovedTransaction( - const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback) { - NOTREACHED() << "AddUnapprovedZCashTransaction must be used"; -} - void ZCashTxManager::AddUnapprovedZCashTransaction( mojom::NewZCashTransactionParamsPtr params, AddUnapprovedZCashTransactionCallback callback) { @@ -124,7 +113,7 @@ void ZCashTxManager::ContinueAddUnapprovedTransaction( const mojom::AccountIdPtr& from, const std::optional& origin, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback, + AddUnapprovedZCashTransactionCallback callback, base::expected zcash_transaction) { if (!zcash_transaction.has_value()) { std::move(callback).Run(false, "", zcash_transaction.error()); diff --git a/components/brave_wallet/browser/zcash/zcash_tx_manager.h b/components/brave_wallet/browser/zcash/zcash_tx_manager.h index f945656538c..9ab0552ae40 100644 --- a/components/brave_wallet/browser/zcash/zcash_tx_manager.h +++ b/components/brave_wallet/browser/zcash/zcash_tx_manager.h @@ -6,14 +6,12 @@ #ifndef BRAVE_COMPONENTS_BRAVE_WALLET_BROWSER_ZCASH_ZCASH_TX_MANAGER_H_ #define BRAVE_COMPONENTS_BRAVE_WALLET_BROWSER_ZCASH_ZCASH_TX_MANAGER_H_ -#include #include #include #include "base/scoped_observation.h" #include "brave/components/brave_wallet/browser/tx_manager.h" #include "brave/components/brave_wallet/browser/zcash/zcash_block_tracker.h" -#include "brave/components/brave_wallet/browser/zcash/zcash_rpc.h" #include "brave/components/brave_wallet/browser/zcash/zcash_transaction.h" #include "brave/components/brave_wallet/browser/zcash/zcash_wallet_service.h" @@ -54,12 +52,6 @@ class ZCashTxManager : public TxManager, public ZCashBlockTracker::Observer { uint32_t latest_height) override; // TxManager - void AddUnapprovedTransaction(const std::string& chain_id, - mojom::TxDataUnionPtr tx_data_union, - const mojom::AccountIdPtr& from, - const std::optional& origin, - mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback) override; void ApproveTransaction(const std::string& tx_meta_id, ApproveTransactionCallback) override; @@ -77,7 +69,7 @@ class ZCashTxManager : public TxManager, public ZCashBlockTracker::Observer { const mojom::AccountIdPtr& from, const std::optional& origin, mojom::SwapInfoPtr swap_info, - AddUnapprovedTransactionCallback callback, + AddUnapprovedZCashTransactionCallback callback, base::expected zcash_transaction); void ContinueApproveTransaction(const std::string& tx_meta_id, diff --git a/components/brave_wallet/common/brave_wallet.mojom b/components/brave_wallet/common/brave_wallet.mojom index 047784144cc..37ae7139d90 100644 --- a/components/brave_wallet/common/brave_wallet.mojom +++ b/components/brave_wallet/common/brave_wallet.mojom @@ -1643,8 +1643,6 @@ struct TxData { string to; string value; array data; - bool sign_only; - string? signed_transaction; }; struct GasEstimation1559 { @@ -2764,13 +2762,19 @@ struct NewPolkadotTransactionParams { // For transaction management such as creation, broadcasting, and storing // transactions. interface TxService { - AddUnapprovedTransaction(TxDataUnion tx_data_union, - string chain_id, - AccountId from, - SwapInfo? swap_info) + AddUnapprovedEvmTransaction(NewEvmTransactionParams params) => (bool success, string tx_meta_id, string error_message); - AddUnapprovedEvmTransaction(NewEvmTransactionParams params) + AddUnapprovedSolanaTransaction(SolanaTxData tx_data, + string chain_id, + AccountId from, + SwapInfo? swap_info) + => (bool success, string tx_meta_id, string error_message); + + AddUnapprovedFilecoinTransaction(FilTxData tx_data, + string chain_id, + AccountId from, + SwapInfo? swap_info) => (bool success, string tx_meta_id, string error_message); AddUnapprovedBitcoinTransaction(NewBitcoinTransactionParams params) diff --git a/components/brave_wallet_ui/common/constants/mocks.ts b/components/brave_wallet_ui/common/constants/mocks.ts index a212a14574b..a9a5be768e0 100644 --- a/components/brave_wallet_ui/common/constants/mocks.ts +++ b/components/brave_wallet_ui/common/constants/mocks.ts @@ -64,8 +64,6 @@ export const getMockedTransactionInfo = nonce: '0x03', gasLimit: '0x5208', // 2100 gasPrice: '0x22ecb25c00', // 150 Gwei - signOnly: false, - signedTransaction: undefined, }, maxPriorityFeePerGas: '', maxFeePerGas: '', diff --git a/components/brave_wallet_ui/common/slices/endpoints/transaction.endpoints.ts b/components/brave_wallet_ui/common/slices/endpoints/transaction.endpoints.ts index ce91f97f80e..b64fba28969 100644 --- a/components/brave_wallet_ui/common/slices/endpoints/transaction.endpoints.ts +++ b/components/brave_wallet_ui/common/slices/endpoints/transaction.endpoints.ts @@ -49,7 +49,7 @@ import { import { makeSerializableTransaction } from '../../../utils/model-serialization-utils' import { getCoinFromTxDataUnion } from '../../../utils/network-utils' import { TX_CACHE_TAGS } from '../../../utils/query-cache-utils' -import { sortTransactionByDate, toTxDataUnion } from '../../../utils/tx-utils' +import { sortTransactionByDate } from '../../../utils/tx-utils' import { signLedgerEthereumTransaction, signLedgerFilecoinTransaction, @@ -215,18 +215,15 @@ export const transactionEndpoints = ({ try { const { solanaTxManagerProxy, txService } = baseQuery(undefined).data - const { - error, - errorMessage: transferTxDataErrorMessage, - txData, - } = await solanaTxManagerProxy // - .makeSystemProgramTransferTxData( - payload.fromAccount.address, - payload.to, - BigInt(payload.value), - ) + const { errorMessage: transferTxDataErrorMessage, txData } = + await solanaTxManagerProxy // + .makeSystemProgramTransferTxData( + payload.fromAccount.address, + payload.to, + BigInt(payload.value), + ) - if (error && transferTxDataErrorMessage) { + if (!txData || transferTxDataErrorMessage) { throw new Error( 'Failed to make SOL system program transfer txData): ' + transferTxDataErrorMessage || 'unknown error', @@ -234,8 +231,8 @@ export const transactionEndpoints = ({ } const { errorMessage, success } = - await txService.addUnapprovedTransaction( - toTxDataUnion({ solanaTxData: txData ?? undefined }), + await txService.addUnapprovedSolanaTransaction( + txData, payload.network.chainId, payload.fromAccount.accountId, payload.swapInfo ?? null, @@ -298,8 +295,8 @@ export const transactionEndpoints = ({ } const { errorMessage, success } = - await txService.addUnapprovedTransaction( - toTxDataUnion({ solanaTxData: txData }), + await txService.addUnapprovedSolanaTransaction( + txData, payload.network.chainId, payload.fromAccount.accountId, payload.swapInfo ?? null, @@ -360,15 +357,15 @@ export const transactionEndpoints = ({ payload.sendOptions || null, ) - if (result.error !== BraveWallet.ProviderError.kSuccess) { + if (!result.txData) { throw new Error( `Failed to sign Solana message: ${result.errorMessage}`, ) } const { errorMessage, success } = - await txService.addUnapprovedTransaction( - toTxDataUnion({ solanaTxData: result.txData ?? undefined }), + await txService.addUnapprovedSolanaTransaction( + result.txData, payload.chainId, payload.accountId, payload.swapInfo ?? null, @@ -819,8 +816,8 @@ export const transactionEndpoints = ({ } const { errorMessage, success } = - await txService.addUnapprovedTransaction( - toTxDataUnion({ filTxData: filTxData }), + await txService.addUnapprovedFilecoinTransaction( + filTxData, payload.network.chainId, payload.fromAccount.accountId, payload.swapInfo ?? null, diff --git a/components/brave_wallet_ui/stories/mock-data/mock-transaction-info.ts b/components/brave_wallet_ui/stories/mock-data/mock-transaction-info.ts index dd737175405..301f2ea75cf 100644 --- a/components/brave_wallet_ui/stories/mock-data/mock-transaction-info.ts +++ b/components/brave_wallet_ui/stories/mock-data/mock-transaction-info.ts @@ -52,8 +52,6 @@ export const mockTransactionInfo: SerializableTransactionInfo = { to: mockBasicAttentionToken.contractAddress, value: '0x15ddf09c97b0000', data: Array.from(new Uint8Array(24)), - signOnly: false, - signedTransaction: undefined, }, maxPriorityFeePerGas: '80410000', // (0.08041 gwei) maxFeePerGas: '3600000000', // (3.6 gwei) @@ -545,8 +543,6 @@ export const mockERC20TransferTransaction: SerializableTransactionInfo = { data: [ 168, 0, 5, 168, 0, 5, 168, 0, 5, 168, 0, 5, 168, 0, 5, 168, 0, 5, ], - signOnly: false, - signedTransaction: 'mockSignedTx', }, }, }, diff --git a/components/brave_wallet_ui/stories/wallet-extension-panels.tsx b/components/brave_wallet_ui/stories/wallet-extension-panels.tsx index d1da36dd0cc..09a9df46764 100644 --- a/components/brave_wallet_ui/stories/wallet-extension-panels.tsx +++ b/components/brave_wallet_ui/stories/wallet-extension-panels.tsx @@ -70,8 +70,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: 'ETHEREUM ACCOUNT 2', value: '0xb1a2bc2ec50000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', @@ -109,8 +107,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: '0xcd3a3f8e0e4bdc174c9e2e63b4c22e15a7f7f92a', value: '0xb1a2bc2ec50000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', @@ -148,8 +144,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: '0x7d66c9ddAED3115d93Bd1790332f3Cd06Cf52B14', value: '0xb1a2bc2ec90000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', @@ -187,8 +181,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: '0xcd3a3f8e0e4bdc174c9e2e63b4c22e15a7f7f92a', value: '0xb1a2bc2ec90000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', @@ -226,8 +218,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: '0xcd3a3f8e0e4bdc174c9e2e63b4c22e15a7f7f92a', value: '0xb1a2bc2ec90000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', @@ -267,8 +257,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: '0xcd3a3f8e0e4bdc174c9e2e63b4c22e15a7f7f92a', value: '0xb1a2bc2ec90000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', @@ -306,8 +294,6 @@ const transactionDummyData: SerializableTransactionInfo[][] = [ nonce: '0x1', to: '0xcd3a3f8e0e4bdc174c9e2e63b4c22e15a7f7f92a', value: '0xb1a2bc2ec90000', - signOnly: false, - signedTransaction: undefined, }, maxFeePerGas: '', maxPriorityFeePerGas: '', diff --git a/components/brave_wallet_ui/utils/tx-utils.test.ts b/components/brave_wallet_ui/utils/tx-utils.test.ts index a12d8731325..9b347d61362 100644 --- a/components/brave_wallet_ui/utils/tx-utils.test.ts +++ b/components/brave_wallet_ui/utils/tx-utils.test.ts @@ -57,7 +57,6 @@ import { getTransactionTypeName, isCancelTransaction, parseSwapInfo, - toTxDataUnion, } from './tx-utils' const mockCardanoMinswapTokenIdHex = 'deadbeefcafe' @@ -736,30 +735,6 @@ describe('check for insufficient funds errors', () => { }) }) -describe('toTxDataUnion', () => { - test('works', () => { - const filTxData: BraveWallet.FilTxData = { - nonce: '', - gasPremium: '', - gasFeeCap: '', - gasLimit: '', - maxFee: '0', - to: 'to', - value: 'value', - } - - const union = toTxDataUnion({ filTxData: filTxData }) - - expect(Object.keys(union).length).toBe(1) - expect(union.filTxData).toBe(filTxData) - expect(union.ethTxData).toBe(undefined) - expect(union.ethTxData1559).toBe(undefined) - expect(union.solanaTxData).toBe(undefined) - expect(union.btcTxData).toBe(undefined) - expect(union.zecTxData).toBe(undefined) - }) -}) - describe('getIsRevokeApprovalTx', () => { test('correctly detects revocations', () => { expect( diff --git a/components/brave_wallet_ui/utils/tx-utils.ts b/components/brave_wallet_ui/utils/tx-utils.ts index 8c422ddfd76..c40cbbf4fe4 100644 --- a/components/brave_wallet_ui/utils/tx-utils.ts +++ b/components/brave_wallet_ui/utils/tx-utils.ts @@ -2149,12 +2149,6 @@ export const parseTransactionWithPrices = ({ } } -export function toTxDataUnion( - unionItem: Pick, -) { - return Object.assign({}, unionItem) as BraveWallet.TxDataUnion -} - export const isAssociatedTokenAccountCreationTx = ( tx: Pick | undefined, ) => diff --git a/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SendTokenStore.swift b/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SendTokenStore.swift index 9051e4e1e77..84ced1ce180 100644 --- a/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SendTokenStore.swift +++ b/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SendTokenStore.swift @@ -857,9 +857,8 @@ public class SendTokenStore: ObservableObject, WalletObserverStore { completion(false, errMsg) return } - let txDataUnion = BraveWallet.TxDataUnion(solanaTxData: solanaTxData) - self.txService.addUnapprovedTransaction( - txDataUnion: txDataUnion, + self.txService.addUnapprovedSolanaTransaction( + txData: solanaTxData, chainId: network.chainId, from: fromAccountInfo.accountId, swapInfo: nil @@ -924,9 +923,8 @@ public class SendTokenStore: ObservableObject, WalletObserverStore { errMsg: String, completion: @escaping (_ success: Bool, _ errMsg: String?) -> Void ) { - let txDataUnion = BraveWallet.TxDataUnion(solanaTxData: solTxData) - self.txService.addUnapprovedTransaction( - txDataUnion: txDataUnion, + self.txService.addUnapprovedSolanaTransaction( + txData: solTxData, chainId: network.chainId, from: fromAccountInfo.accountId, swapInfo: nil @@ -968,8 +966,8 @@ public class SendTokenStore: ObservableObject, WalletObserverStore { to: sendAddress, value: weiString ) - self.txService.addUnapprovedTransaction( - txDataUnion: BraveWallet.TxDataUnion(filTxData: filTxData), + self.txService.addUnapprovedFilecoinTransaction( + txData: filTxData, chainId: network.chainId, from: fromAccountId, swapInfo: nil diff --git a/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SwapTokenStore.swift b/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SwapTokenStore.swift index adc9e07ba8f..b5ace93ddeb 100644 --- a/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SwapTokenStore.swift +++ b/ios/brave-ios/Sources/BraveWallet/Crypto/Stores/SwapTokenStore.swift @@ -986,8 +986,8 @@ public class SwapTokenStore: ObservableObject, WalletObserverStore { self.state = .error(Strings.Wallet.unknownError) return false } - let (success, _, _) = await txService.addUnapprovedTransaction( - txDataUnion: .init(solanaTxData: solTxData), + let (success, _, _) = await txService.addUnapprovedSolanaTransaction( + txData: solTxData, chainId: network.chainId, from: accountInfo.accountId, swapInfo: nil diff --git a/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockContent.swift b/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockContent.swift index e66473f3ff7..c49bfcdcb0c 100644 --- a/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockContent.swift +++ b/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockContent.swift @@ -297,9 +297,7 @@ extension BraveWallet.TransactionInfo { gasLimit: "0x5208", to: "0x3f2116ef98fcab1a9c3c2d8988e0064ab59acfca", value: "0x2386f26fc10000", - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x2540be400", maxFeePerGas: "0x25b7f3d400" @@ -337,9 +335,7 @@ extension BraveWallet.TransactionInfo { data: _transactionBase64ToData( "QVVlsAAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAB4Zcboe59wJVN34CSs5mMMHqo38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4byb8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZ4WzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAA7u7u7u7u7u7u7u7u7u7u7u7u7u4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4byb8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHeEF+BjFBE5/OAQmCeAFAqgzVqwAAAAAAAAAAAAAAAAeGXG6HufcCVTd+AkrOZjDB6qN/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4byb8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAJTdXNoaVN3YXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOG8m/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWqrBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAbAtqMsNCX641XoXW4jH2LR5l1BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAADHeEF+BjFBE5/OAQmCeAFAqgzVqwAAAAAAAAAAAAAAAAeGXG6HufcCVTd+AkrOZjDB6qN/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAHhlxuh7n3AlU3fgJKzmYwweqjfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyVUAAAAAAAAAAAAAAAAqS1GGpqYin8R7ChdOXg6Y3/da6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAMd4QX4GMUETn84BCYJ4AUCqDNWrAAAAAAAAAAAAAAAAB4Zcboe59wJVN34CSs5mMMHqo38AAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhpWEzQAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkhrRRGGC+/E=" - ), - signOnly: false, - signedTransaction: nil + ) ), maxPriorityFeePerGas: "0x77359400", maxFeePerGas: "0x39bdf3b000" @@ -388,9 +384,7 @@ extension BraveWallet.TransactionInfo { value: "0x0", data: _transactionBase64ToData( "CV6nswAAAAAAAAAAAAAAAOWSQnoK7Okt4+3uHxjgFXwFhhVk//////////////////////////////////////////8=" - ), - signOnly: false, - signedTransaction: nil + ) ), maxPriorityFeePerGas: "0x77359400", maxFeePerGas: "0x39bdf3b000" @@ -431,9 +425,7 @@ extension BraveWallet.TransactionInfo { value: "0x0", data: _transactionBase64ToData( "CV6nswAAAAAAAAAAAAAAAOWSQnoK7Okt4+3uHxjgFXwFhhVk//////////////////////////////////////////8=" - ), - signOnly: false, - signedTransaction: nil + ) ), maxPriorityFeePerGas: "", maxFeePerGas: "" diff --git a/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockEthTxService.swift b/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockEthTxService.swift index ac49aa5cb33..92cbecdbc03 100644 --- a/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockEthTxService.swift +++ b/ios/brave-ios/Sources/BraveWallet/PreviewContent/MockEthTxService.swift @@ -23,8 +23,18 @@ class MockTxService: BraveWalletTxService { completion(txs.first(where: { $0.id == txMetaId })) } - func addUnapprovedTransaction( - txDataUnion: BraveWallet.TxDataUnion, + func addUnapprovedSolanaTransaction( + txData: BraveWallet.SolanaTxData, + chainId: String, + from: BraveWallet.AccountId, + swapInfo: BraveWallet.SwapInfo?, + completion: @escaping (Bool, String, String) -> Void + ) { + completion(true, "txMetaId", "") + } + + func addUnapprovedFilecoinTransaction( + txData: BraveWallet.FilTxData, chainId: String, from: BraveWallet.AccountId, swapInfo: BraveWallet.SwapInfo?, diff --git a/ios/brave-ios/Tests/BraveWalletTests/SwapTokenStoreTests.swift b/ios/brave-ios/Tests/BraveWalletTests/SwapTokenStoreTests.swift index 85fc6426320..c3a021d4319 100644 --- a/ios/brave-ios/Tests/BraveWalletTests/SwapTokenStoreTests.swift +++ b/ios/brave-ios/Tests/BraveWalletTests/SwapTokenStoreTests.swift @@ -333,7 +333,6 @@ class SwapStoreTests: XCTestCase { } } let txService = BraveWallet.TestTxService() - txService._addUnapprovedTransaction = { $4(true, "tx-meta-id", "") } let walletService = BraveWallet.TestBraveWalletService() let mockAssetManager = TestableWalletUserAssetManager() mockAssetManager._getAllUserAssetsInNetworkAssets = { _, _ in @@ -879,9 +878,9 @@ class SwapStoreTests: XCTestCase { solTxManagerProxy._makeTxDataFromBase64EncodedTransaction = { _, _, _, completion in completion(.init(), .success, "") } - var submittedTxData: BraveWallet.TxDataUnion? - txService._addUnapprovedTransaction = { txData, _, _, _, completion in - submittedTxData = txData + var submittedSolanaTxData: BraveWallet.SolanaTxData? + txService._addUnapprovedSolanaTransaction = { txData, _, _, _, completion in + submittedSolanaTxData = txData completion(true, "tx-meta-id", "") } let store = SwapTokenStore( @@ -918,7 +917,7 @@ class SwapStoreTests: XCTestCase { let success = await store.createSwapTransaction() XCTAssertTrue(success, "Expected to successfully create transaction") XCTAssertFalse(store.isMakingTx) - XCTAssertNotNil(submittedTxData?.solanaTxData) + XCTAssertNotNil(submittedSolanaTxData) } func testSwapFullBalanceNoRounding() { diff --git a/ios/brave-ios/Tests/BraveWalletTests/TransactionParserTests.swift b/ios/brave-ios/Tests/BraveWalletTests/TransactionParserTests.swift index 2e6e5d994fb..85c789764fb 100644 --- a/ios/brave-ios/Tests/BraveWalletTests/TransactionParserTests.swift +++ b/ios/brave-ios/Tests/BraveWalletTests/TransactionParserTests.swift @@ -240,9 +240,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0x5208", to: "0x0987654321098765432109876543210987654321", value: "0x1b667a56d488000", // 0.1234 - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59672ead", maxFeePerGas: "0x59672eb6" @@ -324,9 +322,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0xca48", to: BraveWallet.BlockchainToken.previewDaiToken.contractAddress, value: "0x0", - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59672ead", maxFeePerGas: "0x59672eb6" @@ -391,9 +387,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0x4be75", to: "0xDef1C0ded9bec7F1a1670819833240f027b25EfF", // 0x exchange address value: "0x1b6951ef585a000", - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59682f00", maxFeePerGas: "0x59682f09" @@ -476,9 +470,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0x4be75", to: "0xDef1C0ded9bec7F1a1670819833240f027b25EfF", // 0x exchange address value: "0x0", - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59682f00", maxFeePerGas: "0x59682f09" @@ -561,9 +553,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0xb53f", to: BraveWallet.BlockchainToken.previewDaiToken.contractAddress, value: "0x0", - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59682f00", maxFeePerGas: "0x59682f09" @@ -630,9 +620,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0xb53f", to: BraveWallet.BlockchainToken.previewDaiToken.contractAddress, value: "0x0", - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59682f00", maxFeePerGas: "0x59682f09" @@ -700,9 +688,7 @@ class TransactionParserTests: XCTestCase { gasLimit: "0x5208", to: BraveWallet.BlockchainToken.previewDaiToken.contractAddress, value: "0xde0b6b3a7640000", // 1 - data: [], - signOnly: false, - signedTransaction: nil + data: [] ), maxPriorityFeePerGas: "0x59672ead", maxFeePerGas: "0x59672eb6"