Add weekly Wallet transaction sent P3A metric
This commit is contained in:
+1
@@ -73,6 +73,7 @@ public abstract class BraveWalletBaseActivity extends AsyncInitializationActivit
|
||||
if (mTxService != null) mTxService.close();
|
||||
if (mEthTxManagerProxy != null) mEthTxManagerProxy.close();
|
||||
if (mSolanaTxManagerProxy != null) mSolanaTxManagerProxy.close();
|
||||
if (mBraveWalletP3A != null) mBraveWalletP3A.close();
|
||||
if (mBraveWalletService != null) mBraveWalletService.close();
|
||||
|
||||
mKeyringService = null;
|
||||
|
||||
+34
@@ -31,12 +31,16 @@ import androidx.viewpager.widget.ViewPager;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import org.chromium.base.CommandLine;
|
||||
import org.chromium.base.Log;
|
||||
import org.chromium.brave_wallet.mojom.AccountInfo;
|
||||
import org.chromium.brave_wallet.mojom.AssetRatioService;
|
||||
import org.chromium.brave_wallet.mojom.BlockchainRegistry;
|
||||
import org.chromium.brave_wallet.mojom.BlockchainToken;
|
||||
import org.chromium.brave_wallet.mojom.BraveWalletConstants;
|
||||
import org.chromium.brave_wallet.mojom.BraveWalletP3a;
|
||||
import org.chromium.brave_wallet.mojom.BraveWalletService;
|
||||
import org.chromium.brave_wallet.mojom.CoinType;
|
||||
import org.chromium.brave_wallet.mojom.JsonRpcService;
|
||||
import org.chromium.brave_wallet.mojom.KeyringService;
|
||||
import org.chromium.brave_wallet.mojom.NetworkInfo;
|
||||
@@ -54,6 +58,7 @@ import org.chromium.chrome.browser.crypto_wallet.util.SolanaTransactionsGasHelpe
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.TokenUtils;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.TransactionUtils;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.WalletConstants;
|
||||
import org.chromium.chrome.browser.util.TabUtils;
|
||||
import org.chromium.url.GURL;
|
||||
|
||||
@@ -169,6 +174,15 @@ public class ApproveTxBottomSheetDialogFragment extends BottomSheetDialogFragmen
|
||||
return null;
|
||||
}
|
||||
|
||||
private BraveWalletP3a getBraveWalletP3A() {
|
||||
Activity activity = getActivity();
|
||||
if (activity instanceof BraveWalletBaseActivity) {
|
||||
return ((BraveWalletBaseActivity) activity).getBraveWalletP3A();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show(FragmentManager manager, String tag) {
|
||||
try {
|
||||
@@ -443,6 +457,7 @@ public class ApproveTxBottomSheetDialogFragment extends BottomSheetDialogFragmen
|
||||
"approveTransaction", error.getProviderError(), errorMessage);
|
||||
return;
|
||||
}
|
||||
reportTransactionForP3A();
|
||||
mApproved = true;
|
||||
if (mTransactionConfirmationListener != null) {
|
||||
mTransactionConfirmationListener.onApproveTransaction();
|
||||
@@ -451,6 +466,25 @@ public class ApproveTxBottomSheetDialogFragment extends BottomSheetDialogFragmen
|
||||
});
|
||||
}
|
||||
|
||||
private void reportTransactionForP3A() {
|
||||
if (!WalletConstants.SEND_TRANSACTION_TYPES.contains(mTxInfo.txType)
|
||||
&& !(mCoinType == CoinType.FIL && mTxInfo.txType == TransactionType.OTHER)) {
|
||||
return;
|
||||
}
|
||||
JsonRpcService jsonRpcService = getJsonRpcService();
|
||||
BraveWalletP3a braveWalletP3A = getBraveWalletP3A();
|
||||
assert jsonRpcService != null && braveWalletP3A != null;
|
||||
|
||||
jsonRpcService.getNetwork(mCoinType, selectedNetwork -> {
|
||||
boolean countTestNetworks = CommandLine.getInstance().hasSwitch(
|
||||
BraveWalletConstants.P3A_COUNT_TEST_NETWORKS_SWITCH);
|
||||
if (countTestNetworks
|
||||
|| !WalletConstants.KNOWN_TEST_CHAIN_IDS.contains(selectedNetwork.chainId)) {
|
||||
braveWalletP3A.reportTransactionSent(mCoinType, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private boolean canUpdateUi() {
|
||||
return isAdded() && getActivity() != null;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,6 @@ import org.chromium.brave_wallet.mojom.NetworkInfo;
|
||||
import org.chromium.brave_wallet.mojom.ProviderError;
|
||||
import org.chromium.brave_wallet.mojom.TransactionInfo;
|
||||
import org.chromium.brave_wallet.mojom.TransactionStatus;
|
||||
import org.chromium.brave_wallet.mojom.TransactionType;
|
||||
import org.chromium.brave_wallet.mojom.TxData;
|
||||
import org.chromium.brave_wallet.mojom.TxService;
|
||||
import org.chromium.chrome.R;
|
||||
|
||||
@@ -94,4 +94,13 @@ public final class WalletConstants {
|
||||
public static final String SOL_INS_BPF = "BPFLoaderUpgradeab1e11111111111111111111111";
|
||||
public static final String SOL_INS_SIG_VERIFY = "Ed25519SigVerify111111111111111111111111111";
|
||||
public static final String SOL_INS_SECP = "KeccakSecp256k11111111111111111111111111111";
|
||||
|
||||
public static final List<String> KNOWN_TEST_CHAIN_IDS = Arrays.asList(
|
||||
BraveWalletConstants.GOERLI_CHAIN_ID, BraveWalletConstants.SEPOLIA_CHAIN_ID,
|
||||
BraveWalletConstants.LOCALHOST_CHAIN_ID, BraveWalletConstants.SOLANA_TESTNET,
|
||||
BraveWalletConstants.SOLANA_DEVNET, BraveWalletConstants.FILECOIN_TESTNET);
|
||||
public static final List<Integer> SEND_TRANSACTION_TYPES = Arrays.asList(
|
||||
TransactionType.ETH_SEND, TransactionType.ERC20_TRANSFER,
|
||||
TransactionType.SOLANA_SYSTEM_TRANSFER, TransactionType.SOLANA_SPL_TOKEN_TRANSFER,
|
||||
TransactionType.SOLANA_SPL_TOKEN_TRANSFER_WITH_ASSOCIATED_TOKEN_ACCOUNT_CREATION);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ namespace brave_wallet {
|
||||
|
||||
class BraveWalletP3AUnitTest : public testing::Test {
|
||||
public:
|
||||
BraveWalletP3AUnitTest() {
|
||||
BraveWalletP3AUnitTest()
|
||||
: task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
|
||||
histogram_tester_ = std::make_unique<base::HistogramTester>();
|
||||
}
|
||||
|
||||
@@ -142,4 +143,31 @@ TEST_F(BraveWalletP3AUnitTest, ReportOnboardingAction) {
|
||||
1);
|
||||
}
|
||||
|
||||
TEST_F(BraveWalletP3AUnitTest, TransactionSent) {
|
||||
histogram_tester_->ExpectTotalCount(kEthTransactionSentHistogramName, 0);
|
||||
histogram_tester_->ExpectTotalCount(kSolTransactionSentHistogramName, 0);
|
||||
histogram_tester_->ExpectTotalCount(kFilTransactionSentHistogramName, 0);
|
||||
|
||||
BraveWalletP3A* wallet_p3a = wallet_service_->GetBraveWalletP3A();
|
||||
|
||||
wallet_p3a->ReportTransactionSent(mojom::CoinType::ETH, true);
|
||||
histogram_tester_->ExpectUniqueSample(kEthTransactionSentHistogramName, 1, 1);
|
||||
|
||||
wallet_p3a->ReportTransactionSent(mojom::CoinType::SOL, true);
|
||||
histogram_tester_->ExpectUniqueSample(kSolTransactionSentHistogramName, 1, 1);
|
||||
|
||||
wallet_p3a->ReportTransactionSent(mojom::CoinType::FIL, true);
|
||||
histogram_tester_->ExpectUniqueSample(kFilTransactionSentHistogramName, 1, 1);
|
||||
|
||||
task_environment_.FastForwardBy(base::Days(4));
|
||||
histogram_tester_->ExpectUniqueSample(kEthTransactionSentHistogramName, 1, 5);
|
||||
histogram_tester_->ExpectUniqueSample(kSolTransactionSentHistogramName, 1, 5);
|
||||
histogram_tester_->ExpectUniqueSample(kFilTransactionSentHistogramName, 1, 5);
|
||||
|
||||
task_environment_.FastForwardBy(base::Days(3));
|
||||
histogram_tester_->ExpectBucketCount(kEthTransactionSentHistogramName, 0, 1);
|
||||
histogram_tester_->ExpectBucketCount(kSolTransactionSentHistogramName, 0, 1);
|
||||
histogram_tester_->ExpectBucketCount(kFilTransactionSentHistogramName, 0, 1);
|
||||
}
|
||||
|
||||
} // namespace brave_wallet
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
#include "base/command_line.h"
|
||||
#include "base/files/file_path.h"
|
||||
#include "brave/browser/brave_wallet/asset_ratio_service_factory.h"
|
||||
#include "brave/browser/brave_wallet/brave_wallet_service_factory.h"
|
||||
@@ -25,6 +26,7 @@
|
||||
#include "brave/components/brave_wallet/browser/keyring_service.h"
|
||||
#include "brave/components/brave_wallet/browser/swap_service.h"
|
||||
#include "brave/components/brave_wallet/browser/tx_service.h"
|
||||
#include "brave/components/brave_wallet/common/brave_wallet.mojom-forward.h"
|
||||
#include "brave/components/brave_wallet_page/resources/grit/brave_wallet_page_generated_map.h"
|
||||
#include "brave/components/constants/webui_url_constants.h"
|
||||
#include "brave/components/l10n/common/localization_util.h"
|
||||
@@ -66,6 +68,9 @@ WalletPageUI::WalletPageUI(content::WebUI* web_ui)
|
||||
source->AddString("braveWalletTrezorBridgeUrl", kUntrustedTrezorURL);
|
||||
source->AddString("braveWalletNftBridgeUrl", kUntrustedNftURL);
|
||||
source->AddString("braveWalletMarketUiBridgeUrl", kUntrustedMarketURL);
|
||||
source->AddBoolean(brave_wallet::mojom::kP3ACountTestNetworksLoadTimeKey,
|
||||
base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
brave_wallet::mojom::kP3ACountTestNetworksSwitch));
|
||||
content::WebUIDataSource::Add(profile, source);
|
||||
content::URLDataSource::Add(profile,
|
||||
std::make_unique<SanitizedImageSource>(profile));
|
||||
|
||||
@@ -58,7 +58,7 @@ class WalletPageUI : public ui::MojoWebUIController,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletService>
|
||||
brave_wallet_service,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletP3A>
|
||||
brave_wallet_p3a_receiver) override;
|
||||
brave_wallet_p3a) override;
|
||||
|
||||
std::unique_ptr<WalletPageHandler> page_handler_;
|
||||
std::unique_ptr<WalletHandler> wallet_handler_;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <utility>
|
||||
|
||||
#include "base/bind.h"
|
||||
#include "base/command_line.h"
|
||||
#include "brave/browser/brave_wallet/asset_ratio_service_factory.h"
|
||||
#include "brave/browser/brave_wallet/brave_wallet_service_factory.h"
|
||||
#include "brave/browser/brave_wallet/json_rpc_service_factory.h"
|
||||
@@ -24,6 +25,7 @@
|
||||
#include "brave/components/brave_wallet/browser/keyring_service.h"
|
||||
#include "brave/components/brave_wallet/browser/swap_service.h"
|
||||
#include "brave/components/brave_wallet/browser/tx_service.h"
|
||||
#include "brave/components/brave_wallet/common/brave_wallet.mojom-forward.h"
|
||||
#include "brave/components/brave_wallet_panel/resources/grit/brave_wallet_panel_generated_map.h"
|
||||
#include "brave/components/constants/webui_url_constants.h"
|
||||
#include "brave/components/l10n/common/localization_util.h"
|
||||
@@ -66,7 +68,9 @@ WalletPanelUI::WalletPanelUI(content::WebUI* web_ui)
|
||||
source->AddString("braveWalletTrezorBridgeUrl", kUntrustedTrezorURL);
|
||||
source->AddString("braveWalletNftBridgeUrl", kUntrustedNftURL);
|
||||
source->AddString("braveWalletMarketUiBridgeUrl", kUntrustedMarketURL);
|
||||
|
||||
source->AddBoolean(brave_wallet::mojom::kP3ACountTestNetworksLoadTimeKey,
|
||||
base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
brave_wallet::mojom::kP3ACountTestNetworksSwitch));
|
||||
if (ShouldDisableCSPForTesting()) {
|
||||
source->DisableContentSecurityPolicy();
|
||||
}
|
||||
@@ -115,7 +119,9 @@ void WalletPanelUI::CreatePanelHandler(
|
||||
mojo::PendingReceiver<brave_wallet::mojom::FilTxManagerProxy>
|
||||
filecoin_tx_manager_proxy_receiver,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletService>
|
||||
brave_wallet_service_receiver) {
|
||||
brave_wallet_service_receiver,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletP3A>
|
||||
brave_wallet_p3a_receiver) {
|
||||
DCHECK(page);
|
||||
auto* profile = Profile::FromWebUI(web_ui());
|
||||
DCHECK(profile);
|
||||
@@ -142,8 +148,11 @@ void WalletPanelUI::CreatePanelHandler(
|
||||
profile, std::move(solana_tx_manager_proxy_receiver));
|
||||
brave_wallet::TxServiceFactory::BindFilTxManagerProxyForContext(
|
||||
profile, std::move(filecoin_tx_manager_proxy_receiver));
|
||||
brave_wallet::BraveWalletServiceFactory::BindForContext(
|
||||
profile, std::move(brave_wallet_service_receiver));
|
||||
brave_wallet::BraveWalletService* wallet_service =
|
||||
brave_wallet::BraveWalletServiceFactory::GetServiceForContext(profile);
|
||||
wallet_service->Bind(std::move(brave_wallet_service_receiver));
|
||||
wallet_service->GetBraveWalletP3A()->Bind(
|
||||
std::move(brave_wallet_p3a_receiver));
|
||||
|
||||
auto* blockchain_registry = brave_wallet::BlockchainRegistry::GetInstance();
|
||||
if (blockchain_registry) {
|
||||
|
||||
@@ -65,7 +65,9 @@ class WalletPanelUI : public ui::MojoBubbleWebUIController,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::FilTxManagerProxy>
|
||||
fil_tx_manager_proxy,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletService>
|
||||
brave_wallet_service) override;
|
||||
brave_wallet_service,
|
||||
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletP3A>
|
||||
brave_wallet_p3a) override;
|
||||
|
||||
std::unique_ptr<WalletPanelHandler> panel_handler_;
|
||||
std::unique_ptr<WalletHandler> wallet_handler_;
|
||||
|
||||
@@ -7,11 +7,15 @@
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "base/metrics/histogram_functions.h"
|
||||
#include "base/metrics/histogram_macros.h"
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
#include "base/time/time.h"
|
||||
#include "brave/components/brave_wallet/browser/brave_wallet_service.h"
|
||||
#include "brave/components/brave_wallet/browser/keyring_service.h"
|
||||
#include "brave/components/brave_wallet/browser/pref_names.h"
|
||||
#include "components/prefs/pref_service.h"
|
||||
#include "components/prefs/scoped_user_pref_update.h"
|
||||
|
||||
namespace brave_wallet {
|
||||
|
||||
@@ -22,6 +26,12 @@ const char kKeyringCreatedHistogramName[] = "Brave.Wallet.KeyringCreated";
|
||||
const char kOnboardingConversionHistogramName[] =
|
||||
"Brave.Wallet.OnboardingConversion.2";
|
||||
const char kEthProviderHistogramName[] = "Brave.Wallet.EthProvider";
|
||||
const char kEthTransactionSentHistogramName[] =
|
||||
"Brave.Wallet.EthTransactionSent";
|
||||
const char kSolTransactionSentHistogramName[] =
|
||||
"Brave.Wallet.SolTransactionSent";
|
||||
const char kFilTransactionSentHistogramName[] =
|
||||
"Brave.Wallet.FilTransactionSent";
|
||||
|
||||
// Has the Wallet keyring been created?
|
||||
// 0) No, 1) Yes
|
||||
@@ -78,6 +88,12 @@ void BraveWalletP3A::Bind(
|
||||
receivers_.Add(this, std::move(receiver));
|
||||
}
|
||||
|
||||
void BraveWalletP3A::Update() {
|
||||
ReportTransactionSent(mojom::CoinType::ETH, false);
|
||||
ReportTransactionSent(mojom::CoinType::FIL, false);
|
||||
ReportTransactionSent(mojom::CoinType::SOL, false);
|
||||
}
|
||||
|
||||
void BraveWalletP3A::ReportEthereumProvider(
|
||||
mojom::EthereumProviderType provider_type) {
|
||||
UMA_HISTOGRAM_ENUMERATION(kEthProviderHistogramName, provider_type);
|
||||
@@ -89,6 +105,46 @@ void BraveWalletP3A::ReportOnboardingAction(
|
||||
onboarding_action);
|
||||
}
|
||||
|
||||
void BraveWalletP3A::ReportTransactionSent(mojom::CoinType coin,
|
||||
bool new_send) {
|
||||
DictionaryPrefUpdate last_sent_time_update(
|
||||
pref_service_, kBraveWalletLastTransactionSentTimeDict);
|
||||
base::Value::Dict& last_sent_time_dict = last_sent_time_update->GetDict();
|
||||
|
||||
std::string coin_key = base::NumberToString(static_cast<int>(coin));
|
||||
|
||||
base::Time now = base::Time::Now();
|
||||
base::Time last_sent_time = base::Time::FromDoubleT(
|
||||
last_sent_time_dict.FindDouble(coin_key).value_or(0.0));
|
||||
|
||||
if (!new_send && last_sent_time.is_null()) {
|
||||
// Don't report if a transaction was never sent.
|
||||
return;
|
||||
}
|
||||
int answer = 0;
|
||||
if (new_send || (now - last_sent_time) < base::Days(7)) {
|
||||
answer = 1;
|
||||
}
|
||||
if (new_send) {
|
||||
last_sent_time_dict.Set(coin_key, now.ToDoubleT());
|
||||
}
|
||||
|
||||
const char* histogram_name;
|
||||
switch (coin) {
|
||||
case mojom::CoinType::ETH:
|
||||
histogram_name = kEthTransactionSentHistogramName;
|
||||
break;
|
||||
case mojom::CoinType::SOL:
|
||||
histogram_name = kSolTransactionSentHistogramName;
|
||||
break;
|
||||
case mojom::CoinType::FIL:
|
||||
histogram_name = kFilTransactionSentHistogramName;
|
||||
break;
|
||||
}
|
||||
|
||||
base::UmaHistogramExactLinear(histogram_name, answer, 2);
|
||||
}
|
||||
|
||||
void BraveWalletP3A::RecordInitialBraveWalletP3AState() {
|
||||
keyring_service_->GetKeyringInfo(mojom::kDefaultKeyringId,
|
||||
base::BindOnce(&RecordKeyringCreated));
|
||||
|
||||
@@ -22,6 +22,9 @@ extern const char kDefaultSolanaWalletHistogramName[];
|
||||
extern const char kKeyringCreatedHistogramName[];
|
||||
extern const char kOnboardingConversionHistogramName[];
|
||||
extern const char kEthProviderHistogramName[];
|
||||
extern const char kEthTransactionSentHistogramName[];
|
||||
extern const char kSolTransactionSentHistogramName[];
|
||||
extern const char kFilTransactionSentHistogramName[];
|
||||
|
||||
class BraveWalletService;
|
||||
class KeyringService;
|
||||
@@ -42,10 +45,13 @@ class BraveWalletP3A : public mojom::BraveWalletServiceObserver,
|
||||
mojo::PendingRemote<mojom::BraveWalletP3A> MakeRemote();
|
||||
void Bind(mojo::PendingReceiver<mojom::BraveWalletP3A> receiver);
|
||||
|
||||
void Update();
|
||||
|
||||
void ReportEthereumProvider(
|
||||
mojom::EthereumProviderType provider_type) override;
|
||||
void ReportOnboardingAction(
|
||||
mojom::OnboardingAction onboarding_action) override;
|
||||
void ReportTransactionSent(mojom::CoinType coin, bool new_send) override;
|
||||
|
||||
// KeyringServiceObserver
|
||||
void KeyringCreated(const std::string& keyring_id) override;
|
||||
|
||||
@@ -13,4 +13,7 @@ void BraveWalletP3APrivate::ReportEthereumProvider(
|
||||
void BraveWalletP3APrivate::ReportOnboardingAction(
|
||||
mojom::OnboardingAction onboarding_action) {}
|
||||
|
||||
void BraveWalletP3APrivate::ReportTransactionSent(mojom::CoinType coin,
|
||||
bool new_send) {}
|
||||
|
||||
} // namespace brave_wallet
|
||||
|
||||
@@ -18,6 +18,7 @@ class BraveWalletP3APrivate : public mojom::BraveWalletP3A {
|
||||
mojom::EthereumProviderType provider_type) override;
|
||||
void ReportOnboardingAction(
|
||||
mojom::OnboardingAction onboarding_action) override;
|
||||
void ReportTransactionSent(mojom::CoinType coin, bool new_send) override;
|
||||
};
|
||||
|
||||
} // namespace brave_wallet
|
||||
|
||||
@@ -84,6 +84,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
|
||||
p3a_utils::RegisterFeatureUsagePrefs(registry, kBraveWalletP3AFirstUnlockTime,
|
||||
kBraveWalletP3ALastUnlockTime,
|
||||
kBraveWalletP3AUsedSecondDay, nullptr);
|
||||
registry->RegisterDictionaryPref(kBraveWalletLastTransactionSentTimeDict);
|
||||
}
|
||||
|
||||
void RegisterProfilePrefsForMigration(
|
||||
|
||||
@@ -861,6 +861,7 @@ base::Value::Dict BraveWalletService::GetDefaultFilecoinAssets() {
|
||||
|
||||
void BraveWalletService::OnP3ATimerFired() {
|
||||
RecordWalletUsage(false);
|
||||
brave_wallet_p3a_.Update();
|
||||
}
|
||||
|
||||
void BraveWalletService::OnWalletUnlockPreferenceChanged(
|
||||
|
||||
@@ -49,6 +49,8 @@ extern const char kBraveWalletP3AUsedSecondDay[] =
|
||||
"brave.wallet.p3a_used_second_day";
|
||||
const char kBraveWalletKeyringEncryptionKeysMigrated[] =
|
||||
"brave.wallet.keyring_encryption_keys_migrated";
|
||||
const char kBraveWalletLastTransactionSentTimeDict[] =
|
||||
"brave.wallet.last_transaction_sent_time_dict";
|
||||
|
||||
// DEPRECATED
|
||||
const char kBraveWalletSelectedAccount[] = "brave.wallet.selected_account";
|
||||
|
||||
@@ -43,6 +43,8 @@ extern const char kBraveWalletP3AUsedSecondDay[];
|
||||
|
||||
extern const char kBraveWalletKeyringEncryptionKeysMigrated[];
|
||||
|
||||
extern const char kBraveWalletLastTransactionSentTimeDict[];
|
||||
|
||||
// DEPRECATED
|
||||
extern const char kBraveWalletSelectedAccount[];
|
||||
extern const char kBraveWalletWeb3ProviderDeprecated[];
|
||||
|
||||
@@ -223,7 +223,8 @@ interface PanelHandlerFactory {
|
||||
pending_receiver<EthTxManagerProxy> eth_tx_manager_proxy,
|
||||
pending_receiver<SolanaTxManagerProxy> solana_tx_manager_proxy,
|
||||
pending_receiver<FilTxManagerProxy> fil_tx_manager_proxy,
|
||||
pending_receiver<BraveWalletService> brave_wallet_service);
|
||||
pending_receiver<BraveWalletService> brave_wallet_service,
|
||||
pending_receiver<BraveWalletP3A> brave_wallet_p3a);
|
||||
};
|
||||
|
||||
interface PageHandlerFactory {
|
||||
@@ -408,6 +409,9 @@ const string kFilecoinTestnetKeyringId = "filecoin_testnet";
|
||||
const string kSolanaKeyringId = "solana";
|
||||
const string kDefaultKeyringId = "default";
|
||||
|
||||
const string kP3ACountTestNetworksSwitch = "p3a-count-wallet-test-networks";
|
||||
const string kP3ACountTestNetworksLoadTimeKey = "braveWalletP3ACountTestNetworks";
|
||||
|
||||
enum FilecoinAddressProtocol {
|
||||
SECP256K1 = 1, // Represents the address SECP256K1 protocol
|
||||
BLS = 3 // Represents the address BLS protocol
|
||||
@@ -1321,6 +1325,9 @@ interface BraveWalletP3A {
|
||||
|
||||
// Called when a Wallet onboarding action is performed.
|
||||
ReportOnboardingAction(OnboardingAction onboarding_action);
|
||||
|
||||
// Called when a mainnet transaction is sent.
|
||||
ReportTransactionSent(CoinType coin, bool new_send);
|
||||
};
|
||||
|
||||
enum OnboardingAction {
|
||||
|
||||
@@ -59,7 +59,7 @@ import {
|
||||
import { Store } from './types'
|
||||
import InteractionNotifier from './interactionNotifier'
|
||||
import { getCoinFromTxDataUnion, getNetworkInfo } from '../../utils/network-utils'
|
||||
import { isSolanaTransaction } from '../../utils/tx-utils'
|
||||
import { isSolanaTransaction, shouldReportTransactionP3A } from '../../utils/tx-utils'
|
||||
|
||||
const handler = new AsyncActionHandler()
|
||||
|
||||
@@ -435,9 +435,9 @@ handler.on(WalletActions.approveERC20Allowance.type, async (store: Store, payloa
|
||||
})
|
||||
|
||||
handler.on(WalletActions.approveTransaction.type, async (store: Store, txInfo: BraveWallet.TransactionInfo) => {
|
||||
const apiProxy = getAPIProxy()
|
||||
const { txService, braveWalletP3A } = getAPIProxy()
|
||||
const coin = getCoinFromTxDataUnion(txInfo.txDataUnion)
|
||||
const result = await apiProxy.txService.approveTransaction(coin, txInfo.id)
|
||||
const result = await txService.approveTransaction(coin, txInfo.id)
|
||||
const error = result.errorUnion.providerError ?? result.errorUnion.solanaProviderError
|
||||
if (error !== BraveWallet.ProviderError.kSuccess) {
|
||||
await store.dispatch(WalletActions.setTransactionProviderError({
|
||||
@@ -447,6 +447,11 @@ handler.on(WalletActions.approveTransaction.type, async (store: Store, txInfo: B
|
||||
message: result.errorMessage
|
||||
} as TransactionProviderError
|
||||
}))
|
||||
} else {
|
||||
const { selectedNetwork } = getWalletState(store)
|
||||
if (shouldReportTransactionP3A(txInfo, selectedNetwork, coin)) {
|
||||
braveWalletP3A.reportTransactionSent(coin, true)
|
||||
}
|
||||
}
|
||||
|
||||
await store.dispatch(refreshTransactionHistory(txInfo.fromAddress))
|
||||
|
||||
@@ -841,3 +841,11 @@ export interface AccountButtonOptionsObjectType {
|
||||
}
|
||||
|
||||
export type StringWithAutocomplete<T> = T | (string & Record<never, never>)
|
||||
|
||||
export const P3ASendTransactionTypes = [
|
||||
BraveWallet.TransactionType.ETHSend,
|
||||
BraveWallet.TransactionType.ERC20Transfer,
|
||||
BraveWallet.TransactionType.SolanaSystemTransfer,
|
||||
BraveWallet.TransactionType.SolanaSPLTokenTransfer,
|
||||
BraveWallet.TransactionType.SolanaSPLTokenTransferWithAssociatedTokenAccountCreation
|
||||
]
|
||||
|
||||
@@ -27,7 +27,8 @@ class WalletPanelApiProxy extends WalletApiProxy {
|
||||
this.ethTxManagerProxy.$.bindNewPipeAndPassReceiver(),
|
||||
this.solanaTxManagerProxy.$.bindNewPipeAndPassReceiver(),
|
||||
this.filTxManagerProxy.$.bindNewPipeAndPassReceiver(),
|
||||
this.braveWalletService.$.bindNewPipeAndPassReceiver())
|
||||
this.braveWalletService.$.bindNewPipeAndPassReceiver(),
|
||||
this.braveWalletP3A.$.bindNewPipeAndPassReceiver())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { BraveWallet } from '../constants/types'
|
||||
import { BraveWallet, P3ASendTransactionTypes, SupportedTestNetworks } from '../constants/types'
|
||||
import { getLocale } from '../../common/locale'
|
||||
import { SolanaTransactionTypes } from '../common/constants/solana'
|
||||
import { loadTimeData } from '../../common/loadTimeData'
|
||||
|
||||
type Order = 'ascending' | 'descending'
|
||||
|
||||
@@ -38,3 +39,12 @@ export function isSolanaTransaction (transaction: BraveWallet.TransactionInfo) {
|
||||
return SolanaTransactionTypes.includes(txType) ||
|
||||
(txType === BraveWallet.TransactionType.Other && solanaTxData !== undefined)
|
||||
}
|
||||
|
||||
export function shouldReportTransactionP3A (txInfo: BraveWallet.TransactionInfo, network: BraveWallet.NetworkInfo, coin: BraveWallet.CoinType) {
|
||||
if (P3ASendTransactionTypes.includes(txInfo.txType) ||
|
||||
(coin === BraveWallet.CoinType.FIL && txInfo.txType === BraveWallet.TransactionType.Other)) {
|
||||
const countTestNetworks = loadTimeData.getBoolean(BraveWallet.P3A_COUNT_TEST_NETWORKS_LOAD_TIME_KEY)
|
||||
return countTestNetworks || !SupportedTestNetworks.includes(network.chainId)
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -82,11 +82,14 @@ constexpr inline auto kCollectedTypicalHistograms =
|
||||
"Brave.VPN.DaysInMonthUsed",
|
||||
"Brave.VPN.LastUsageTime",
|
||||
"Brave.Wallet.EthProvider",
|
||||
"Brave.Wallet.EthTransactionSent",
|
||||
"Brave.Wallet.FilTransactionSent",
|
||||
"Brave.Wallet.DefaultSolanaWalletSetting",
|
||||
"Brave.Wallet.DefaultWalletSetting",
|
||||
"Brave.Wallet.KeyringCreated",
|
||||
"Brave.Wallet.NewUserReturning",
|
||||
"Brave.Wallet.OnboardingConversion.2",
|
||||
"Brave.Wallet.SolTransactionSent",
|
||||
"Brave.Wallet.UsageDaysInWeek",
|
||||
"Brave.Wallet.UsageMonthly.2",
|
||||
"Brave.Welcome.InteractionStatus",
|
||||
|
||||
Reference in New Issue
Block a user