Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
8211af4
config v5 directory with v4 configs
SajeeTechi Dec 15, 2025
4b874c7
uniform formatting
SajeeTechi Dec 15, 2025
fb14bbb
v5 ctzn config from supabase
SajeeTechi Dec 15, 2025
7051719
v5 wallet.pay.brussels config from supabase
SajeeTechi Dec 15, 2025
7e7bb5a
v5 gratitude config from supabase
SajeeTechi Dec 15, 2025
d909b11
v5 wallet.berachain.sfluv.org config from supabase
SajeeTechi Dec 15, 2025
57c4423
v5 wallet.sfluv.org config from supabase
SajeeTechi Dec 15, 2025
5d45a6c
v5 txirrin config from supabase
SajeeTechi Dec 15, 2025
e8c5c2e
v5 boliviapay config from supabase
SajeeTechi Dec 15, 2025
2ab8630
v5 bread config from supabase
SajeeTechi Dec 15, 2025
74d9d9d
v5 laborhour config from supabase
SajeeTechi Dec 15, 2025
4e087ef
v5 rooted config from supabase
SajeeTechi Dec 15, 2025
0076071
v5 wallet.commonshub.brussels config from supabase
SajeeTechi Dec 15, 2025
2683d39
v5 seldesalm config from supabase
SajeeTechi Dec 15, 2025
f5f08f8
v5 my.techi.be config from supabase
SajeeTechi Dec 15, 2025
68ec7f8
v5 wallet.regensunite.earth config from supabase
SajeeTechi Dec 15, 2025
9fc8cf0
v5 gt.celo config from supabase
SajeeTechi Dec 15, 2025
9723675
v5 ceur.celo config from supabase
SajeeTechi Dec 15, 2025
006f779
v5 eure.polygon config from supabase
SajeeTechi Dec 15, 2025
6b56cdf
v5 app config from supabase
SajeeTechi Dec 15, 2025
8f59dd4
v5 usdc.base config from supabase
SajeeTechi Dec 15, 2025
8746e49
v5 wallet.oak.community config from supabase
SajeeTechi Dec 15, 2025
dad9d9e
v5 sbc.polygon config from supabase
SajeeTechi Dec 15, 2025
6196e3c
v5 zinne config from supabase
SajeeTechi Dec 15, 2025
219ef60
v5 timebank.regensunite.earth config from supabase
SajeeTechi Dec 15, 2025
d47cdfa
v5 moos config from supabase
SajeeTechi Dec 15, 2025
7a5b27e
v5 selcoupdepouce config from supabase
SajeeTechi Dec 15, 2025
a021706
v5 cit.celo config from supabase
SajeeTechi Dec 15, 2025
7d00c34
v5 wallet.wolugo.be config from supabase
SajeeTechi Dec 15, 2025
0cc919d
v5 wtc.celo config from supabase
SajeeTechi Dec 15, 2025
692694a
v5 testnet-ethldn config from supabase
SajeeTechi Dec 15, 2025
b0cc8b0
v5 celo-c.citizenwallet.xyz config from supabase
SajeeTechi Dec 15, 2025
2800520
v5 wallet.kingfishersmedia.io config from supabase
SajeeTechi Dec 15, 2025
ca34821
uniform formatting
SajeeTechi Dec 15, 2025
f14878f
Merge pull request #263 from citizenwallet/feat/v5-community-configs
SajeeTechi Dec 15, 2025
720c086
remove commented use ConfigService().getConfig(String alias)
SajeeTechi Dec 15, 2025
6623ea1
add v5 community configs to pubspec
SajeeTechi Dec 15, 2025
fc7549f
pubspec lock
SajeeTechi Dec 15, 2025
adc4540
ios pods
SajeeTechi Dec 15, 2025
94393e0
feat: migrate config service from v4 to v5 API
SajeeTechi Dec 15, 2025
930c046
chore: migrate app database from v4 to v5
SajeeTechi Dec 15, 2025
556d060
Merge pull request #264 from citizenwallet/refactor/load-v5-community
SajeeTechi Dec 15, 2025
c90107d
init t_community db version 3 migration
SajeeTechi Dec 16, 2025
29c78bc
wrap function implementation in try-catch
SajeeTechi Dec 16, 2025
9db6e9e
wrap t_community seed implementation in try-catch
SajeeTechi Dec 16, 2025
a65427d
fix: parse API wrapper structure in config service responses
SajeeTechi Dec 16, 2025
ce08042
Merge pull request #265 from citizenwallet/feat/migration-t-community
SajeeTechi Dec 16, 2025
9382028
refactor: consolidate remote config updates in WalletLogic
SajeeTechi Dec 16, 2025
159db7b
Merge pull request #266 from citizenwallet/feat/community-config-refresh
SajeeTechi Dec 16, 2025
b40ff6d
getAccountAbstractionConfig with tests
SajeeTechi Dec 16, 2025
8fd563f
Merge pull request #267 from citizenwallet/feat/select-account-config
SajeeTechi Dec 16, 2025
eb40895
getRpcUrl with optional accountFactoryAddress
SajeeTechi Dec 16, 2025
aaebc5f
Merge pull request #268 from citizenwallet/feat/select-rpc-url
SajeeTechi Dec 16, 2025
65e1a1d
migration to t_accounts
SajeeTechi Dec 17, 2025
ef871a1
map of accoutn factory addresses of some aliases
SajeeTechi Dec 17, 2025
d739601
lookup table for v4 config primary account factory addresses
SajeeTechi Dec 17, 2025
b7bf338
feat(config): add account factory migration utility and update V4 map
SajeeTechi Dec 17, 2025
7f40e82
temp remove 'accountFactoryAddress' from class 'DBAccount'
SajeeTechi Dec 17, 2025
27c933c
feat(db): implement v4 account migration for account factory addresses
SajeeTechi Dec 17, 2025
33e8601
todo
SajeeTechi Dec 17, 2025
71680fd
TODO
SajeeTechi Dec 17, 2025
59250fb
todo
SajeeTechi Dec 17, 2025
00fb3ae
todo
SajeeTechi Dec 18, 2025
29afd4f
Merge pull request #269 from citizenwallet/feat/migration-backup-t-ac…
SajeeTechi Dec 18, 2025
15b9912
init migration apple and android cloud stored keys
SajeeTechi Dec 18, 2025
9f58eff
update migration of table t_accounts
SajeeTechi Dec 18, 2025
850465a
set/get last wallet account factory
SajeeTechi Dec 18, 2025
d17773a
todo comment
SajeeTechi Dec 18, 2025
a864ec2
todo comment
SajeeTechi Dec 18, 2025
8158ece
feat(android): implement v5 credential migration for account factory …
SajeeTechi Dec 18, 2025
44c8dd9
v5 migration of cloud account
SajeeTechi Dec 18, 2025
b434340
Merge pull request #270 from citizenwallet/feat/apple-android-saved-k…
SajeeTechi Dec 18, 2025
fc936f1
refactor(accounts): update getAllAccounts to return DBAccountV4
SajeeTechi Dec 19, 2025
3c10bf7
Merge pull request #272 from citizenwallet/t_accounts_all_DBAccountV4
SajeeTechi Dec 19, 2025
8b3639d
todo comment
SajeeTechi Dec 19, 2025
245c970
remove migration number 'InsertRowsInV4Format'
SajeeTechi Dec 19, 2025
e71a155
deprecate class DBAccountV4
SajeeTechi Dec 19, 2025
70120fe
todo comment
SajeeTechi Dec 19, 2025
e4c6972
attribute accountFactoryAddress in class DBAccount
SajeeTechi Dec 19, 2025
d3d755c
attribute _accountFactoryAddress in WalletService
SajeeTechi Dec 19, 2025
dd28423
DBAccount with account factory address
SajeeTechi Dec 19, 2025
ff41843
feat: migrate credentials to BackupWalletV5 format with accountFactor…
SajeeTechi Dec 19, 2025
fb73958
force use account factory address
SajeeTechi Dec 19, 2025
da67ff7
temp comment out delete keys
SajeeTechi Dec 21, 2025
ff51ba5
service migration versions for new release
SajeeTechi Dec 21, 2025
88461a3
Merge pull request #273 from citizenwallet/using-acc-factory-with-acc…
SajeeTechi Dec 22, 2025
fa090ef
remove debug print
SajeeTechi Dec 22, 2025
5f75491
fix(db): resolve account migration issues and clean up dirty V4 IDs
SajeeTechi Dec 22, 2025
e579e69
fix(db): enforce account ID normalization for unexpected formats
SajeeTechi Dec 22, 2025
64bcadc
feat: add migration #7 to reconcile AppKevin and AppOthers credential…
SajeeTechi Dec 22, 2025
00b0258
Merge pull request #274 from citizenwallet/fix/acc-factory-bad-migration
SajeeTechi Dec 22, 2025
2733062
use debug print
SajeeTechi Dec 23, 2025
21aa9b4
TODO: delete old keys after testing
SajeeTechi Dec 23, 2025
cf50a66
debug print
SajeeTechi Dec 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,444 changes: 2,444 additions & 0 deletions assets/config/v5/communities.json

Large diffs are not rendered by default.

2,444 changes: 2,444 additions & 0 deletions assets/config/v5/communities.test.json

Large diffs are not rendered by default.

74 changes: 74 additions & 0 deletions assets/config/v5/debug.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"ipfs": {
"url": "https://ipfs.internal.citizenwallet.xyz"
},
"scan": {
"url": "https://celoscan.io",
"name": "Celo Explorer"
},
"chains": {
"42220": {
"id": 42220,
"node": {
"url": "https://42220.engine.citizenwallet.xyz",
"ws_url": "wss://42220.engine.citizenwallet.xyz"
}
}
},
"tokens": {
"42220:0x56744910f7dEcD48c1a7FA61B4C317b15E99F156": {
"name": "KFMEDIA℠ Pathways for LATAM™",
"symbol": "KFMPFL",
"address": "0x56744910f7dEcD48c1a7FA61B4C317b15E99F156",
"chain_id": 42220,
"decimals": 0,
"standard": "erc1155"
}
},
"version": 5,
"accounts": {
"42220:0x7cC54D54bBFc65d1f0af7ACee5e4042654AF8185": {
"chain_id": 42220,
"paymaster_type": "cw-safe",
"paymaster_address": "0x02BDA8370d9497A5C808B2db237cfaA8f0733F36",
"entrypoint_address": "0x7079253c0358eF9Fd87E16488299Ef6e06F403B6",
"account_factory_address": "0x7cC54D54bBFc65d1f0af7ACee5e4042654AF8185"
}
},
"sessions": {
"42220:0xE2F3DC3E638113b9496060349e5332963d9C1152": {
"chain_id": 42220,
"module_address": "0xE2F3DC3E638113b9496060349e5332963d9C1152",
"factory_address": "0xEd0cD3886b84369A0e29Db9a4480ADF5051c76C9",
"provider_address": "0xF3004A1690f97Cf5d307eDc5958a7F76b62f9FC9"
}
},
"community": {
"url": "https://kingfishersmedia.io",
"logo": "https://assets.citizenwallet.xyz/wallet-config/_images/kfmpfl.png",
"name": "KFMEDIA℠",
"alias": "wallet.kingfishersmedia.io",
"theme": {
"primary": "#88292c"
},
"profile": {
"address": "0x5f6FEb03ad8EfeCdD2a837FAA1a29DEA2bAcfd55",
"chain_id": 42220
},
"description": "Certified Education Organization. Solving systemic educational disparity using Web3 solutions, removing barriers of entry for underdeveloped economies.",
"custom_domain": "wallet.kingfishersmedia.io",
"primary_token": {
"address": "0x56744910f7dEcD48c1a7FA61B4C317b15E99F156",
"chain_id": 42220
},
"primary_account_factory": {
"address": "0x7cC54D54bBFc65d1f0af7ACee5e4042654AF8185",
"chain_id": 42220
},
"primary_session_manager": {
"address": "0xE2F3DC3E638113b9496060349e5332963d9C1152",
"chain_id": 42220
}
},
"config_location": "https://my.citizenwallet.xyz/api/communities/wallet.kingfishersmedia.io"
}
74 changes: 37 additions & 37 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ PODS:
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- credential_manager (1.0.4):
- credential_manager_ios (2.0.5):
- Flutter
- DKImagePickerController/Core (4.3.9):
- DKImagePickerController/ImageDataManager
Expand Down Expand Up @@ -49,37 +49,37 @@ PODS:
- file_picker (0.0.1):
- DKImagePickerController/PhotoGallery
- Flutter
- Firebase/CoreOnly (11.10.0):
- FirebaseCore (~> 11.10.0)
- Firebase/Messaging (11.10.0):
- Firebase/CoreOnly (11.15.0):
- FirebaseCore (~> 11.15.0)
- Firebase/Messaging (11.15.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 11.10.0)
- firebase_core (3.13.1):
- Firebase/CoreOnly (= 11.10.0)
- FirebaseMessaging (~> 11.15.0)
- firebase_core (3.15.2):
- Firebase/CoreOnly (= 11.15.0)
- Flutter
- firebase_messaging (15.2.6):
- Firebase/Messaging (= 11.10.0)
- firebase_messaging (15.2.10):
- Firebase/Messaging (= 11.15.0)
- firebase_core
- Flutter
- FirebaseCore (11.10.0):
- FirebaseCoreInternal (~> 11.10.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Logger (~> 8.0)
- FirebaseCoreInternal (11.10.0):
- "GoogleUtilities/NSData+zlib (~> 8.0)"
- FirebaseInstallations (11.10.0):
- FirebaseCore (~> 11.10.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- FirebaseCore (11.15.0):
- FirebaseCoreInternal (~> 11.15.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreInternal (11.15.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseInstallations (11.15.0):
- FirebaseCore (~> 11.15.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (11.10.0):
- FirebaseCore (~> 11.10.0)
- FirebaseMessaging (11.15.0):
- FirebaseCore (~> 11.15.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Reachability (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- Flutter (1.0.0)
- flutter_inappwebview_ios (0.0.1):
Expand Down Expand Up @@ -178,7 +178,7 @@ PODS:
DEPENDENCIES:
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- credential_manager (from `.symlinks/plugins/credential_manager/ios`)
- credential_manager_ios (from `.symlinks/plugins/credential_manager_ios/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
Expand Down Expand Up @@ -225,8 +225,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/audioplayers_darwin/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
credential_manager:
:path: ".symlinks/plugins/credential_manager/ios"
credential_manager_ios:
:path: ".symlinks/plugins/credential_manager_ios/ios"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
firebase_core:
Expand Down Expand Up @@ -267,18 +267,18 @@ SPEC CHECKSUMS:
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
credential_manager: feb21034894e469e3686461dc96fb24bb7d350e4
credential_manager_ios: fd1d96ef11fa3d76f868f038342de171c3bc2b28
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
file_picker: be9a674155d9f334323856cb266e0d145d75d5c0
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
firebase_core: 3c2f323cae65c97a636a05a23b17730ef93df2cf
firebase_messaging: 456e01ff29a451c90097d0b45925551d5be0c143
FirebaseCore: 8344daef5e2661eb004b177488d6f9f0f24251b7
FirebaseCoreInternal: ef4505d2afb1d0ebbc33162cb3795382904b5679
FirebaseInstallations: 9980995bdd06ec8081dfb6ab364162bdd64245c3
FirebaseMessaging: 2b9f56aa4ed286e1f0ce2ee1d413aabb8f9f5cb9
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e
firebase_core: 99a37263b3c27536063a7b601d9e2a49400a433c
firebase_messaging: bf6697c61f31c7cc0f654131212ff04c0115c2c7
FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e
FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4
FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843
FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
google_sign_in_ios: 7411fab6948df90490dc4620ecbcabdc3ca04017
Expand Down
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ FutureOr<void> appRunner() async {
}

final AppDBService appDBService = AppDBService();
await appDBService.init('appv4');
await appDBService.init('appv5');
final numConfigs = (await appDBService.communities.getAll()).length;

config.singleCommunityMode = numConfigs < 2;
Expand Down
2 changes: 1 addition & 1 deletion lib/services/accounts/accounts.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ abstract class AccountsOptionsInterface {}
///
/// This is used to store wallet backups and the implementation is platform specific.
abstract class AccountsServiceInterface {
final int _version = 4;
final int _version = 7;

int get version => _version;

Expand Down
28 changes: 28 additions & 0 deletions lib/services/accounts/backup.dart
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,31 @@ class BackupWallet {
String get key => '$address@$alias';
String get value => privateKey;
}

class BackupWalletV5 extends BackupWallet {
final String accountFactoryAddress;

BackupWalletV5({
required super.address,
required super.alias,
required super.privateKey,
required String accountFactoryAddress,
}) : accountFactoryAddress =
EthereumAddress.fromHex(accountFactoryAddress).hexEip55;

// Fixes the 'json' super parameter lint
BackupWalletV5.fromJson(super.json)
: accountFactoryAddress =
EthereumAddress.fromHex(json['accountFactoryAddress']).hexEip55,
super.fromJson();

@override
Map<String, dynamic> toJson() {
final json = super.toJson();
json['accountFactoryAddress'] = accountFactoryAddress;
return json;
}

@override
String get key => '$address@$accountFactoryAddress@$alias';
}
Loading
Loading