mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-20 06:08:34 +02:00
Legal + release-readiness pass for Hash Bags launch
Legal (aligned with the hosted hash.boats Terms & Privacy): - Rewrite in-app Terms (assets/text/Terms_of_Use.txt): drop the false 'No Fiat Operations'/'No Embedded Applications' clauses; add MoonPay (optional, where available), Trocador swaps + ~1% fee disclosure, WalletConnect, sanctions/18+, Apple EULA rider, and PA + class/jury-waiver dispute terms. - Reconcile PRIVACY.md with the canonical hosted policy. - Add THIRD_PARTY_LICENSES.md; correct the blanket 'MIT' claim in README (app code MIT; bundles BSD-3/Apache-2.0/LGPL-3.0); fix README build-doc + LICENSE.md links and copyright year. - Standardize in-app legal naming to 'Terms of Service'; add in-app links to hash.boats/terms and /privacy. Release fixes: - Align URL scheme hashwallet:// -> hashbags:// (matches registered scheme) so WalletConnect/Trezor/quick-action deep links work. - Store-review gating: hide Buy action until a provider is available; hide the empty 'Apps' tab. - Exclude removed chains (SOL/TRX/ZEC/DCR/ZANO + tokens) from swap pickers. - Residual Cake branding: macOS CFBundleDisplayName and Windows Runner.rc (Hash Wallet -> Hash Bags); remove Android cakewallet://y.at leftover. - Genericize internal-infra comments in CI workflows.
This commit is contained in:
+1
-1
@@ -427,7 +427,7 @@ Future<void> setup({
|
||||
|
||||
getIt.registerLazySingleton(() => BitboxViewModel());
|
||||
|
||||
getIt.registerLazySingleton(() => TrezorConnect("hashwallet://trezor_connect",
|
||||
getIt.registerLazySingleton(() => TrezorConnect("hashbags://trezor_connect",
|
||||
appName: "Hash Bags"));
|
||||
getIt.registerLazySingleton(() => TrezorViewModel(getIt<TrezorConnect>()));
|
||||
|
||||
|
||||
+1
-1
@@ -95,7 +95,7 @@ Future<void> runAppWithZone({Key? topLevelKey}) async {
|
||||
}
|
||||
|
||||
// Convert the shortcut type to a URI and add it to the stream
|
||||
final uri = Uri.parse('hashwallet://quickaction/$shortcutType');
|
||||
final uri = Uri.parse('hashbags://quickaction/$shortcutType');
|
||||
quickActionsStream.sink.add(uri);
|
||||
});
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:hash_wallet/bitcoin/bitcoin.dart';
|
||||
import 'package:hash_wallet/di.dart';
|
||||
import 'package:hash_wallet/entities/balance_display_mode.dart';
|
||||
import 'package:hash_wallet/entities/bitcoin_amount_display_mode.dart';
|
||||
import 'package:hash_wallet/entities/provider_types.dart';
|
||||
import 'package:hash_wallet/generated/i18n.dart';
|
||||
import 'package:hash_wallet/new-ui/modal_navigator.dart';
|
||||
import 'package:hash_wallet/new-ui/pages/send_page.dart';
|
||||
@@ -173,7 +174,8 @@ class _CardsViewState extends State<CardsView> {
|
||||
onTap: withdrawFromL2,
|
||||
)
|
||||
]
|
||||
: widget.dashboardViewModel.isEnabledTradeAction
|
||||
: (widget.dashboardViewModel.isEnabledTradeAction &&
|
||||
ProvidersHelper.getAvailableBuyProviderTypes().isNotEmpty)
|
||||
? [
|
||||
BalanceCardAction(
|
||||
label: S.current.buy,
|
||||
|
||||
@@ -12,7 +12,7 @@ class DisclaimerPage extends BasePage {
|
||||
final bool isReadOnly;
|
||||
|
||||
@override
|
||||
String get title => 'Terms of Use';
|
||||
String get title => 'Terms of Service';
|
||||
|
||||
@override
|
||||
Widget? leading(BuildContext context) => isReadOnly ? super.leading(context) : null;
|
||||
@@ -67,7 +67,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Terms and conditions',
|
||||
'Terms of Service',
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||
fontSize: 20.0,
|
||||
@@ -84,7 +84,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Text(
|
||||
'Legal Disclaimer\nAnd\nTerms of Use',
|
||||
'Legal Disclaimer\nand\nTerms of Service',
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -170,7 +170,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
|
||||
: null,
|
||||
),
|
||||
Text(
|
||||
'I agree to Terms of Use',
|
||||
'I agree to the Terms of Service',
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
|
||||
@@ -115,7 +115,7 @@ class RootState extends State<Root> with WidgetsBindingObserver {
|
||||
handleDeepLinking(await getInitialUri());
|
||||
|
||||
if (widget.initialQuickAction != null) {
|
||||
final uri = Uri.parse('hashwallet://quickaction/${widget.initialQuickAction}');
|
||||
final uri = Uri.parse('hashbags://quickaction/${widget.initialQuickAction}');
|
||||
handleDeepLinking(uri);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ abstract class WalletKitServiceBase with Store {
|
||||
description: 'Hash Bags',
|
||||
url: 'https://github.com/Such-Software/hash-wallet',
|
||||
icons: ['https://github.com/Such-Software/hash-wallet/raw/dev/assets/images/app_logo.png'],
|
||||
redirect: Redirect(native: 'hashwallet://'),
|
||||
redirect: Redirect(native: 'hashbags://'),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -637,7 +637,10 @@ abstract class DashboardViewModelBase with Store {
|
||||
appStore.settingsStore.shouldShowMarketPlaceInDashboard;
|
||||
|
||||
@computed
|
||||
bool get showApps => appStore.settingsStore.shouldShowMarketPlaceInDashboard;
|
||||
// Hash Bags: no Apps/marketplace content yet — hide the empty tab so the
|
||||
// dashboard doesn't ship a nav destination that only says "No apps available
|
||||
// yet." Re-enable (return the setting) once there is real content to show.
|
||||
bool get showApps => false;
|
||||
|
||||
@computed
|
||||
List<TradeListItem> get trades => tradesStore.trades.where((trade) {
|
||||
|
||||
@@ -122,12 +122,25 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
super(appStore: _appStore) {
|
||||
_useTorOnly = _settingsStore.exchangeStatus == ExchangeApiMode.torOnly;
|
||||
_setProviders();
|
||||
const excludeDepositCurrencies = [CryptoCurrency.btt];
|
||||
// Hash Bags: chains removed from the wallet are not offered as swap targets.
|
||||
const removedChainCurrencies = [
|
||||
CryptoCurrency.sol,
|
||||
CryptoCurrency.trx,
|
||||
CryptoCurrency.zec,
|
||||
CryptoCurrency.dcr,
|
||||
CryptoCurrency.zano,
|
||||
CryptoCurrency.usdcsol,
|
||||
CryptoCurrency.usdtSol,
|
||||
CryptoCurrency.usdcTrc20,
|
||||
CryptoCurrency.usdttrc20,
|
||||
];
|
||||
const excludeDepositCurrencies = [CryptoCurrency.btt, ...removedChainCurrencies];
|
||||
const excludeReceiveCurrencies = [
|
||||
CryptoCurrency.xlm,
|
||||
CryptoCurrency.xrp,
|
||||
CryptoCurrency.bnb,
|
||||
CryptoCurrency.btt
|
||||
CryptoCurrency.btt,
|
||||
...removedChainCurrencies,
|
||||
];
|
||||
_initialPairBasedOnWallet();
|
||||
|
||||
|
||||
@@ -33,6 +33,18 @@ abstract class SupportViewModelBase with Store {
|
||||
hasIconColor: true,
|
||||
linkTitle: S.current.apk_update,
|
||||
link: 'https://github.com/Such-Software/hash-wallet/releases'),
|
||||
LinkListItem(
|
||||
title: 'Privacy Policy',
|
||||
icon: 'assets/images/privacy_menu.png',
|
||||
hasIconColor: true,
|
||||
linkTitle: 'hash.boats/privacy',
|
||||
link: 'https://hash.boats/privacy'),
|
||||
LinkListItem(
|
||||
title: 'Terms of Service',
|
||||
icon: 'assets/images/privacy_menu.png',
|
||||
hasIconColor: true,
|
||||
linkTitle: 'hash.boats/terms',
|
||||
link: 'https://hash.boats/terms'),
|
||||
LinkListItem(
|
||||
title: 'ChangeNow',
|
||||
icon: 'assets/images/change_now.png',
|
||||
|
||||
Reference in New Issue
Block a user