What changed, and why it matters
This commit is purely a code-style cleanup: it runs the Dart formatter on six files related to PayNym features. No logic, behavior, or security-sensitive code was changed. It is not a security fix and does not introduce any obvious vulnerability.
No action needed; this is a formatting-only commit. Treat as routine maintenance.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff shows only whitespace, indentation, line wrapping, and trailing-comma changes produced by dart format. No functional statements, control flow, API calls, cryptographic operations, or data handling were modified. The test file only had two test description strings reformatted. There is no security-relevant change.
Changed components
lib/models/paynym/paynym_account_lite.dartlib/models/paynym/paynym_claim.dartlib/pages/paynym/paynym_claim_view.dartlib/wallets/wallet/wallet_mixin_interfaces/paynym_interface.dartlib/widgets/custom_buttons/paynym_follow_toggle_button.darttest/paynym_p2tr_test.dartInspect captured patch +257 / −311
diff --git a/lib/models/paynym/paynym_account_lite.dart b/lib/models/paynym/paynym_account_lite.dart
index 87cc036..4702be4 100644
--- a/lib/models/paynym/paynym_account_lite.dart
+++ b/lib/models/paynym/paynym_account_lite.dart
@@ -27,11 +27,11 @@ class PaynymAccountLite {
});
PaynymAccountLite.fromMap(Map<String, dynamic> map)
- : nymId = map["nymId"] as String,
- nymName = map["nymName"] as String,
- code = map["code"] as String,
- segwit = map["segwit"] as bool,
- taproot = map["taproot"] as bool? ?? inferTaproot(map["code"] as String);
+ : nymId = map["nymId"] as String,
+ nymName = map["nymName"] as String,
+ code = map["code"] as String,
+ segwit = map["segwit"] as bool,
+ taproot = map["taproot"] as bool? ?? inferTaproot(map["code"] as String);
static bool inferTaproot(String paymentCodeString) {
try {
@@ -46,12 +46,12 @@ class PaynymAccountLite {
}
Map<String, dynamic> toMap() => {
- "nymId": nymId,
- "nymName": nymName,
- "code": code,
- "segwit": segwit,
- "taproot": taproot,
- };
+ "nymId": nymId,
+ "nymName": nymName,
+ "code": code,
+ "segwit": segwit,
+ "taproot": taproot,
+ };
@override
String toString() {
diff --git a/lib/models/paynym/paynym_claim.dart b/lib/models/paynym/paynym_claim.dart
index 36afef7..e273371 100644
--- a/lib/models/paynym/paynym_claim.dart
+++ b/lib/models/paynym/paynym_claim.dart
@@ -15,13 +15,10 @@ class PaynymClaim {
PaynymClaim(this.claimed, this.token);
PaynymClaim.fromMap(Map<String, dynamic> map)
- : claimed = map["claimed"].toString(),
- token = map["token"] as String;
+ : claimed = map["claimed"].toString(),
+ token = map["token"] as String;
- Map<String, dynamic> toMap() => {
- "claimed": claimed,
- "token": token,
- };
+ Map<String, dynamic> toMap() => {"claimed": claimed, "token": token};
@override
String toString() {
diff --git a/lib/pages/paynym/paynym_claim_view.dart b/lib/pages/paynym/paynym_claim_view.dart
index 2f1bda1..f29c50e 100644
--- a/lib/pages/paynym/paynym_claim_view.dart
+++ b/lib/pages/paynym/paynym_claim_view.dart
@@ -32,10 +32,7 @@ import 'dialogs/claiming_paynym_dialog.dart';
import 'paynym_home_view.dart';
class PaynymClaimView extends ConsumerStatefulWidget {
- const PaynymClaimView({
- super.key,
- required this.walletId,
- });
+ const PaynymClaimView({super.key, required this.walletId});
final String walletId;
@@ -80,23 +77,20 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
leading: Row(
children: [
Padding(
- padding: const EdgeInsets.only(
- left: 24,
- right: 20,
- ),
+ padding: const EdgeInsets.only(left: 24, right: 20),
child: AppBarIconButton(
size: 32,
- color: Theme.of(context)
- .extension<StackColors>()!
- .textFieldDefaultBG,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldDefaultBG,
shadows: const [],
icon: SvgPicture.asset(
Assets.svg.arrowLeft,
width: 18,
height: 18,
- color: Theme.of(context)
- .extension<StackColors>()!
- .topNavIconPrimary,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
),
onPressed: Navigator.of(context).pop,
),
@@ -107,13 +101,8 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
height: 42,
color: Theme.of(context).extension<StackColors>()!.textDark,
),
- const SizedBox(
- width: 10,
- ),
- Text(
- "PayNym",
- style: STextStyles.desktopH3(context),
- ),
+ const SizedBox(width: 10),
+ Text("PayNym", style: STextStyles.desktopH3(context)),
],
),
)
@@ -129,52 +118,36 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
body: ConditionalParent(
condition: !isDesktop,
builder: (child) => SafeArea(
- child: Padding(
- padding: const EdgeInsets.all(16),
- child: child,
- ),
+ child: Padding(padding: const EdgeInsets.all(16), child: child),
),
child: ConditionalParent(
condition: isDesktop,
- builder: (child) => SizedBox(
- width: 328,
- child: child,
- ),
+ builder: (child) => SizedBox(width: 328, child: child),
child: Column(
children: [
- const Spacer(
- flex: 1,
- ),
+ const Spacer(flex: 1),
SvgPicture.asset(
Assets.svg.unclaimedPaynym,
width: MediaQuery.of(context).size.width / 2,
),
- const SizedBox(
- height: 20,
- ),
+ const SizedBox(height: 20),
Text(
"You do not have a PayNym yet.\nClaim yours now!",
style: isDesktop
? STextStyles.desktopSubtitleH2(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.textSubtitle1,
)
: STextStyles.baseXS(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.textSubtitle1,
),
textAlign: TextAlign.center,
),
- if (isDesktop)
- const SizedBox(
- height: 30,
- ),
- if (!isDesktop)
- const Spacer(
- flex: 2,
- ),
+ if (isDesktop) const SizedBox(height: 30),
+ if (!isDesktop) const Spacer(flex: 2),
PrimaryButton(
label: "Claim",
onPressed: () async {
@@ -187,8 +160,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
).then((value) => shouldCancel = value == true),
);
- final wallet = ref.read(pWallets).getWallet(widget.walletId)
- as PaynymInterface;
+ final wallet =
+ ref.read(pWallets).getWallet(widget.walletId)
+ as PaynymInterface;
if (shouldCancel) return;
@@ -225,11 +199,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
Navigator.of(context, rootNavigator: true).pop();
Navigator.of(context).pop();
} else {
- Navigator.of(context).popUntil(
- ModalRoute.withName(
- WalletView.routeName,
- ),
- );
+ Navigator.of(
+ context,
+ ).popUntil(ModalRoute.withName(WalletView.routeName));
}
await Navigator.of(context).pushNamed(
PaynymHomeView.routeName,
@@ -240,11 +212,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
Navigator.of(context, rootNavigator: true).pop();
Navigator.of(context).pop();
} else {
- Navigator.of(context).popUntil(
- ModalRoute.withName(
- WalletView.routeName,
- ),
- );
+ Navigator.of(
+ context,
+ ).popUntil(ModalRoute.withName(WalletView.routeName));
}
}
return;
@@ -252,8 +222,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
if (shouldCancel) return;
- final token =
- await ref.read(paynymAPIProvider).token(pCode.toString());
+ final token = await ref
+ .read(paynymAPIProvider)
+ .token(pCode.toString());
debugPrint("token result: $token");
@@ -268,8 +239,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
}
// sign token with notification private key
- final signature =
- await wallet.signStringWithNotificationKey(token.value!);
+ final signature = await wallet.signStringWithNotificationKey(
+ token.value!,
+ );
debugPrint("signature: $signature");
@@ -287,8 +259,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
if (claim.statusCode == 200 ||
claim.value?.claimed == pCode.toString() ||
claim.value?.claimed == "true") {
- final account =
- await ref.read(paynymAPIProvider).nym(pCode.toString());
+ final account = await ref
+ .read(paynymAPIProvider)
+ .nym(pCode.toString());
// if (!account.value!.segwit) {
// for (int i = 0; i < 100; i++) {
// final result = await _addSegwitCode(account.value!);
@@ -305,11 +278,9 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
Navigator.of(context, rootNavigator: true).pop();
Navigator.of(context).pop();
} else {
- Navigator.of(context).popUntil(
- ModalRoute.withName(
- WalletView.routeName,
- ),
- );
+ Navigator.of(
+ context,
+ ).popUntil(ModalRoute.withName(WalletView.routeName));
}
await Navigator.of(context).pushNamed(
PaynymHomeView.routeName,
@@ -328,10 +299,7 @@ class _PaynymClaimViewState extends ConsumerState<PaynymClaimView> {
}
},
),
- if (isDesktop)
- const Spacer(
- flex: 2,
- ),
+ if (isDesktop) const Spacer(flex: 2),
],
),
),
diff --git a/lib/wallets/wallet/wallet_mixin_interfaces/paynym_interface.dart b/lib/wallets/wallet/wallet_mixin_interfaces/paynym_interface.dart
index aae2119..6c815ec 100644
--- a/lib/wallets/wallet/wallet_mixin_interfaces/paynym_interface.dart
+++ b/lib/wallets/wallet/wallet_mixin_interfaces/paynym_interface.dart
@@ -109,20 +109,16 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
break;
}
- final address =
- await mainDB
- .getAddresses(walletId)
- .filter()
- .subTypeEqualTo(AddressSubType.paynymReceive)
- .and()
- .typeEqualTo(filterType)
- .and()
- .anyOf<String, Address>(
- keys,
- (q, String e) => q.otherDataEqualTo(e),
- )
- .sortByDerivationIndexDesc()
- .findFirst();
+ final address = await mainDB
+ .getAddresses(walletId)
+ .filter()
+ .subTypeEqualTo(AddressSubType.paynymReceive)
+ .and()
+ .typeEqualTo(filterType)
+ .and()
+ .anyOf<String, Address>(keys, (q, String e) => q.otherDataEqualTo(e))
+ .sortByDerivationIndexDesc()
+ .findFirst();
if (address == null) {
final generatedAddress = await _generatePaynymReceivingAddress(
@@ -131,12 +127,11 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
derivePathType: derivePathType,
);
- final existing =
- await mainDB
- .getAddresses(walletId)
- .filter()
- .valueEqualTo(generatedAddress.value)
- .findFirst();
+ final existing = await mainDB
+ .getAddresses(walletId)
+ .filter()
+ .valueEqualTo(generatedAddress.value)
+ .findFirst();
if (existing == null) {
await mainDB.putAddress(generatedAddress);
@@ -224,12 +219,11 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
value: result.address,
publicKey: [],
derivationIndex: index,
- derivationPath:
- DerivationPath()
- ..value = _receivingPaynymAddressDerivationPath(
- index,
- testnet: info.coin.network.isTestNet,
- ),
+ derivationPath: DerivationPath()
+ ..value = _receivingPaynymAddressDerivationPath(
+ index,
+ testnet: info.coin.network.isTestNet,
+ ),
type: result.type,
subType: AddressSubType.paynymReceive,
otherData: await storeCode(sender.toString()),
@@ -264,12 +258,11 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
value: result.address,
publicKey: [],
derivationIndex: index,
- derivationPath:
- DerivationPath()
- ..value = _sendPaynymAddressDerivationPath(
- index,
- testnet: info.coin.network.isTestNet,
- ),
+ derivationPath: DerivationPath()
+ ..value = _sendPaynymAddressDerivationPath(
+ index,
+ testnet: info.coin.network.isTestNet,
+ ),
type: result.type,
subType: AddressSubType.paynymSend,
otherData: await storeCode(other.toString()),
@@ -300,12 +293,11 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
derivePathType: derivePathType,
);
- final existing =
- await mainDB
- .getAddresses(walletId)
- .filter()
- .valueEqualTo(nextAddress.value)
- .findFirst();
+ final existing = await mainDB
+ .getAddresses(walletId)
+ .filter()
+ .valueEqualTo(nextAddress.value)
+ .findFirst();
if (existing == null) {
await mainDB.putAddress(nextAddress);
@@ -409,12 +401,9 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
// Clean prefix: strip leading length byte if present (coinlib recalculates)
final prefixBytes =
cryptoCurrency.networkParams.messagePrefix.toUint8ListFromUtf8;
- final ignoreFirstByte =
- prefixBytes.first == prefixBytes.length - 1;
- final prefix = (ignoreFirstByte
- ? prefixBytes.sublist(1)
- : prefixBytes)
- .toUtf8String;
+ final ignoreFirstByte = prefixBytes.first == prefixBytes.length - 1;
+ final prefix =
+ (ignoreFirstByte ? prefixBytes.sublist(1) : prefixBytes).toUtf8String;
final signed = coinlib.MessageSignature.sign(
key: key,
@@ -490,19 +479,15 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
for (int i = startIndex; i < maxCount; i++) {
final keys = await lookupKey(pCode.toString());
- final address =
- await mainDB
- .getAddresses(walletId)
- .filter()
- .subTypeEqualTo(AddressSubType.paynymSend)
- .and()
- .anyOf<String, Address>(
- keys,
- (q, String e) => q.otherDataEqualTo(e),
- )
- .and()
- .derivationIndexEqualTo(i)
- .findFirst();
+ final address = await mainDB
+ .getAddresses(walletId)
+ .filter()
+ .subTypeEqualTo(AddressSubType.paynymSend)
+ .and()
+ .anyOf<String, Address>(keys, (q, String e) => q.otherDataEqualTo(e))
+ .and()
+ .derivationIndexEqualTo(i)
+ .findFirst();
if (address != null) {
final count = await fetchTxCount(
@@ -586,9 +571,11 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
// end since taproot inputs don't expose the raw public key needed by the
// receiver to compute ECDH for BIP47 notification parsing.
spendableOutputs.sort((a, b) {
- final aIsTaproot = a.address?.startsWith('bc1p') == true ||
+ final aIsTaproot =
+ a.address?.startsWith('bc1p') == true ||
a.address?.startsWith('tb1p') == true;
- final bIsTaproot = b.address?.startsWith('bc1p') == true ||
+ final bIsTaproot =
+ b.address?.startsWith('bc1p') == true ||
b.address?.startsWith('tb1p') == true;
if (aIsTaproot != bIsTaproot) {
return aIsTaproot ? 1 : -1;
@@ -624,10 +611,9 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
}
// gather required signing data
- final inputsWithKeys =
- (await addSigningKeys(
- utxoObjectsToUse.map((e) => StandardInput(e)).toList(),
- )).whereType<StandardInput>().toList();
+ final inputsWithKeys = (await addSigningKeys(
+ utxoObjectsToUse.map((e) => StandardInput(e)).toList(),
+ )).whereType<StandardInput>().toList();
final vSizeForNoChange = BigInt.from(
(await _createNotificationTx(
@@ -923,8 +909,8 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
clTx = clTx.addInput(input);
}
- final String notificationAddress =
- targetPaymentCode.notificationAddressP2PKH();
+ final String notificationAddress = targetPaymentCode
+ .notificationAddressP2PKH();
final address = coinlib.Address.fromString(
normalizeAddress(notificationAddress),
@@ -1092,13 +1078,12 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
final myNotificationAddress = await getMyNotificationAddress();
- final txns =
- await mainDB.isar.transactionV2s
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .subTypeEqualTo(TransactionSubType.bip47Notification)
- .findAll();
+ final txns = await mainDB.isar.transactionV2s
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .subTypeEqualTo(TransactionSubType.bip47Notification)
+ .findAll();
for (final tx in txns) {
switch (tx.type) {
@@ -1132,15 +1117,14 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
case TransactionType.outgoing:
for (final output in tx.outputs) {
for (final outputAddress in output.addresses) {
- final address =
- await mainDB.isar.addresses
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .subTypeEqualTo(AddressSubType.paynymNotification)
- .and()
- .valueEqualTo(outputAddress)
- .findFirst();
+ final address = await mainDB.isar.addresses
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .subTypeEqualTo(AddressSubType.paynymNotification)
+ .and()
+ .valueEqualTo(outputAddress)
+ .findFirst();
if (address?.otherData != null) {
final code = await paymentCodeStringByKey(address!.otherData!);
@@ -1194,8 +1178,8 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
final designatedInput = transaction.inputs.first;
- final txPoint =
- designatedInput.outpoint!.txid.toUint8ListFromHex.reversed.toList();
+ final txPoint = designatedInput.outpoint!.txid.toUint8ListFromHex.reversed
+ .toList();
final txPointIndex = designatedInput.outpoint!.vout;
final rev = Uint8List(txPoint.length + 4);
@@ -1258,8 +1242,8 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
final designatedInput = transaction.inputs.first;
- final txPoint =
- designatedInput.outpoint!.txid.toUint8ListFromHex.toList();
+ final txPoint = designatedInput.outpoint!.txid.toUint8ListFromHex
+ .toList();
final txPointIndex = designatedInput.outpoint!.vout;
final rev = Uint8List(txPoint.length + 4);
@@ -1309,13 +1293,12 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
Future<List<PaymentCode>>
getAllPaymentCodesFromNotificationTransactions() async {
- final txns =
- await mainDB.isar.transactionV2s
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .subTypeEqualTo(TransactionSubType.bip47Notification)
- .findAll();
+ final txns = await mainDB.isar.transactionV2s
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .subTypeEqualTo(TransactionSubType.bip47Notification)
+ .findAll();
final List<PaymentCode> codes = [];
@@ -1326,15 +1309,14 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
for (final outputAddress in output.addresses.where(
(e) => e.isNotEmpty,
)) {
- final address =
- await mainDB.isar.addresses
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .subTypeEqualTo(AddressSubType.paynymNotification)
- .and()
- .valueEqualTo(outputAddress)
- .findFirst();
+ final address = await mainDB.isar.addresses
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .subTypeEqualTo(AddressSubType.paynymNotification)
+ .and()
+ .valueEqualTo(outputAddress)
+ .findFirst();
if (address?.otherData != null) {
final codeString = await paymentCodeStringByKey(
@@ -1380,15 +1362,14 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
Future<void> checkForNotificationTransactionsTo(
Set<String> otherCodeStrings,
) async {
- final sentNotificationTransactions =
- await mainDB.isar.transactionV2s
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .subTypeEqualTo(TransactionSubType.bip47Notification)
- .and()
- .typeEqualTo(TransactionType.outgoing)
- .findAll();
+ final sentNotificationTransactions = await mainDB.isar.transactionV2s
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .subTypeEqualTo(TransactionSubType.bip47Notification)
+ .and()
+ .typeEqualTo(TransactionType.outgoing)
+ .findAll();
final List<PaymentCode> codes = [];
for (final codeString in otherCodeStrings) {
@@ -1547,17 +1528,16 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
}
Future<Address> getMyNotificationAddress() async {
- final storedAddress =
- await mainDB
- .getAddresses(walletId)
- .filter()
- .subTypeEqualTo(AddressSubType.paynymNotification)
- .and()
- .typeEqualTo(AddressType.p2pkh)
- .and()
- .not()
- .typeEqualTo(AddressType.nonWallet)
- .findFirst();
+ final storedAddress = await mainDB
+ .getAddresses(walletId)
+ .filter()
+ .subTypeEqualTo(AddressSubType.paynymNotification)
+ .and()
+ .typeEqualTo(AddressType.p2pkh)
+ .and()
+ .not()
+ .typeEqualTo(AddressType.nonWallet)
+ .findFirst();
if (storedAddress != null) {
return storedAddress;
@@ -1576,19 +1556,20 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
pubkey: paymentCode.notificationPublicKey(),
);
- final addressString =
- btc_dart.P2PKH(data: data, network: networkType).data.address!;
+ final addressString = btc_dart
+ .P2PKH(data: data, network: networkType)
+ .data
+ .address!;
Address address = Address(
walletId: walletId,
value: addressString,
publicKey: paymentCode.getPubKey(),
derivationIndex: 0,
- derivationPath:
- DerivationPath()
- ..value = _notificationDerivationPath(
- testnet: info.coin.network.isTestNet,
- ),
+ derivationPath: DerivationPath()
+ ..value = _notificationDerivationPath(
+ testnet: info.coin.network.isTestNet,
+ ),
type: AddressType.p2pkh,
subType: AddressSubType.paynymNotification,
otherData: await storeCode(paymentCode.toString()),
@@ -1599,17 +1580,16 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
// beginning to see if there already was notification address. This would
// lead to a Unique Index violation error
await mainDB.isar.writeTxn(() async {
- final storedAddress =
- await mainDB
- .getAddresses(walletId)
- .filter()
- .subTypeEqualTo(AddressSubType.paynymNotification)
- .and()
- .typeEqualTo(AddressType.p2pkh)
- .and()
- .not()
- .typeEqualTo(AddressType.nonWallet)
- .findFirst();
+ final storedAddress = await mainDB
+ .getAddresses(walletId)
+ .filter()
+ .subTypeEqualTo(AddressSubType.paynymNotification)
+ .and()
+ .typeEqualTo(AddressType.p2pkh)
+ .and()
+ .not()
+ .typeEqualTo(AddressType.nonWallet)
+ .findFirst();
if (storedAddress == null) {
await mainDB.isar.addresses.put(address);
@@ -1687,21 +1667,19 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
overrideAddresses ?? await fetchAddressesForElectrumXScan();
// Separate receiving and change addresses.
- final Set<String> receivingAddresses =
- allAddressesOld
- .where(
- (e) =>
- e.subType == AddressSubType.receiving ||
- e.subType == AddressSubType.paynymNotification ||
- e.subType == AddressSubType.paynymReceive,
- )
- .map((e) => e.value)
- .toSet();
- final Set<String> changeAddresses =
- allAddressesOld
- .where((e) => e.subType == AddressSubType.change)
- .map((e) => e.value)
- .toSet();
+ final Set<String> receivingAddresses = allAddressesOld
+ .where(
+ (e) =>
+ e.subType == AddressSubType.receiving ||
+ e.subType == AddressSubType.paynymNotification ||
+ e.subType == AddressSubType.paynymReceive,
+ )
+ .map((e) => e.value)
+ .toSet();
+ final Set<String> changeAddresses = allAddressesOld
+ .where((e) => e.subType == AddressSubType.change)
+ .map((e) => e.value)
+ .toSet();
// Remove duplicates.
final allAddressesSet = {...receivingAddresses, ...changeAddresses};
@@ -1711,16 +1689,15 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
allAddressesSet,
);
- final unconfirmedTxs =
- await mainDB.isar.transactionV2s
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .heightIsNull()
- .or()
- .heightEqualTo(0)
- .txidProperty()
- .findAll();
+ final unconfirmedTxs = await mainDB.isar.transactionV2s
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .heightIsNull()
+ .or()
+ .heightEqualTo(0)
+ .txidProperty()
+ .findAll();
allTxHashes.addAll(unconfirmedTxs.map((e) => {"tx_hash": e}));
@@ -1752,13 +1729,12 @@ mixin PaynymInterface<T extends PaynymCurrencyInterface>
"'message': 'No such mempool or blockchain transaction",
)) {
await mainDB.isar.writeTxn(
- () async =>
- await mainDB.isar.transactionV2s
- .where()
- .walletIdEqualTo(walletId)
- .filter()
- .txidEqualTo(txid)
- .deleteFirst(),
+ () async => await mainDB.isar.transactionV2s
+ .where()
+ .walletIdEqualTo(walletId)
+ .filter()
+ .txidEqualTo(txid)
+ .deleteFirst(),
);
continue;
} else {
diff --git a/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart b/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart
index 24613bc..c2a4c6c 100644
--- a/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart
+++ b/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart
@@ -29,11 +29,7 @@ import '../desktop/primary_button.dart';
import '../desktop/secondary_button.dart';
import '../loading_indicator.dart';
-enum PaynymFollowToggleButtonStyle {
- primary,
- detailsPopup,
- detailsDesktop,
-}
+enum PaynymFollowToggleButtonStyle { primary, detailsPopup, detailsDesktop }
const kDisableFollowing = false;
@@ -63,12 +59,8 @@ class _PaynymFollowToggleButtonState
unawaited(
showDialog<void>(
context: context,
- builder: (context) => const LoadingIndicator(
- width: 200,
- ),
- ).then(
- (_) => loadingPopped = true,
- ),
+ builder: (context) => const LoadingIndicator(width: 200),
+ ).then((_) => loadingPopped = true),
);
// get wallet to access paynym calls
@@ -81,29 +73,35 @@ class _PaynymFollowToggleButtonState
final myPCode = await wallet.getPaymentCode(isSegwit: false);
- PaynymResponse<String> token =
- await ref.read(paynymAPIProvider).token(myPCode.toString());
+ PaynymResponse<String> token = await ref
+ .read(paynymAPIProvider)
+ .token(myPCode.toString());
// sign token with notification private key
String signature = await wallet.signStringWithNotificationKey(token.value!);
- var result = await ref.read(paynymAPIProvider).follow(
+ var result = await ref
+ .read(paynymAPIProvider)
+ .follow(
token.value!,
signature,
followedAccount.value!.nonSegwitPaymentCode.code,
);
int i = 0;
- for (;
- i < 10 &&
- result.statusCode == 401; //"401 Unauthorized - Bad signature";
- i++) {
+ for (
+ ;
+ i < 10 && result.statusCode == 401; //"401 Unauthorized - Bad signature";
+ i++
+ ) {
token = await ref.read(paynymAPIProvider).token(myPCode.toString());
// sign token with notification private key
signature = await wallet.signStringWithNotificationKey(token.value!);
- result = await ref.read(paynymAPIProvider).follow(
+ result = await ref
+ .read(paynymAPIProvider)
+ .follow(
token.value!,
signature,
followedAccount.value!.nonSegwitPaymentCode.code,
@@ -115,7 +113,8 @@ class _PaynymFollowToggleButtonState
Logging.instance.d("Follow result: $result on try $i");
- final followSuccess = result.statusCode == 200 ||
+ final followSuccess =
+ result.statusCode == 200 ||
result.value?.following == followedAccount.value?.nymID;
if (followSuccess && followedAccount.value != null) {
@@ -163,7 +162,8 @@ class _PaynymFollowToggleButtonState
unawaited(
showFloatingFlushBar(
type: FlushBarType.warning,
- message: "Failed to follow ${followedAccount.value?.nymName ?? "PayNym"}",
+ message:
+ "Failed to follow ${followedAccount.value?.nymName ?? "PayNym"}",
context: context,
),
);
@@ -178,12 +178,8 @@ class _PaynymFollowToggleButtonState
unawaited(
showDialog<void>(
context: context,
- builder: (context) => const LoadingIndicator(
- width: 200,
- ),
- ).then(
- (_) => loadingPopped = true,
- ),
+ builder: (context) => const LoadingIndicator(width: 200),
+ ).then((_) => loadingPopped = true),
);
final wallet =
@@ -195,29 +191,35 @@ class _PaynymFollowToggleButtonState
final myPCode = await wallet.getPaymentCode(isSegwit: false);
- PaynymResponse<String> token =
- await ref.read(paynymAPIProvider).token(myPCode.toString());
+ PaynymResponse<String> token = await ref
+ .read(paynymAPIProvider)
+ .token(myPCode.toString());
// sign token with notification private key
String signature = await wallet.signStringWithNotificationKey(token.value!);
- var result = await ref.read(paynymAPIProvider).unfollow(
+ var result = await ref
+ .read(paynymAPIProvider)
+ .unfollow(
token.value!,
signature,
followedAccount.value!.nonSegwitPaymentCode.code,
);
int i = 0;
- for (;
- i < 10 &&
- result.statusCode == 401; //"401 Unauthorized - Bad signature";
- i++) {
+ for (
+ ;
+ i < 10 && result.statusCode == 401; //"401 Unauthorized - Bad signature";
+ i++
+ ) {
token = await ref.read(paynymAPIProvider).token(myPCode.toString());
// sign token with notification private key
signature = await wallet.signStringWithNotificationKey(token.value!);
- result = await ref.read(paynymAPIProvider).unfollow(
+ result = await ref
+ .read(paynymAPIProvider)
+ .unfollow(
token.value!,
signature,
followedAccount.value!.nonSegwitPaymentCode.code,
@@ -228,7 +230,8 @@ class _PaynymFollowToggleButtonState
Logging.instance.d("Unfollow result: $result on try $i");
- final unfollowSuccess = result.statusCode == 200 ||
+ final unfollowSuccess =
+ result.statusCode == 200 ||
result.value?.unfollowing == followedAccount.value?.nymID;
if (unfollowSuccess && followedAccount.value != null) {
@@ -248,8 +251,9 @@ class _PaynymFollowToggleButtonState
final myAccount = ref.read(myPaynymAccountStateProvider.state).state!;
- myAccount.following
- .removeWhere((e) => e.nymId == followedAccount.value!.nymID);
+ myAccount.following.removeWhere(
+ (e) => e.nymId == followedAccount.value!.nymID,
+ );
ref.read(myPaynymAccountStateProvider.state).state = myAccount.copyWith();
@@ -267,7 +271,8 @@ class _PaynymFollowToggleButtonState
unawaited(
showFloatingFlushBar(
type: FlushBarType.warning,
- message: "Failed to unfollow ${followedAccount.value?.nymName ?? "PayNym"}",
+ message:
+ "Failed to unfollow ${followedAccount.value?.nymName ?? "PayNym"}",
context: context,
),
);
@@ -323,8 +328,9 @@ class _PaynymFollowToggleButtonState
isFollowing ? Assets.svg.userMinus : Assets.svg.userPlus,
width: 16,
height: 16,
- color:
- Theme.of(context).extension<StackColors>()!.buttonTextSecondary,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.buttonTextSecondary,
),
onPressed: kDisableFollowing ? null : _onPressed,
);
@@ -337,8 +343,9 @@ class _PaynymFollowToggleButtonState
isFollowing ? Assets.svg.userMinus : Assets.svg.userPlus,
width: 16,
height: 16,
- color:
- Theme.of(context).extension<StackColors>()!.buttonTextSecondary,
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.buttonTextSecondary,
),
iconSpacing: 6,
onPressed: kDisableFollowing ? null : _onPressed,
diff --git a/test/paynym_p2tr_test.dart b/test/paynym_p2tr_test.dart
index c92c674..e4fd1ab 100644
--- a/test/paynym_p2tr_test.dart
+++ b/test/paynym_p2tr_test.dart
@@ -61,8 +61,7 @@ void main() {
});
group('PaynymAccountLite.fromMap taproot inference', () {
- test(
- 'fromMap infers taproot=true when taproot key is absent '
+ test('fromMap infers taproot=true when taproot key is absent '
'but payment code has taproot bit set', () {
final map = <String, dynamic>{
'nymId': 'test-id',
@@ -76,8 +75,7 @@ void main() {
expect(account.taproot, isTrue);
});
- test(
- 'fromMap infers taproot=false when taproot key is absent '
+ test('fromMap infers taproot=false when taproot key is absent '
'and payment code does not have taproot bit set', () {
final map = <String, dynamic>{
'nymId': 'test-id',
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.