Drop signing fields from Eth TxData (#35012)

This commit is contained in:
Anton Paymyshev
2026-04-08 20:38:12 +05:30
committed by GitHub
parent 36a7014ff6
commit 1938ece2b7
52 changed files with 682 additions and 811 deletions
@@ -11,8 +11,6 @@
#include <vector>
#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<uint8_t>(), false, std::nullopt)));
std::vector<uint8_t>())));
EthTxMeta meta(EthAccount(0), std::move(tx));
meta.set_status(status);
notification_service_->OnTransactionStatusChanged(meta.ToTransactionInfo());
@@ -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(),
@@ -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<brave_wallet::mojom::SolanaMessageAddressTableLookupPtr>(),
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;
@@ -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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback) {
NOTREACHED() << "AddUnapprovedBitcoinTransaction must be used";
}
void BitcoinTxManager::ContinueAddUnapprovedTransaction(
std::unique_ptr<BitcoinTxMeta> meta,
AddUnapprovedTransactionCallback callback,
AddUnapprovedBitcoinTransactionCallback callback,
base::expected<BitcoinTransaction, std::string> bitcoin_transaction) {
if (!bitcoin_transaction.has_value()) {
std::move(callback).Run(false, "", bitcoin_transaction.error());
@@ -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<url::Origin>& 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<BitcoinTxMeta> meta,
AddUnapprovedTransactionCallback callback,
AddUnapprovedBitcoinTransactionCallback callback,
base::expected<BitcoinTransaction, std::string> bitcoin_transaction);
void ContinueApproveTransaction(const std::string& tx_meta_id,
@@ -7,7 +7,6 @@
#include <memory>
#include <optional>
#include <unordered_map>
#include <utility>
#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<url::Origin> 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<TxManager::AddUnapprovedTransactionCallback> add_callback;
base::MockCallback<BitcoinTxManager::AddUnapprovedBitcoinTransactionCallback>
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<TxManager::AddUnapprovedTransactionCallback> add_callback;
base::MockCallback<BitcoinTxManager::AddUnapprovedBitcoinTransactionCallback>
add_callback;
std::string meta_id;
EXPECT_CALL(add_callback, Run(_, _, _)).WillOnce(SaveArg<1>(&meta_id));
btc_tx_manager()->AddUnapprovedBitcoinTransaction(params.Clone(),
@@ -123,7 +123,7 @@ class BraveWalletP3AUnitTest : public testing::Test {
const std::string& chain_id,
const mojom::AccountIdPtr& from,
const std::optional<url::Origin>& origin,
TxService::AddUnapprovedTransactionCallback callback,
TxService::AddUnapprovedZCashTransactionCallback callback,
base::expected<ZCashTransaction, std::string> 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<bool, const std::string&, const std::string&> 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<bool, const std::string&, const std::string&> 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);
@@ -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<url::Origin>& 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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback,
AddUnapprovedCardanoTransactionCallback callback,
base::expected<CardanoTransaction, std::string> cardano_transaction) {
if (!cardano_transaction.has_value()) {
std::move(callback).Run(false, "", cardano_transaction.error());
@@ -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<url::Origin>& 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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback,
AddUnapprovedCardanoTransactionCallback callback,
base::expected<CardanoTransaction, std::string> cardano_transaction);
void ContinueApproveTransaction(const std::string& tx_meta_id,
@@ -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<url::Origin> 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<TxManager::AddUnapprovedTransactionCallback> add_callback;
base::MockCallback<CardanoTxManager::AddUnapprovedCardanoTransactionCallback>
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<TxManager::AddUnapprovedTransactionCallback> add_callback;
base::MockCallback<CardanoTxManager::AddUnapprovedCardanoTransactionCallback>
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<TxManager::AddUnapprovedTransactionCallback> add_callback;
base::MockCallback<CardanoTxManager::AddUnapprovedCardanoTransactionCallback>
add_callback;
std::string meta_id;
EXPECT_CALL(add_callback, Run(_, _, _))
.WillOnce(
@@ -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<uint8_t>(), false,
std::nullopt),
entry.value, std::vector<uint8_t>()),
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<uint8_t>(), false,
std::nullopt),
"0xde0b6b3a7640000", std::vector<uint8_t>()),
"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<uint8_t>{1}, false, std::nullopt),
std::vector<uint8_t>{1}),
"0x7B", "0x1C8");
auto tx = Eip1559Transaction::FromTxData(valid_tx_data);
@@ -78,10 +78,9 @@ TEST(Eip2930TransactionUnitTest, AccessListAndValue) {
TEST(Eip2930TransactionUnitTest, GetHashedMessageToSign) {
std::vector<uint8_t> 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<uint8_t>(), false, std::nullopt));
std::vector<uint8_t>()));
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<uint8_t>(), false, std::nullopt));
Eip2930Transaction tx = *Eip2930Transaction::FromTxData(
mojom::TxData::New("0x15BE", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
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<uint8_t> 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<uint8_t>(), false, std::nullopt));
std::vector<uint8_t>()));
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<uint8_t>{1}, false, std::nullopt));
std::vector<uint8_t>{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<uint8_t>{1}, false, std::nullopt));
std::vector<uint8_t>{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<uint8_t>{1}, false, std::nullopt)));
"0x2A", std::vector<uint8_t>{1})));
// But missing data is allowed when strict is false
tx = Eip2930Transaction::FromTxData(
mojom::TxData::New("0x1", "", "0x3E8", "",
"0x3535353535353535353535353535353535353535", "",
std::vector<uint8_t>{1}, false, std::nullopt),
std::vector<uint8_t>{1}),
false);
ASSERT_TRUE(tx);
// Empty nonce should be nullopt
@@ -162,11 +162,15 @@ std::optional<EthTransaction> EthTransaction::FromValue(
}
tx.data_ = std::vector<uint8_t>(data_decoded.begin(), data_decoded.end());
std::optional<int> 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<int> v_uint8 = value.FindInt("v")) {
tx.v_ = static_cast<uint8_t>(*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<int>(v_));
dict.Set("v", Uint256ValueToHex(v_));
dict.Set("r", base::Base64Encode(r_));
dict.Set("s", base::Base64Encode(s_));
dict.Set("type", static_cast<int>(type_));
@@ -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<uint8_t>(), 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<uint8_t>()));
// with chain id (mainnet)
EXPECT_EQ(base::HexEncodeLower(tx.GetHashedMessageToSign()), entry.hash);
}
@@ -122,10 +122,10 @@ TEST(EthTransactionUnitTest, GetSignedTransactionAndHash) {
std::unique_ptr<HDKey> key = HDKey::GenerateFromPrivateKey(private_key);
ASSERT_TRUE(key);
EthTransaction tx = *EthTransaction::FromTxData(mojom::TxData::New(
"0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000",
std::vector<uint8_t>(), false, std::nullopt));
EthTransaction tx = *EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
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<uint8_t>({1, 2, 3}), false, std::nullopt));
std::vector<uint8_t>({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<uint8_t>()));
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<uint8_t>(), false, std::nullopt));
EthTransaction tx = *EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
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<uint8_t>(), false, std::nullopt));
EthTransaction tx = *EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", "",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
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<uint8_t>(), false, std::nullopt));
EthTransaction tx = *EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208", "0x",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
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<uint8_t>{1}, false, std::nullopt);
std::vector<uint8_t>{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<uint8_t>{1}, false, std::nullopt));
std::vector<uint8_t>{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<uint8_t>{1}, false, std::nullopt));
auto tx = EthTransaction::FromTxData(mojom::TxData::New(
"0x1", "0x01", "0x3E8", "0x989680", "", "0x2A", std::vector<uint8_t>{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<uint8_t>{1}, false, std::nullopt));
std::vector<uint8_t>{1}));
ASSERT_TRUE(tx);
EXPECT_EQ(tx->chain_id(), uint256_t(1));
EXPECT_EQ(tx->nonce(), uint256_t(1));
@@ -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<url::Origin>& 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<url::Origin>& 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<EthTransaction> 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<url::Origin>& origin,
std::unique_ptr<EthTransaction> 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<Eip1559Transaction> 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<std::string> EthTxManager::GetSignedTransaction(
const std::string& tx_meta_id) {
std::unique_ptr<EthTxMeta> meta = GetEthTxStateManager().GetEthTx(tx_meta_id);
if (!meta || !meta->tx() || !meta->tx()->IsSigned()) {
return std::nullopt;
}
return meta->tx()->GetSignedTransaction();
}
std::unique_ptr<EthTxMeta> EthTxManager::GetTxForTesting(
const std::string& tx_meta_id) {
return GetEthTxStateManager().GetEthTx(tx_meta_id);
@@ -47,16 +47,21 @@ class EthTxManager : public TxManager, public EthBlockTracker::Observer {
void AddUnapprovedEvmTransaction(
mojom::NewEvmTransactionParamsPtr params,
const std::optional<url::Origin>& 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<url::Origin>& 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<std::string> 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<EthTransaction> 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<url::Origin>& origin,
std::unique_ptr<EthTransaction> 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<Eip1559Transaction> tx,
AddUnapprovedTransactionCallback callback,
AddUnapprovedEvmTransactionCallback callback,
bool sign_only,
mojom::SwapInfoPtr swap_info,
mojom::GasEstimation1559Ptr gas_estimation);
@@ -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<url::Origin>& 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<url::Origin>& 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<uint8_t>(), false, std::nullopt);
auto tx_data =
mojom::TxData::New("0x1", "0x06", "" /* gas_price*/, "" /* gas_limit */,
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c",
"0x016345785d8a0000", std::vector<uint8_t>());
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<uint8_t>(), false, std::nullopt);
auto tx_data =
mojom::TxData::New("0x1", "0x06", "" /* gas_price*/, "" /* gas_limit */,
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c",
"0x016345785d8a0000", std::vector<uint8_t>());
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<uint8_t>(), false, std::nullopt);
std::vector<uint8_t>());
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<uint8_t>({1, 2, 3}), false, std::nullopt);
auto valid_tx_data =
mojom::TxData::New("0x1", "0x06", "0x09184e72a000", "0x0974",
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c",
"0x016345785d8a0000", std::vector<uint8_t>({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<uint8_t>(), false,
std::nullopt),
"0x00", std::vector<uint8_t>()),
"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<uint8_t>(), false,
std::nullopt),
"0x00", std::vector<uint8_t>()),
"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<uint8_t>(),
@@ -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<uint8_t>(),
@@ -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<uint8_t>(), false, std::nullopt),
std::vector<uint8_t>()),
"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<uint8_t>(), false, std::nullopt),
mojom::TxData::New("0x1", "0x1", "", "",
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c",
"0x016345785d8a0000", std::vector<uint8_t>()),
"", "");
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<uint8_t>(), false,
std::nullopt),
"0x016345785d8a0000", std::vector<uint8_t>()),
"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<uint8_t>(), false, std::nullopt),
mojom::TxData::New("0x1", "0x1", "", "",
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c",
"0x016345785d8a0000", std::vector<uint8_t>()),
"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<uint8_t>(), false,
std::nullopt),
"0x016345785d8a0000", std::vector<uint8_t>()),
"", "");
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<uint8_t>(), false, std::nullopt);
auto tx_data =
mojom::TxData::New(mojom::kMainnetChainId, "0x1", "0x1", "0x0974",
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c",
"0x016345785d8a0000", std::vector<uint8_t>());
auto tx = EthTransaction::FromTxData(tx_data, false);
meta.set_tx(std::make_unique<EthTransaction>(*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<uint8_t>({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<uint8_t>({0x00, 0x01, 0x02});
params->swap_info = swap_info.Clone();
base::test::TestFuture<bool, const std::string&, const std::string&>
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<uint8_t>({0x00, 0x01, 0x02});
base::test::TestFuture<bool, const std::string&, const std::string&>
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<bool, mojom::ProviderErrorUnionPtr, const std::string&>
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
@@ -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()),
@@ -27,11 +27,11 @@ TEST(EthTxMetaUnitTest, ToTransactionInfo) {
mojom::AccountKind::kDerived, from_address);
// type 0
std::unique_ptr<EthTransaction> tx = std::make_unique<EthTransaction>(
*EthTransaction::FromTxData(mojom::TxData::New(
"0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000",
std::vector<uint8_t>(), false, std::nullopt)));
std::unique_ptr<EthTransaction> tx =
std::make_unique<EthTransaction>(*EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>())));
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>(*Eip2930Transaction::FromTxData(
mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>(),
false, std::nullopt)));
"0x0de0b6b3a7640000", std::vector<uint8_t>())));
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<uint8_t>(),
false, std::nullopt),
"0x0de0b6b3a7640000", std::vector<uint8_t>()),
"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<Eip1559Transaction> tx =
std::make_unique<Eip1559Transaction>(
*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<Eip1559Transaction> tx =
std::make_unique<Eip1559Transaction>(
*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<Eip1559Transaction> tx =
std::make_unique<Eip1559Transaction>(
*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<Eip1559Transaction> tx =
std::make_unique<Eip1559Transaction>(
*Eip1559Transaction::FromTxData(mojom::TxData1559::New(
mojom::TxData::New(mojom::kSepoliaChainId, "0x09",
"0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>(),
false, std::nullopt),
mojom::TxData::New(
mojom::kSepoliaChainId, "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>()),
"0x1E", "0x32")));
EthTxMeta meta(eth_account_id, std::move(tx));
@@ -67,11 +67,11 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaAndValue) {
"0x2f015c60e0be116b1f0cd534704db9c92118fb6a"));
// type 0
std::unique_ptr<EthTransaction> tx = std::make_unique<EthTransaction>(
*EthTransaction::FromTxData(mojom::TxData::New(
"0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000",
std::vector<uint8_t>(), false, std::nullopt)));
std::unique_ptr<EthTransaction> tx =
std::make_unique<EthTransaction>(*EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>())));
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>(*Eip2930Transaction::FromTxData(
mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>(),
false, std::nullopt)));
"0x0de0b6b3a7640000", std::vector<uint8_t>())));
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<uint8_t>(),
false, std::nullopt),
"0x0de0b6b3a7640000", std::vector<uint8_t>()),
"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<Eip1559Transaction*>(meta2.tx()));
// test sign_only
std::unique_ptr<EthTransaction> tx3 = std::make_unique<EthTransaction>(
*EthTransaction::FromTxData(mojom::TxData::New(
"0x3", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000",
std::vector<uint8_t>(), false, std::nullopt)));
std::unique_ptr<EthTransaction> tx3 =
std::make_unique<EthTransaction>(*EthTransaction::FromTxData(
mojom::TxData::New("0x3", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>())));
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<EthTransaction> tx = std::make_unique<EthTransaction>(
*EthTransaction::FromTxData(mojom::TxData::New(
"0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535", "0x0de0b6b3a7640000",
std::vector<uint8_t>(), false, std::nullopt)));
std::unique_ptr<EthTransaction> tx =
std::make_unique<EthTransaction>(*EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>())));
EthTxMeta meta(eth_account_id, std::move(tx));
meta.set_chain_id(mojom::kMainnetChainId);
base::DictValue meta_value = meta.ToValue();
@@ -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<uint8_t>(), false, std::nullopt));
EthTransaction tx = *EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
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<uint8_t>(), false, std::nullopt));
EthTransaction tx = *EthTransaction::FromTxData(
mojom::TxData::New("0x1", "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>()));
keyring.SignTransaction("0xbE93f9BacBcFFC8ee6663f2647917ed7A20a57BB", &tx);
EXPECT_FALSE(tx.IsSigned());
@@ -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,
@@ -47,11 +47,12 @@ FilTxManager::~FilTxManager() {
GetFilBlockTracker().RemoveObserver(this);
}
void FilTxManager::GetEstimatedGas(const std::string& chain_id,
const mojom::AccountIdPtr& from,
const std::optional<url::Origin>& origin,
std::unique_ptr<FilTransaction> tx,
AddUnapprovedTransactionCallback callback) {
void FilTxManager::GetEstimatedGas(
const std::string& chain_id,
const mojom::AccountIdPtr& from,
const std::optional<url::Origin>& origin,
std::unique_ptr<FilTransaction> 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<url::Origin>& origin,
std::unique_ptr<FilTransaction> 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<url::Origin>& 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, "",
@@ -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<url::Origin>& 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<url::Origin>& 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<url::Origin>& origin,
std::unique_ptr<FilTransaction> tx,
AddUnapprovedTransactionCallback callback);
AddUnapprovedFilecoinTransactionCallback callback);
std::unique_ptr<FilTxMeta> 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<url::Origin>& origin,
std::unique_ptr<FilTransaction> tx,
AddUnapprovedTransactionCallback callback,
AddUnapprovedFilecoinTransactionCallback callback,
const std::string& gas_premium,
const std::string& gas_fee_cap,
int64_t gas_limit,
@@ -148,11 +148,9 @@ class FilTxManagerUnitTest : public testing::Test {
const mojom::AccountIdPtr& from,
const std::optional<url::Origin>& 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);
@@ -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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback) {
NOTIMPLEMENTED_LOG_ONCE();
std::move(callback).Run(false, "", "Not implemented");
}
std::unique_ptr<PolkadotTxMeta> PolkadotTxManager::GetPolkadotTx(
const std::string& tx_meta_id) {
auto tx_meta = tx_state_manager().GetTx(tx_meta_id);
@@ -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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback) override;
void AddUnapprovedPolkadotTransaction(
mojom::NewPolkadotTransactionParamsPtr params,
AddUnapprovedPolkadotTransactionCallback callback);
@@ -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();
@@ -42,8 +42,7 @@ mojom::TransactionInfoPtr GetCannedScanEVMTransactionParams(
"0x3", "0x09", "0x4a817c800", "0x5208",
is_deploy_contract ? "0x" : "0x3535353535353535353535353535353535353535",
"0xde0b6b3a7640000",
is_eth_send ? std::vector<uint8_t>() : std::vector<uint8_t>(1, 10u),
false, std::nullopt);
is_eth_send ? std::vector<uint8_t>() : std::vector<uint8_t>(1, 10u));
auto tx = eip1559
? std::make_unique<Eip1559Transaction>(
@@ -10,9 +10,7 @@
#include <optional>
#include <utility>
#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<uint8_t>(), false, std::nullopt);
auto base_tx_data =
mojom::TxData::New(chain_id, "0x09", "0x4a817c800", "0x5208",
"0x3535353535353535353535353535353535353535",
"0x0de0b6b3a7640000", std::vector<uint8_t>());
if (eip1559) {
std::unique_ptr<Eip1559Transaction> tx =
@@ -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)));
}
@@ -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<url::Origin>& 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<SolanaTxMeta> meta,
mojom::SolanaFeeEstimationPtr estimation,
mojom::SolanaProviderError error,
@@ -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<url::Origin>& 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<url::Origin>& 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<SolanaTxMeta> meta,
mojom::SolanaFeeEstimationPtr estimation,
mojom::SolanaProviderError error,
@@ -409,12 +409,9 @@ class SolanaTxManagerUnitTest : public testing::Test {
const mojom::AccountIdPtr& from,
const std::optional<url::Origin>& 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<mojom::SolanaMessageAddressTableLookupPtr>(), nullptr,
nullptr, nullptr);
auto tx_data_union =
mojom::TxDataUnion::NewSolanaTxData(std::move(solana_tx_data));
base::test::TestFuture<bool, const std::string&, const std::string&>
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());
@@ -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<url::Origin>& 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,
+80 -82
View File
@@ -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<mojom::TransactionInfoPtr>& result) {
size_t counter = 0u;
@@ -218,62 +181,59 @@ void TxService::Bind(mojo::PendingReceiver<mojom::BtcTxManagerProxy> 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<url::Origin>& 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<url::Origin>& 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<std::string> TxService::GetEthSignedTransaction(
const std::string& tx_meta_id) {
return GetEthTxManager()->GetSignedTransaction(tx_meta_id);
}
void TxService::GetAllTransactionInfo(
mojom::CoinType coin_type,
const std::optional<std::string>& chain_id,
+33 -17
View File
@@ -75,27 +75,41 @@ class TxService : public mojom::TxService,
template <class T>
void Bind(mojo::PendingReceiver<T> 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<url::Origin>& origin,
AddUnapprovedTransactionCallback callback);
void AddUnapprovedEvmTransaction(
mojom::NewEvmTransactionParamsPtr params,
AddUnapprovedEvmTransactionCallback callback) override;
void AddUnapprovedEvmTransactionWithOrigin(
mojom::NewEvmTransactionParamsPtr params,
const std::optional<url::Origin>& 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<std::string> GetEthSignedTransaction(
const std::string& tx_meta_id);
void GetAllTransactionInfo(mojom::CoinType coin_type,
const std::optional<std::string>& chain_id,
mojom::AccountIdPtr from,
@@ -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<url::Origin>& 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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback,
AddUnapprovedZCashTransactionCallback callback,
base::expected<ZCashTransaction, std::string> zcash_transaction) {
if (!zcash_transaction.has_value()) {
std::move(callback).Run(false, "", zcash_transaction.error());
@@ -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 <memory>
#include <optional>
#include <string>
#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<url::Origin>& 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<url::Origin>& origin,
mojom::SwapInfoPtr swap_info,
AddUnapprovedTransactionCallback callback,
AddUnapprovedZCashTransactionCallback callback,
base::expected<ZCashTransaction, std::string> zcash_transaction);
void ContinueApproveTransaction(const std::string& tx_meta_id,
@@ -1643,8 +1643,6 @@ struct TxData {
string to;
string value;
array<uint8> 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)
@@ -64,8 +64,6 @@ export const getMockedTransactionInfo =
nonce: '0x03',
gasLimit: '0x5208', // 2100
gasPrice: '0x22ecb25c00', // 150 Gwei
signOnly: false,
signedTransaction: undefined,
},
maxPriorityFeePerGas: '',
maxFeePerGas: '',
@@ -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,
@@ -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',
},
},
},
@@ -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: '',
@@ -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(
@@ -2149,12 +2149,6 @@ export const parseTransactionWithPrices = ({
}
}
export function toTxDataUnion<D extends keyof BraveWallet.TxDataUnion>(
unionItem: Pick<BraveWallet.TxDataUnion, D>,
) {
return Object.assign({}, unionItem) as BraveWallet.TxDataUnion
}
export const isAssociatedTokenAccountCreationTx = (
tx: Pick<BraveWallet.TransactionInfo, 'txType'> | undefined,
) =>
@@ -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
@@ -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
@@ -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: ""
@@ -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?,
@@ -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() {
@@ -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"