diff --git a/.gitignore b/.gitignore index bc741fb5..3d6fadb4 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,6 @@ android_keys.zip /build/ # Web related -lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..68640870 --- /dev/null +++ b/Makefile @@ -0,0 +1,69 @@ +all: lint format + +# Adding a help file: https://gist.github.com/prwhite/8168133#gistcomment-1313022 +help: ## This help dialog. + @IFS=$$'\n' ; \ + help_lines=(`fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//'`); \ + for help_line in $${help_lines[@]}; do \ + IFS=$$'#' ; \ + help_split=($$help_line) ; \ + help_command=`echo $${help_split[0]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ + help_info=`echo $${help_split[2]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ + printf "%-30s %s\n" $$help_command $$help_info ; \ + done + +build_web: + @flutter clean + @npm install + @npm run build + @flutter pub get + @flutter build web --web-renderer html --csp --release + +run_unit: ## Runs unit tests + @echo "╠ Running the tests" + @flutter test || (echo "Error while running tests"; exit 1) + +clean: ## Cleans the environment + @echo "╠ Cleaning the project..." + @rm -rf pubspec.lock + @flutter clean + @flutter pub get +fix_warnings: ## fix any warnings + @echo "╠ Attempting to fix warnings..." + @dart fix --dry-run + @dart fix --apply +watch: ## Watches the files for changes + @echo "╠ Watching the project..." + @flutter pub run build_runner watch --delete-conflicting-outputs + + +gen: ## Generates the assets + @echo "╠ Generating the assets..." + @flutter pub get + @fluttergen + @flutter packages pub run build_runner build --delete-conflicting-outputs + +format: ## Formats the code + @echo "╠ Formatting the code" + @dart format lib . + @flutter pub run import_sorter:main + @flutter format lib + +lint: ## Lints the code + @echo "╠ Verifying code..." + @dart analyze . || (echo "Error in project"; exit 1) + +upgrade: clean ## Upgrades dependencies + @echo "╠ Upgrading dependencies..." + @flutter pub upgrade + +commit: format lint run_unit + @echo "╠ Committing..." + git add . + git commit + +analyze: + flutter run dart_code_metrics:metrics analyze lib + +ditto: + echo "hello world" \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index cf8e2855..f151b9dc 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -33,7 +33,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 31 + compileSdkVersion 32 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/assets/icons/clock_border.png b/assets/icons/clock_border.png new file mode 100644 index 00000000..f0ef82d3 Binary files /dev/null and b/assets/icons/clock_border.png differ diff --git a/assets/icons/connect_dapp.png b/assets/icons/connect_dapp.png new file mode 100644 index 00000000..0708dc4c Binary files /dev/null and b/assets/icons/connect_dapp.png differ diff --git a/assets/icons/poly_icon_circle.png b/assets/icons/poly_icon_circle.png new file mode 100644 index 00000000..1d31a3f6 Binary files /dev/null and b/assets/icons/poly_icon_circle.png differ diff --git a/assets/icons/undefined_icon.png b/assets/icons/undefined_icon.png index aacf05ee..70b68fea 100644 Binary files a/assets/icons/undefined_icon.png and b/assets/icons/undefined_icon.png differ diff --git a/generate-protos.sh b/generate-protos.sh new file mode 100755 index 00000000..26b852ac --- /dev/null +++ b/generate-protos.sh @@ -0,0 +1,15 @@ +source_path=$1 + +mkdir -p ./lib/genus/generated + +protoc --dart_out=grpc:./lib/genus/generated \ + -I $source_path \ + $source_path/types.proto \ + $source_path/filters.proto \ + $source_path/transactions_query.proto \ + $source_path/blocks_query.proto \ + $source_path/transactions_subscription.proto \ + $source_path/blocks_subscription.proto \ + $source_path/services_types.proto + + diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 8d4492f9..9625e105 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 9.0 + 11.0 diff --git a/ios/Podfile b/ios/Podfile index 1e8c3c90..88359b22 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index fafe596b..54f54225 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,14 +1,14 @@ PODS: - "app_settings (3.0.0+1)": - Flutter - - DKImagePickerController/Core (4.3.3): + - DKImagePickerController/Core (4.3.4): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.3) - - DKImagePickerController/PhotoGallery (4.3.3): + - DKImagePickerController/ImageDataManager (4.3.4) + - DKImagePickerController/PhotoGallery (4.3.4): - DKImagePickerController/Core - DKPhotoGallery - - DKImagePickerController/Resource (4.3.3) + - DKImagePickerController/Resource (4.3.4) - DKPhotoGallery (0.0.17): - DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Model (= 0.0.17) @@ -46,9 +46,9 @@ PODS: - Flutter - path_provider_ios (0.0.1): - Flutter - - SDWebImage (5.12.5): - - SDWebImage/Core (= 5.12.5) - - SDWebImage/Core (5.12.5) + - SDWebImage (5.13.4): + - SDWebImage/Core (= 5.13.4) + - SDWebImage/Core (5.13.4) - SwiftyGif (5.4.3) - url_launcher_ios (0.0.1): - Flutter @@ -93,19 +93,19 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: app_settings: d103828c9f5d515c4df9ee754dabd443f7cedcf3 - DKImagePickerController: 72fd378f244cef3d27288e0aebf217a4467e4012 + DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 - Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 - SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e + SDWebImage: e5cc87bf736e60f49592f307bdf9e157189298a3 SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de -PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c +PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 COCOAPODS: 1.11.3 diff --git a/lib/constants/assets.dart b/lib/constants/assets.dart index f6c9137e..1df7b818 100644 --- a/lib/constants/assets.dart +++ b/lib/constants/assets.dart @@ -78,7 +78,10 @@ class RibnAssets { static const plusGrey = 'packages/ribn_toolkit/assets/icons/plus_grey.png'; static const walletBlue = 'packages/ribn_toolkit/assets/icons/wallet_blue.png'; static const walletGrey = 'packages/ribn_toolkit/assets/icons/wallet_grey.png'; + static const clockBlue = 'packages/ribn_toolkit/assets/icons/clock_blue.png'; + static const clockGrey = 'packages/ribn_toolkit/assets/icons/clock_grey.png'; static const copyIcon = 'packages/ribn_toolkit/assets/icons/copy_icon.png'; + static const circlePlus = 'packages/ribn_toolkit/assets/icons/circle_plus.png'; static const copyIconAlternate = 'assets/icons/copy_icon_alternate.png'; static const fingerPrintAssets = 'assets/icons/finger_print_assets.png'; static const redDangerTriangle = 'assets/icons/red_danger_triangle.png'; @@ -112,5 +115,8 @@ class RibnAssets { static const andriodBiometricsOutline = 'assets/icons/android_biometrics_outline.png'; static const addPlusPng = 'assets/icons/add_plus.png'; static const documentPng = 'assets/icons/document.png'; + static const polyIconCircle = 'assets/icons/poly_icon_circle.png'; + static const clockWithBorder = 'assets/icons/clock_border.png'; static const walletWithBorder = 'assets/icons/wallet_with_border.png'; + static const connectDApp = 'assets/icons/connect_dapp.png'; } diff --git a/lib/constants/network_utils.dart b/lib/constants/network_utils.dart index 4c6bc8ce..c1115ebc 100644 --- a/lib/constants/network_utils.dart +++ b/lib/constants/network_utils.dart @@ -7,6 +7,7 @@ class NetworkUtils { static const String toplNet = 'toplnet'; static const String valhalla = 'valhalla'; static const String private = 'private'; + static const String privateIP = '35.226.176.100'; static int toplNetId = constants.networkRegistry[toplNet]!; static int valhallaId = constants.networkRegistry[valhalla]!; static int privateId = constants.networkRegistry[private]!; @@ -24,6 +25,6 @@ class NetworkUtils { static Map networkUrls = { valhallaId: 'https://vertx.topl.services/valhalla/$projectId', toplNetId: 'https://vertx.topl.services/mainnet/$projectId', - privateId: 'http://localhost:9085' + privateId: 'http://$privateIP:9085' }; } diff --git a/lib/constants/routes.dart b/lib/constants/routes.dart index b6ef9dc8..a697f6ae 100644 --- a/lib/constants/routes.dart +++ b/lib/constants/routes.dart @@ -36,6 +36,8 @@ class Routes { static const polyTransferInput = '/poly-transfer-input'; static const txReview = '/tx-review'; static const txConfirmation = '/tx-confirmation'; + static const txHistory = '/tx-history'; + static const txHistoryDetails = '/tx-history-details'; static const mintInput = '/mint-input'; static const settings = '/settings'; static const assetDetails = '/asset-details'; @@ -44,4 +46,7 @@ class Routes { static const externalSigning = '/ext-signing'; static const enable = '/enable'; static const error = '/error'; + static const connectDApp = '/connect-dapp'; + static const reviewAndSignDApp = '/review-and-sign'; + static const loadingDApp = '/loading-dapp'; } diff --git a/lib/constants/rules.dart b/lib/constants/rules.dart index 47c367fa..5ecda1e1 100644 --- a/lib/constants/rules.dart +++ b/lib/constants/rules.dart @@ -23,12 +23,14 @@ class Rules { static const int assetCodeVersion = constants.supportedAssetCodeVersion; static const int internalIdx = 1; static Map txHistoryUrls = { - NetworkUtils.valhallaId: 'https://annulus-api.topl.services/staging/valhalla/', - NetworkUtils.toplNetId: 'https://annulus-api.topl.services/staging/toplnet/', + NetworkUtils.valhallaId: 'https://annulus-api.topl.services/staging/valhalla', + NetworkUtils.toplNetId: 'https://annulus-api.topl.services/staging/toplnet', + NetworkUtils.privateId: 'https://annulus-api.topl.services/staging/valhalla', }; static Map txDetailsRedirectUrls = { NetworkUtils.valhallaId: 'https://staging.valhalla.annulus.topl.services/#/transaction/', NetworkUtils.toplNetId: 'https://staging.toplnet.annulus.topl.services/#/transaction/', + NetworkUtils.privateId: 'https://staging.valhalla.annulus.topl.services/#/transaction/', }; static String txHistoryUrl(String addr, int networkId) => '${txHistoryUrls[networkId]!}/v1/address/history/$addr'; static String txDetailsUrl(String txId, int networkId) => '${txDetailsRedirectUrls[networkId]!}$txId'; diff --git a/lib/constants/strings.dart b/lib/constants/strings.dart index 33b5959c..b0dd61ad 100644 --- a/lib/constants/strings.dart +++ b/lib/constants/strings.dart @@ -7,7 +7,7 @@ class Strings { static const String assets = 'Assets'; static const String send = 'Send'; static const String receive = 'Receive'; - static const String transactionHistory = 'Transaction History'; + static const String transactionHistory = 'Activity details'; static const String generateNewAddress = 'GENERATE NEW ADDRESS'; static const String noAddresses = 'You have no addresses'; static const String settings = 'Settings'; @@ -143,13 +143,20 @@ Write down the each word in the exact order it is presented.'''; '''Export Topl Main Key and save it somewhere secure.\nYou can reimport this to restore your wallet.'''; static const String exportWallet = 'Export Wallet'; static const String dangerZone = 'Danger Zone'; - static const String actionNotReversible = 'Careful, this action is not reversible!'; - static const String deleteWallet = 'Delete Wallet'; + static const String actionNotReversible = 'Careful, these actions are not reversible!'; + static const String removeWallet = 'Remove wallet from your device'; + static const String disconnectDApps = 'Disconnect DApps from Ribn'; + static const String delete = 'Delete'; + static const String disconnect = 'Disconnect'; static const String deleteRibnWallet = 'Delete Ribn Wallet'; + static const String disconnectRibnWalletDApps = 'Disconnect all DApps from Ribn wallet?'; static const String deleteRibnWalletDesc = 'Enter your wallet password to delete this wallet.\n\nThis action is not reversible. Your Ribn wallet will be deleted from this device.'; + static const String disconnectRibnWalletDAppsDesc = + 'By disconnecting, Ribn wallet will remove authorization to the following DApps:'; static const String noIChangedMyMind = 'NO, I CHANGED MY MIND!'; static const String yesIWantToDelete = 'YES, I WANT TO DELETE.'; + static const String yesIWantToDisconnect = 'YES, I WANT TO DISCONNECT.'; static const String enterWalletPassword = 'Enter Wallet Password'; static const String unlock = 'Unlock'; static const String next = 'Next'; @@ -270,7 +277,17 @@ Write down the each word in the exact order it is presented.'''; static const String enableBiometricsDescription = '''Would you like to turn on biometrics for faster access to Ribn Wallet?\n Ribn Wallet does not control the functionality of biometrics and does not have access to your biometrics information.'''; + static const String recentActivity = 'Recent Activity'; + static const String transactionDetails = 'Activity details'; + static const String noActivityToReview = 'You currently have no wallet activity to review.'; static const String noAssetsInWallet = 'You currently have no assets in your wallet'; static const String emptyStateBody = 'Here’s how you can get started:\n • Mint a new asset to a wallet address\n • Share your address to receive assets'; + static const String connect = 'Connect'; + static const String connectDApp = ' allowing this site to see my Ribn address, and suggest transactions to approve.'; + static const String connecting = 'Connecting...'; + static const String executeTransaction = 'You are about to execute the following transaction on'; + + + } diff --git a/lib/containers/settings_container.dart b/lib/containers/settings_container.dart index 61589b6a..b8cec0ba 100644 --- a/lib/containers/settings_container.dart +++ b/lib/containers/settings_container.dart @@ -4,10 +4,12 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; - import 'package:ribn/actions/misc_actions.dart'; import 'package:ribn/models/app_state.dart'; +import 'package:ribn/platform/platform.dart'; import 'package:ribn/presentation/settings/sections/delete_wallet_confirmation_dialog.dart'; +import 'package:ribn/presentation/settings/sections/disconnect_wallet_confirmation_dialog.dart'; + /// Intended to wrap the [SettingsPage] and provide it with the the [SettingsViewModel]. class SettingsContainer extends StatelessWidget { @@ -31,18 +33,25 @@ class SettingsViewModel { /// Handler for when user selects 'delete wallet' final Future Function(BuildContext context) onDeletePressed; + /// Handler for when user selects 'disconnect wallet' + final Future Function(BuildContext context) onDisconnectPressed; + /// The current app version. final String appVersion; /// True if biometrics authentication is enabled final bool isBiometricsEnabled; + bool canDisconnect = false; + SettingsViewModel({ required this.exportToplMainKey, required this.onDeletePressed, + required this.onDisconnectPressed, required this.appVersion, required this.isBiometricsEnabled, }); + static SettingsViewModel fromStore(Store store) { return SettingsViewModel( exportToplMainKey: () => store.dispatch( @@ -55,7 +64,10 @@ class SettingsViewModel { await showDialog( context: context, builder: (context) => DeleteWalletConfirmationDialog( - onConfirmDeletePressed: (String password, VoidCallback onIncorrectPasswordEntered) async { + onConfirmDeletePressed: ( + String password, + VoidCallback onIncorrectPasswordEntered, + ) async { final Completer actionCompleter = Completer(); store.dispatch( DeleteWalletAction( @@ -71,6 +83,17 @@ class SettingsViewModel { ), ); }, + onDisconnectPressed: (BuildContext context) async { + final dApps = await PlatformUtils.instance + .convertToFuture(PlatformUtils.instance.getDAppList()); + await PlatformUtils.instance.consoleLog(dApps); + // final bool disconnectResult = + await showDialog( + context: context, + builder: (context) => + DisconnectWalletConfirmationDialog(dApps: dApps), + ); + }, appVersion: store.state.appVersion, isBiometricsEnabled: store.state.userDetailsState.isBiometricsEnabled, ); @@ -88,6 +111,9 @@ class SettingsViewModel { @override int get hashCode { - return exportToplMainKey.hashCode ^ onDeletePressed.hashCode ^ appVersion.hashCode ^ isBiometricsEnabled.hashCode; + return exportToplMainKey.hashCode ^ + onDeletePressed.hashCode ^ + appVersion.hashCode ^ + isBiometricsEnabled.hashCode; } } diff --git a/lib/containers/transaction_history_container.dart b/lib/containers/transaction_history_container.dart new file mode 100644 index 00000000..510aa412 --- /dev/null +++ b/lib/containers/transaction_history_container.dart @@ -0,0 +1,240 @@ +import 'package:brambldart/brambldart.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_redux/flutter_redux.dart'; +import 'package:redux/redux.dart'; +import 'package:ribn/genus/generated/filters.pb.dart'; +import 'package:ribn/genus/generated/services_types.pb.dart'; +import 'package:ribn/genus/generated/transactions_query.pbgrpc.dart'; + +import 'package:ribn/models/app_state.dart'; +import 'package:ribn/platform/platform.dart'; + +/// Intended to wrap the [TransactionHistoryPage] and provide it with the the [TransactionHistoryViewmodel]. +class TransactionHistoryContainer extends StatelessWidget { + const TransactionHistoryContainer({Key? key, required this.builder}) + : super(key: key); + final ViewModelBuilder builder; + + @override + Widget build(BuildContext context) { + return StoreConnector( + distinct: true, + converter: TransactionHistoryViewmodel.fromStore, + builder: builder, + ); + } +} + +class TransactionHistoryViewmodel { + /// Helpful representation of the address as a [ToplAddress]. + final ToplAddress toplAddress; + + /// The networkId for returning correct transaction data per each Topl network + final int networkId; + + /// All the assets owned by this wallet. + final List assets; + + /// Get the current block height + final Future? blockHeight; + + /// Gets transactions associated with my wallet address from the Mempool and Genus + final Future> Function({int pageNum}) + getTransactions; + + TransactionHistoryViewmodel({ + required this.toplAddress, + required this.networkId, + required this.assets, + this.blockHeight, + required this.getTransactions, + }); + + static TransactionHistoryViewmodel fromStore(Store store) { + final currNetwork = store.state.keychainState.currentNetwork; + return TransactionHistoryViewmodel( + toplAddress: currNetwork.myWalletAddress!.toplAddress, + networkId: store.state.keychainState.currentNetwork.networkId, + assets: store.state.keychainState.currentNetwork.getAllAssetsInWallet(), + blockHeight: + store.state.keychainState.currentNetwork.client!.getBlockNumber(), + getTransactions: ({int pageNum = 0}) async { + final myWalletAddress = + currNetwork.myWalletAddress!.toplAddress.toBase58(); + final mempoolTxs = await getMempoolTxs( + client: currNetwork.client!, + walletAddress: myWalletAddress, + ); + final genusTxs = await getGenusTxs(walletAddress: myWalletAddress); + return [...mempoolTxs, ...genusTxs]; + }, + ); + } + + static Future> getMempoolTxs({ + required BramblClient client, + required String walletAddress, + }) async { + final mempoolTxs = await client.getMempool(); + final pendingTxsForWallet = mempoolTxs.where((tx) { + final walletAddrInSenders = tx.from?.any( + (sender) => sender.senderAddress.toBase58() == walletAddress, + ) ?? + false; + // simple recipient or asset recipient + final walletAddrInRecipients = + tx.to.any((recipient) => recipient.toJson()[0] == walletAddress); + return walletAddrInSenders || walletAddrInRecipients; + }).toList(); + final List formattedTxs = []; + pendingTxsForWallet.toList().forEach((rawTx) { + rawTx.to.toList().forEach((recipient) { + final tx = TransactionReceipt( + id: rawTx.id, + from: rawTx.from, + to: [recipient], + fee: rawTx.fee, + newBoxes: rawTx.newBoxes, + boxesToRemove: rawTx.boxesToRemove, + timestamp: rawTx.timestamp, + propositionType: rawTx.propositionType, + txType: rawTx.txType, + minting: rawTx.minting, + ); + formattedTxs.add(tx); + }); + }); + return formattedTxs; + } + + static Future> getGenusTxs({ + required String walletAddress, + int pageNumber = 0, + }) async { + final txQueryClient = TransactionsQueryClient(PlatformGenusConfig.channel); + final txQueryResult = await txQueryClient.query( + QueryTxsReq( + filter: TransactionFilter( + outputAddressSelection: StringSelection( + values: [ + walletAddress, + // 'AUAWPHb6iRfWs6a2QEkXYBLQefAYAczbcEcmeGJKgpmqYnooWis1', + ], + ), + ), + pagingOptions: Paging(pageNumber: pageNumber, pageSize: 10), + confirmationDepth: 1, + ), + ); + final Map txResultJson = + txQueryResult.toProto3Json() as Map; + final List txs = []; + for (var element in (txResultJson['success']['transactions'] as List)) { + if (element['inputs'] == null) continue; + try { + final outputs = formatRecipients(element['outputs'] as List); + final newBoxes = formatNewBoxes(element['newBoxes']); + final inputs = (element['inputs'] as List) + .map((input) => [input['address'], input['nonce']]) + .toList(); + if (inputs.isEmpty) continue; + // get tx per recipient + outputs.toList().forEach((output) { + final tx = TransactionReceipt.fromJson({ + 'txId': element['txId'], + 'from': inputs, + 'to': [output], + 'txType': element['txType'], + 'fee': element['fee'], + 'timestamp': int.parse(element['timestamp']), + 'boxesToRemove': element['boxesToRemove'] as List, + 'newBoxes': newBoxes, + 'propositionType': element['propositionType'], + 'blockNumber': int.parse(element['blockHeight']), + 'blockId': element['blockId'], + 'minting': element['minting'], + }); + txs.add(tx); + }); + } catch (e) { + debugPrint(e.toString()); + debugPrint(element); + break; + } + } + return txs; + } + + static List formatRecipients(List outputs) { + final formattedOutputs = []; + outputs.toList().forEach((e) { + final String address = e['address']; + final String type = (e['value'] as Map).keys.first; + final quantity = (e['value'] as Map)[type]['quantity']; + final assetCode = (e['value'] as Map)[type]['code']; + final securityRoot = + (e['value'] as Map)[type]['securityRoot']; + final metadata = (e['value'] as Map)[type]['metadata']; + formattedOutputs.add([ + address, + { + 'type': type == 'asset' ? 'Asset' : 'Simple', + 'quantity': quantity, + 'assetCode': assetCode, + 'securityRoot': securityRoot, + 'metadata': metadata + } + ]); + }); + return formattedOutputs; + } + + static formatNewBoxes(List newBoxes) { + final formattedNewBoxes = []; + newBoxes.toList().forEach((box) { + final Map boxValue = box['value']; + final String type = boxValue.keys.first; + final quantity = boxValue[type]['quantity']; + final assetCode = boxValue[type]['code']; + final securityRoot = boxValue[type]['securityRoot']; + final metadata = boxValue[type]['metadata']; + final Map value = { + 'type': type, + 'quantity': quantity, + 'assetCode': assetCode, + 'securityRoot': securityRoot, + 'metadata': metadata + }; + formattedNewBoxes.add({ + 'id': box['id'], + 'type': box['boxType'], + 'evidence': box['evidence'], + 'nonce': box['nonce'], + 'value': value, + }); + }); + return formattedNewBoxes; + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is TransactionHistoryViewmodel && + other.toplAddress == toplAddress && + other.networkId == networkId && + listEquals(other.assets, assets) && + other.blockHeight == blockHeight && + other.getTransactions == getTransactions; + } + + @override + int get hashCode { + return toplAddress.hashCode ^ + networkId.hashCode ^ + assets.hashCode ^ + blockHeight.hashCode ^ + getTransactions.hashCode; + } +} diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/genus/generated/blocks_query.pb.dart b/lib/genus/generated/blocks_query.pb.dart new file mode 100644 index 00000000..f953dbb4 --- /dev/null +++ b/lib/genus/generated/blocks_query.pb.dart @@ -0,0 +1,1149 @@ +/// +// Generated code. Do not modify. +// source: blocks_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +import 'filters.pb.dart' as $4; +import 'services_types.pb.dart' as $5; +import 'types.pb.dart' as $6; + +class BlockSorting_Height extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockSorting.Height', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + BlockSorting_Height._() : super(); + factory BlockSorting_Height({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory BlockSorting_Height.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockSorting_Height.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_Height clone() => BlockSorting_Height()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_Height copyWith(void Function(BlockSorting_Height) updates) => + super.copyWith((message) => updates(message as BlockSorting_Height)) + as BlockSorting_Height; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockSorting_Height create() => BlockSorting_Height._(); + BlockSorting_Height createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockSorting_Height getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockSorting_Height? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +class BlockSorting_Timestamp extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockSorting.Timestamp', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + BlockSorting_Timestamp._() : super(); + factory BlockSorting_Timestamp({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory BlockSorting_Timestamp.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockSorting_Timestamp.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_Timestamp clone() => BlockSorting_Timestamp()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_Timestamp copyWith(void Function(BlockSorting_Timestamp) updates) => + super.copyWith((message) => updates(message as BlockSorting_Timestamp)) + as BlockSorting_Timestamp; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockSorting_Timestamp create() => BlockSorting_Timestamp._(); + BlockSorting_Timestamp createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockSorting_Timestamp getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockSorting_Timestamp? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +class BlockSorting_Difficulty extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockSorting.Difficulty', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + BlockSorting_Difficulty._() : super(); + factory BlockSorting_Difficulty({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory BlockSorting_Difficulty.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockSorting_Difficulty.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_Difficulty clone() => BlockSorting_Difficulty()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_Difficulty copyWith(void Function(BlockSorting_Difficulty) updates) => + super.copyWith((message) => updates(message as BlockSorting_Difficulty)) + as BlockSorting_Difficulty; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockSorting_Difficulty create() => BlockSorting_Difficulty._(); + BlockSorting_Difficulty createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockSorting_Difficulty getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockSorting_Difficulty? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +class BlockSorting_NumberOfTransactions extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockSorting.NumberOfTransactions', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + BlockSorting_NumberOfTransactions._() : super(); + factory BlockSorting_NumberOfTransactions({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory BlockSorting_NumberOfTransactions.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockSorting_NumberOfTransactions.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_NumberOfTransactions clone() => BlockSorting_NumberOfTransactions()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockSorting_NumberOfTransactions copyWith(void Function(BlockSorting_NumberOfTransactions) updates) => + super.copyWith((message) => updates(message as BlockSorting_NumberOfTransactions)) + as BlockSorting_NumberOfTransactions; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockSorting_NumberOfTransactions create() => BlockSorting_NumberOfTransactions._(); + BlockSorting_NumberOfTransactions createEmptyInstance() => create(); + static $pb.PbList createRepeated() => + $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockSorting_NumberOfTransactions getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockSorting_NumberOfTransactions? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +enum BlockSorting_SortBy { height, timestamp, difficulty, numberOfTransactions, notSet } + +class BlockSorting extends $pb.GeneratedMessage { + static const $core.Map<$core.int, BlockSorting_SortBy> _BlockSorting_SortByByTag = { + 1: BlockSorting_SortBy.height, + 2: BlockSorting_SortBy.timestamp, + 3: BlockSorting_SortBy.difficulty, + 4: BlockSorting_SortBy.numberOfTransactions, + 0: BlockSorting_SortBy.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockSorting', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3, 4]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'height', + subBuilder: BlockSorting_Height.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timestamp', + subBuilder: BlockSorting_Timestamp.create, + ) + ..aOM( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'difficulty', + subBuilder: BlockSorting_Difficulty.create, + ) + ..aOM( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'numberOfTransactions', + subBuilder: BlockSorting_NumberOfTransactions.create, + ) + ..hasRequiredFields = false; + + BlockSorting._() : super(); + factory BlockSorting({ + BlockSorting_Height? height, + BlockSorting_Timestamp? timestamp, + BlockSorting_Difficulty? difficulty, + BlockSorting_NumberOfTransactions? numberOfTransactions, + }) { + final _result = create(); + if (height != null) { + _result.height = height; + } + if (timestamp != null) { + _result.timestamp = timestamp; + } + if (difficulty != null) { + _result.difficulty = difficulty; + } + if (numberOfTransactions != null) { + _result.numberOfTransactions = numberOfTransactions; + } + return _result; + } + factory BlockSorting.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory BlockSorting.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockSorting clone() => BlockSorting()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockSorting copyWith(void Function(BlockSorting) updates) => + super.copyWith((message) => updates(message as BlockSorting)) as BlockSorting; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockSorting create() => BlockSorting._(); + BlockSorting createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockSorting getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockSorting? _defaultInstance; + + BlockSorting_SortBy whichSortBy() => _BlockSorting_SortByByTag[$_whichOneof(0)]!; + void clearSortBy() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + BlockSorting_Height get height => $_getN(0); + @$pb.TagNumber(1) + set height(BlockSorting_Height v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasHeight() => $_has(0); + @$pb.TagNumber(1) + void clearHeight() => clearField(1); + @$pb.TagNumber(1) + BlockSorting_Height ensureHeight() => $_ensure(0); + + @$pb.TagNumber(2) + BlockSorting_Timestamp get timestamp => $_getN(1); + @$pb.TagNumber(2) + set timestamp(BlockSorting_Timestamp v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasTimestamp() => $_has(1); + @$pb.TagNumber(2) + void clearTimestamp() => clearField(2); + @$pb.TagNumber(2) + BlockSorting_Timestamp ensureTimestamp() => $_ensure(1); + + @$pb.TagNumber(3) + BlockSorting_Difficulty get difficulty => $_getN(2); + @$pb.TagNumber(3) + set difficulty(BlockSorting_Difficulty v) { + setField(3, v); + } + + @$pb.TagNumber(3) + $core.bool hasDifficulty() => $_has(2); + @$pb.TagNumber(3) + void clearDifficulty() => clearField(3); + @$pb.TagNumber(3) + BlockSorting_Difficulty ensureDifficulty() => $_ensure(2); + + @$pb.TagNumber(4) + BlockSorting_NumberOfTransactions get numberOfTransactions => $_getN(3); + @$pb.TagNumber(4) + set numberOfTransactions(BlockSorting_NumberOfTransactions v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasNumberOfTransactions() => $_has(3); + @$pb.TagNumber(4) + void clearNumberOfTransactions() => clearField(4); + @$pb.TagNumber(4) + BlockSorting_NumberOfTransactions ensureNumberOfTransactions() => $_ensure(3); +} + +class QueryBlocksReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryBlocksReq', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOM<$4.BlockFilter>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: $4.BlockFilter.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sorting', + subBuilder: BlockSorting.create, + ) + ..a<$core.int>( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'confirmationDepth', + $pb.PbFieldType.OU3, + ) + ..aOM<$5.Paging>( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'pagingOptions', + subBuilder: $5.Paging.create, + ) + ..hasRequiredFields = false; + + QueryBlocksReq._() : super(); + factory QueryBlocksReq({ + $4.BlockFilter? filter, + BlockSorting? sorting, + $core.int? confirmationDepth, + $5.Paging? pagingOptions, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + if (sorting != null) { + _result.sorting = sorting; + } + if (confirmationDepth != null) { + _result.confirmationDepth = confirmationDepth; + } + if (pagingOptions != null) { + _result.pagingOptions = pagingOptions; + } + return _result; + } + factory QueryBlocksReq.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory QueryBlocksReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksReq clone() => QueryBlocksReq()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksReq copyWith(void Function(QueryBlocksReq) updates) => + super.copyWith((message) => updates(message as QueryBlocksReq)) + as QueryBlocksReq; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryBlocksReq create() => QueryBlocksReq._(); + QueryBlocksReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryBlocksReq getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryBlocksReq? _defaultInstance; + + @$pb.TagNumber(1) + $4.BlockFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter($4.BlockFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + $4.BlockFilter ensureFilter() => $_ensure(0); + + @$pb.TagNumber(2) + BlockSorting get sorting => $_getN(1); + @$pb.TagNumber(2) + set sorting(BlockSorting v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasSorting() => $_has(1); + @$pb.TagNumber(2) + void clearSorting() => clearField(2); + @$pb.TagNumber(2) + BlockSorting ensureSorting() => $_ensure(1); + + @$pb.TagNumber(3) + $core.int get confirmationDepth => $_getIZ(2); + @$pb.TagNumber(3) + set confirmationDepth($core.int v) { + $_setUnsignedInt32(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasConfirmationDepth() => $_has(2); + @$pb.TagNumber(3) + void clearConfirmationDepth() => clearField(3); + + @$pb.TagNumber(4) + $5.Paging get pagingOptions => $_getN(3); + @$pb.TagNumber(4) + set pagingOptions($5.Paging v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasPagingOptions() => $_has(3); + @$pb.TagNumber(4) + void clearPagingOptions() => clearField(4); + @$pb.TagNumber(4) + $5.Paging ensurePagingOptions() => $_ensure(3); +} + +class QueryBlocksRes_Success extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryBlocksRes.Success', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..pc<$6.Block>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'blocks', + $pb.PbFieldType.PM, + subBuilder: $6.Block.create, + ) + ..hasRequiredFields = false; + + QueryBlocksRes_Success._() : super(); + factory QueryBlocksRes_Success({ + $core.Iterable<$6.Block>? blocks, + }) { + final _result = create(); + if (blocks != null) { + _result.blocks.addAll(blocks); + } + return _result; + } + factory QueryBlocksRes_Success.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory QueryBlocksRes_Success.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksRes_Success clone() => QueryBlocksRes_Success()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksRes_Success copyWith(void Function(QueryBlocksRes_Success) updates) => + super.copyWith((message) => updates(message as QueryBlocksRes_Success)) + as QueryBlocksRes_Success; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryBlocksRes_Success create() => QueryBlocksRes_Success._(); + QueryBlocksRes_Success createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryBlocksRes_Success getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryBlocksRes_Success? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$6.Block> get blocks => $_getList(0); +} + +enum QueryBlocksRes_Failure_Reason { dataStoreConnectionError, queryTimeout, invalidQuery, notSet } + +class QueryBlocksRes_Failure extends $pb.GeneratedMessage { + static const $core.Map<$core.int, QueryBlocksRes_Failure_Reason> _QueryBlocksRes_Failure_ReasonByTag = { + 1: QueryBlocksRes_Failure_Reason.dataStoreConnectionError, + 2: QueryBlocksRes_Failure_Reason.queryTimeout, + 3: QueryBlocksRes_Failure_Reason.invalidQuery, + 0: QueryBlocksRes_Failure_Reason.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryBlocksRes.Failure', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3]) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'dataStoreConnectionError') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'queryTimeout') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidQuery') + ..hasRequiredFields = false; + + QueryBlocksRes_Failure._() : super(); + factory QueryBlocksRes_Failure({ + $core.String? dataStoreConnectionError, + $core.String? queryTimeout, + $core.String? invalidQuery, + }) { + final _result = create(); + if (dataStoreConnectionError != null) { + _result.dataStoreConnectionError = dataStoreConnectionError; + } + if (queryTimeout != null) { + _result.queryTimeout = queryTimeout; + } + if (invalidQuery != null) { + _result.invalidQuery = invalidQuery; + } + return _result; + } + factory QueryBlocksRes_Failure.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory QueryBlocksRes_Failure.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksRes_Failure clone() => QueryBlocksRes_Failure()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksRes_Failure copyWith(void Function(QueryBlocksRes_Failure) updates) => + super.copyWith((message) => updates(message as QueryBlocksRes_Failure)) + as QueryBlocksRes_Failure; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryBlocksRes_Failure create() => QueryBlocksRes_Failure._(); + QueryBlocksRes_Failure createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryBlocksRes_Failure getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryBlocksRes_Failure? _defaultInstance; + + QueryBlocksRes_Failure_Reason whichReason() => _QueryBlocksRes_Failure_ReasonByTag[$_whichOneof(0)]!; + void clearReason() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $core.String get dataStoreConnectionError => $_getSZ(0); + @$pb.TagNumber(1) + set dataStoreConnectionError($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDataStoreConnectionError() => $_has(0); + @$pb.TagNumber(1) + void clearDataStoreConnectionError() => clearField(1); + + @$pb.TagNumber(2) + $core.String get queryTimeout => $_getSZ(1); + @$pb.TagNumber(2) + set queryTimeout($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasQueryTimeout() => $_has(1); + @$pb.TagNumber(2) + void clearQueryTimeout() => clearField(2); + + @$pb.TagNumber(3) + $core.String get invalidQuery => $_getSZ(2); + @$pb.TagNumber(3) + set invalidQuery($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasInvalidQuery() => $_has(2); + @$pb.TagNumber(3) + void clearInvalidQuery() => clearField(3); +} + +enum QueryBlocksRes_Result { success, failure, notSet } + +class QueryBlocksRes extends $pb.GeneratedMessage { + static const $core.Map<$core.int, QueryBlocksRes_Result> _QueryBlocksRes_ResultByTag = { + 1: QueryBlocksRes_Result.success, + 2: QueryBlocksRes_Result.failure, + 0: QueryBlocksRes_Result.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryBlocksRes', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'success', + subBuilder: QueryBlocksRes_Success.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', + subBuilder: QueryBlocksRes_Failure.create, + ) + ..hasRequiredFields = false; + + QueryBlocksRes._() : super(); + factory QueryBlocksRes({ + QueryBlocksRes_Success? success, + QueryBlocksRes_Failure? failure, + }) { + final _result = create(); + if (success != null) { + _result.success = success; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory QueryBlocksRes.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory QueryBlocksRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksRes clone() => QueryBlocksRes()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryBlocksRes copyWith(void Function(QueryBlocksRes) updates) => + super.copyWith((message) => updates(message as QueryBlocksRes)) + as QueryBlocksRes; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryBlocksRes create() => QueryBlocksRes._(); + QueryBlocksRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryBlocksRes getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryBlocksRes? _defaultInstance; + + QueryBlocksRes_Result whichResult() => _QueryBlocksRes_ResultByTag[$_whichOneof(0)]!; + void clearResult() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + QueryBlocksRes_Success get success => $_getN(0); + @$pb.TagNumber(1) + set success(QueryBlocksRes_Success v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => clearField(1); + @$pb.TagNumber(1) + QueryBlocksRes_Success ensureSuccess() => $_ensure(0); + + @$pb.TagNumber(2) + QueryBlocksRes_Failure get failure => $_getN(1); + @$pb.TagNumber(2) + set failure(QueryBlocksRes_Failure v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFailure() => $_has(1); + @$pb.TagNumber(2) + void clearFailure() => clearField(2); + @$pb.TagNumber(2) + QueryBlocksRes_Failure ensureFailure() => $_ensure(1); +} + +class BlocksQueryStreamReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlocksQueryStreamReq', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOM<$4.BlockFilter>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: $4.BlockFilter.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sorting', + subBuilder: BlockSorting.create, + ) + ..a<$core.int>( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'confirmationDepth', + $pb.PbFieldType.OU3, + ) + ..hasRequiredFields = false; + + BlocksQueryStreamReq._() : super(); + factory BlocksQueryStreamReq({ + $4.BlockFilter? filter, + BlockSorting? sorting, + $core.int? confirmationDepth, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + if (sorting != null) { + _result.sorting = sorting; + } + if (confirmationDepth != null) { + _result.confirmationDepth = confirmationDepth; + } + return _result; + } + factory BlocksQueryStreamReq.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlocksQueryStreamReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlocksQueryStreamReq clone() => BlocksQueryStreamReq()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlocksQueryStreamReq copyWith(void Function(BlocksQueryStreamReq) updates) => + super.copyWith((message) => updates(message as BlocksQueryStreamReq)) + as BlocksQueryStreamReq; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlocksQueryStreamReq create() => BlocksQueryStreamReq._(); + BlocksQueryStreamReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlocksQueryStreamReq getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlocksQueryStreamReq? _defaultInstance; + + @$pb.TagNumber(1) + $4.BlockFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter($4.BlockFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + $4.BlockFilter ensureFilter() => $_ensure(0); + + @$pb.TagNumber(2) + BlockSorting get sorting => $_getN(1); + @$pb.TagNumber(2) + set sorting(BlockSorting v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasSorting() => $_has(1); + @$pb.TagNumber(2) + void clearSorting() => clearField(2); + @$pb.TagNumber(2) + BlockSorting ensureSorting() => $_ensure(1); + + @$pb.TagNumber(3) + $core.int get confirmationDepth => $_getIZ(2); + @$pb.TagNumber(3) + set confirmationDepth($core.int v) { + $_setUnsignedInt32(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasConfirmationDepth() => $_has(2); + @$pb.TagNumber(3) + void clearConfirmationDepth() => clearField(3); +} + +enum BlocksQueryStreamRes_Failure_Reason { dataStoreConnectionError, invalidQuery, notSet } + +class BlocksQueryStreamRes_Failure extends $pb.GeneratedMessage { + static const $core.Map<$core.int, BlocksQueryStreamRes_Failure_Reason> _BlocksQueryStreamRes_Failure_ReasonByTag = { + 1: BlocksQueryStreamRes_Failure_Reason.dataStoreConnectionError, + 2: BlocksQueryStreamRes_Failure_Reason.invalidQuery, + 0: BlocksQueryStreamRes_Failure_Reason.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlocksQueryStreamRes.Failure', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'dataStoreConnectionError') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidQuery') + ..hasRequiredFields = false; + + BlocksQueryStreamRes_Failure._() : super(); + factory BlocksQueryStreamRes_Failure({ + $core.String? dataStoreConnectionError, + $core.String? invalidQuery, + }) { + final _result = create(); + if (dataStoreConnectionError != null) { + _result.dataStoreConnectionError = dataStoreConnectionError; + } + if (invalidQuery != null) { + _result.invalidQuery = invalidQuery; + } + return _result; + } + factory BlocksQueryStreamRes_Failure.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlocksQueryStreamRes_Failure.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlocksQueryStreamRes_Failure clone() => BlocksQueryStreamRes_Failure()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlocksQueryStreamRes_Failure copyWith(void Function(BlocksQueryStreamRes_Failure) updates) => + super.copyWith((message) => updates(message as BlocksQueryStreamRes_Failure)) + as BlocksQueryStreamRes_Failure; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlocksQueryStreamRes_Failure create() => BlocksQueryStreamRes_Failure._(); + BlocksQueryStreamRes_Failure createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlocksQueryStreamRes_Failure getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlocksQueryStreamRes_Failure? _defaultInstance; + + BlocksQueryStreamRes_Failure_Reason whichReason() => _BlocksQueryStreamRes_Failure_ReasonByTag[$_whichOneof(0)]!; + void clearReason() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $core.String get dataStoreConnectionError => $_getSZ(0); + @$pb.TagNumber(1) + set dataStoreConnectionError($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDataStoreConnectionError() => $_has(0); + @$pb.TagNumber(1) + void clearDataStoreConnectionError() => clearField(1); + + @$pb.TagNumber(2) + $core.String get invalidQuery => $_getSZ(1); + @$pb.TagNumber(2) + set invalidQuery($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasInvalidQuery() => $_has(1); + @$pb.TagNumber(2) + void clearInvalidQuery() => clearField(2); +} + +enum BlocksQueryStreamRes_Result { block, failure, notSet } + +class BlocksQueryStreamRes extends $pb.GeneratedMessage { + static const $core.Map<$core.int, BlocksQueryStreamRes_Result> _BlocksQueryStreamRes_ResultByTag = { + 1: BlocksQueryStreamRes_Result.block, + 2: BlocksQueryStreamRes_Result.failure, + 0: BlocksQueryStreamRes_Result.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlocksQueryStreamRes', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM<$6.Block>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'block', + subBuilder: $6.Block.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', + subBuilder: BlocksQueryStreamRes_Failure.create, + ) + ..hasRequiredFields = false; + + BlocksQueryStreamRes._() : super(); + factory BlocksQueryStreamRes({ + $6.Block? block, + BlocksQueryStreamRes_Failure? failure, + }) { + final _result = create(); + if (block != null) { + _result.block = block; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory BlocksQueryStreamRes.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlocksQueryStreamRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlocksQueryStreamRes clone() => BlocksQueryStreamRes()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlocksQueryStreamRes copyWith(void Function(BlocksQueryStreamRes) updates) => + super.copyWith((message) => updates(message as BlocksQueryStreamRes)) + as BlocksQueryStreamRes; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlocksQueryStreamRes create() => BlocksQueryStreamRes._(); + BlocksQueryStreamRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlocksQueryStreamRes getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlocksQueryStreamRes? _defaultInstance; + + BlocksQueryStreamRes_Result whichResult() => _BlocksQueryStreamRes_ResultByTag[$_whichOneof(0)]!; + void clearResult() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $6.Block get block => $_getN(0); + @$pb.TagNumber(1) + set block($6.Block v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasBlock() => $_has(0); + @$pb.TagNumber(1) + void clearBlock() => clearField(1); + @$pb.TagNumber(1) + $6.Block ensureBlock() => $_ensure(0); + + @$pb.TagNumber(2) + BlocksQueryStreamRes_Failure get failure => $_getN(1); + @$pb.TagNumber(2) + set failure(BlocksQueryStreamRes_Failure v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFailure() => $_has(1); + @$pb.TagNumber(2) + void clearFailure() => clearField(2); + @$pb.TagNumber(2) + BlocksQueryStreamRes_Failure ensureFailure() => $_ensure(1); +} diff --git a/lib/genus/generated/blocks_query.pbenum.dart b/lib/genus/generated/blocks_query.pbenum.dart new file mode 100644 index 00000000..02741272 --- /dev/null +++ b/lib/genus/generated/blocks_query.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: blocks_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/blocks_query.pbgrpc.dart b/lib/genus/generated/blocks_query.pbgrpc.dart new file mode 100644 index 00000000..b2cf221f --- /dev/null +++ b/lib/genus/generated/blocks_query.pbgrpc.dart @@ -0,0 +1,101 @@ +/// +// Generated code. Do not modify. +// source: blocks_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:async' as $async; + +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'blocks_query.pb.dart' as $1; +export 'blocks_query.pb.dart'; + +class BlocksQueryClient extends $grpc.Client { + static final _$query = $grpc.ClientMethod<$1.QueryBlocksReq, $1.QueryBlocksRes>( + '/co.topl.genus.services.BlocksQuery/Query', + ($1.QueryBlocksReq value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $1.QueryBlocksRes.fromBuffer(value), + ); + static final _$queryStream = $grpc.ClientMethod<$1.BlocksQueryStreamReq, $1.BlocksQueryStreamRes>( + '/co.topl.genus.services.BlocksQuery/QueryStream', + ($1.BlocksQueryStreamReq value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $1.BlocksQueryStreamRes.fromBuffer(value), + ); + + BlocksQueryClient( + $grpc.ClientChannel channel, { + $grpc.CallOptions? options, + $core.Iterable<$grpc.ClientInterceptor>? interceptors, + }) : super(channel, options: options, interceptors: interceptors); + + $grpc.ResponseFuture<$1.QueryBlocksRes> query( + $1.QueryBlocksReq request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$query, request, options: options); + } + + $grpc.ResponseStream<$1.BlocksQueryStreamRes> queryStream( + $1.BlocksQueryStreamReq request, { + $grpc.CallOptions? options, + }) { + return $createStreamingCall( + _$queryStream, + $async.Stream.fromIterable([request]), + options: options, + ); + } +} + +abstract class BlocksQueryServiceBase extends $grpc.Service { + $core.String get $name => 'co.topl.genus.services.BlocksQuery'; + + BlocksQueryServiceBase() { + $addMethod( + $grpc.ServiceMethod<$1.QueryBlocksReq, $1.QueryBlocksRes>( + 'Query', + query_Pre, + false, + false, + ($core.List<$core.int> value) => $1.QueryBlocksReq.fromBuffer(value), + ($1.QueryBlocksRes value) => value.writeToBuffer(), + ), + ); + $addMethod( + $grpc.ServiceMethod<$1.BlocksQueryStreamReq, $1.BlocksQueryStreamRes>( + 'QueryStream', + queryStream_Pre, + false, + true, + ($core.List<$core.int> value) => $1.BlocksQueryStreamReq.fromBuffer(value), + ($1.BlocksQueryStreamRes value) => value.writeToBuffer(), + ), + ); + } + + $async.Future<$1.QueryBlocksRes> query_Pre( + $grpc.ServiceCall call, + $async.Future<$1.QueryBlocksReq> request, + ) async { + return query(call, await request); + } + + $async.Stream<$1.BlocksQueryStreamRes> queryStream_Pre( + $grpc.ServiceCall call, + $async.Future<$1.BlocksQueryStreamReq> request, + ) async* { + yield* queryStream(call, await request); + } + + $async.Future<$1.QueryBlocksRes> query( + $grpc.ServiceCall call, + $1.QueryBlocksReq request, + ); + $async.Stream<$1.BlocksQueryStreamRes> queryStream( + $grpc.ServiceCall call, + $1.BlocksQueryStreamReq request, + ); +} diff --git a/lib/genus/generated/blocks_query.pbjson.dart b/lib/genus/generated/blocks_query.pbjson.dart new file mode 100644 index 00000000..672868d0 --- /dev/null +++ b/lib/genus/generated/blocks_query.pbjson.dart @@ -0,0 +1,147 @@ +/// +// Generated code. Do not modify. +// source: blocks_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use blockSortingDescriptor instead') +const BlockSorting$json = const { + '1': 'BlockSorting', + '2': const [ + const {'1': 'height', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlockSorting.Height', '9': 0, '10': 'height'}, + const {'1': 'timestamp', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlockSorting.Timestamp', '9': 0, '10': 'timestamp'}, + const {'1': 'difficulty', '3': 3, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlockSorting.Difficulty', '9': 0, '10': 'difficulty'}, + const {'1': 'number_of_transactions', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlockSorting.NumberOfTransactions', '9': 0, '10': 'numberOfTransactions'}, + ], + '3': const [BlockSorting_Height$json, BlockSorting_Timestamp$json, BlockSorting_Difficulty$json, BlockSorting_NumberOfTransactions$json], + '8': const [ + const {'1': 'sort_by'}, + ], +}; + +@$core.Deprecated('Use blockSortingDescriptor instead') +const BlockSorting_Height$json = const { + '1': 'Height', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +@$core.Deprecated('Use blockSortingDescriptor instead') +const BlockSorting_Timestamp$json = const { + '1': 'Timestamp', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +@$core.Deprecated('Use blockSortingDescriptor instead') +const BlockSorting_Difficulty$json = const { + '1': 'Difficulty', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +@$core.Deprecated('Use blockSortingDescriptor instead') +const BlockSorting_NumberOfTransactions$json = const { + '1': 'NumberOfTransactions', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +/// Descriptor for `BlockSorting`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blockSortingDescriptor = $convert.base64Decode('CgxCbG9ja1NvcnRpbmcSRQoGaGVpZ2h0GAEgASgLMisuY28udG9wbC5nZW51cy5zZXJ2aWNlcy5CbG9ja1NvcnRpbmcuSGVpZ2h0SABSBmhlaWdodBJOCgl0aW1lc3RhbXAYAiABKAsyLi5jby50b3BsLmdlbnVzLnNlcnZpY2VzLkJsb2NrU29ydGluZy5UaW1lc3RhbXBIAFIJdGltZXN0YW1wElEKCmRpZmZpY3VsdHkYAyABKAsyLy5jby50b3BsLmdlbnVzLnNlcnZpY2VzLkJsb2NrU29ydGluZy5EaWZmaWN1bHR5SABSCmRpZmZpY3VsdHkScQoWbnVtYmVyX29mX3RyYW5zYWN0aW9ucxgEIAEoCzI5LmNvLnRvcGwuZ2VudXMuc2VydmljZXMuQmxvY2tTb3J0aW5nLk51bWJlck9mVHJhbnNhY3Rpb25zSABSFG51bWJlck9mVHJhbnNhY3Rpb25zGigKBkhlaWdodBIeCgpkZXNjZW5kaW5nGAEgASgIUgpkZXNjZW5kaW5nGisKCVRpbWVzdGFtcBIeCgpkZXNjZW5kaW5nGAEgASgIUgpkZXNjZW5kaW5nGiwKCkRpZmZpY3VsdHkSHgoKZGVzY2VuZGluZxgBIAEoCFIKZGVzY2VuZGluZxo2ChROdW1iZXJPZlRyYW5zYWN0aW9ucxIeCgpkZXNjZW5kaW5nGAEgASgIUgpkZXNjZW5kaW5nQgkKB3NvcnRfYnk='); +@$core.Deprecated('Use queryBlocksReqDescriptor instead') +const QueryBlocksReq$json = const { + '1': 'QueryBlocksReq', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter', '10': 'filter'}, + const {'1': 'sorting', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlockSorting', '10': 'sorting'}, + const {'1': 'confirmation_depth', '3': 3, '4': 1, '5': 13, '10': 'confirmationDepth'}, + const {'1': 'paging_options', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.services.Paging', '10': 'pagingOptions'}, + ], +}; + +/// Descriptor for `QueryBlocksReq`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List queryBlocksReqDescriptor = $convert.base64Decode('Cg5RdWVyeUJsb2Nrc1JlcRIyCgZmaWx0ZXIYASABKAsyGi5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyUgZmaWx0ZXISPgoHc29ydGluZxgCIAEoCzIkLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuQmxvY2tTb3J0aW5nUgdzb3J0aW5nEi0KEmNvbmZpcm1hdGlvbl9kZXB0aBgDIAEoDVIRY29uZmlybWF0aW9uRGVwdGgSRQoOcGFnaW5nX29wdGlvbnMYBCABKAsyHi5jby50b3BsLmdlbnVzLnNlcnZpY2VzLlBhZ2luZ1INcGFnaW5nT3B0aW9ucw=='); +@$core.Deprecated('Use queryBlocksResDescriptor instead') +const QueryBlocksRes$json = const { + '1': 'QueryBlocksRes', + '2': const [ + const {'1': 'success', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.services.QueryBlocksRes.Success', '9': 0, '10': 'success'}, + const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.QueryBlocksRes.Failure', '9': 0, '10': 'failure'}, + ], + '3': const [QueryBlocksRes_Success$json, QueryBlocksRes_Failure$json], + '8': const [ + const {'1': 'result'}, + ], +}; + +@$core.Deprecated('Use queryBlocksResDescriptor instead') +const QueryBlocksRes_Success$json = const { + '1': 'Success', + '2': const [ + const {'1': 'blocks', '3': 1, '4': 3, '5': 11, '6': '.co.topl.genus.Block', '10': 'blocks'}, + ], +}; + +@$core.Deprecated('Use queryBlocksResDescriptor instead') +const QueryBlocksRes_Failure$json = const { + '1': 'Failure', + '2': const [ + const {'1': 'data_store_connection_error', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'dataStoreConnectionError'}, + const {'1': 'query_timeout', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'queryTimeout'}, + const {'1': 'invalid_query', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'invalidQuery'}, + ], + '8': const [ + const {'1': 'reason'}, + ], +}; + +/// Descriptor for `QueryBlocksRes`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List queryBlocksResDescriptor = $convert.base64Decode('Cg5RdWVyeUJsb2Nrc1JlcxJKCgdzdWNjZXNzGAEgASgLMi4uY28udG9wbC5nZW51cy5zZXJ2aWNlcy5RdWVyeUJsb2Nrc1Jlcy5TdWNjZXNzSABSB3N1Y2Nlc3MSSgoHZmFpbHVyZRgCIAEoCzIuLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuUXVlcnlCbG9ja3NSZXMuRmFpbHVyZUgAUgdmYWlsdXJlGjcKB1N1Y2Nlc3MSLAoGYmxvY2tzGAEgAygLMhQuY28udG9wbC5nZW51cy5CbG9ja1IGYmxvY2tzGqIBCgdGYWlsdXJlEj8KG2RhdGFfc3RvcmVfY29ubmVjdGlvbl9lcnJvchgBIAEoCUgAUhhkYXRhU3RvcmVDb25uZWN0aW9uRXJyb3ISJQoNcXVlcnlfdGltZW91dBgCIAEoCUgAUgxxdWVyeVRpbWVvdXQSJQoNaW52YWxpZF9xdWVyeRgDIAEoCUgAUgxpbnZhbGlkUXVlcnlCCAoGcmVhc29uQggKBnJlc3VsdA=='); +@$core.Deprecated('Use blocksQueryStreamReqDescriptor instead') +const BlocksQueryStreamReq$json = const { + '1': 'BlocksQueryStreamReq', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter', '10': 'filter'}, + const {'1': 'sorting', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlockSorting', '10': 'sorting'}, + const {'1': 'confirmation_depth', '3': 3, '4': 1, '5': 13, '10': 'confirmationDepth'}, + ], +}; + +/// Descriptor for `BlocksQueryStreamReq`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blocksQueryStreamReqDescriptor = $convert.base64Decode('ChRCbG9ja3NRdWVyeVN0cmVhbVJlcRIyCgZmaWx0ZXIYASABKAsyGi5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyUgZmaWx0ZXISPgoHc29ydGluZxgCIAEoCzIkLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuQmxvY2tTb3J0aW5nUgdzb3J0aW5nEi0KEmNvbmZpcm1hdGlvbl9kZXB0aBgDIAEoDVIRY29uZmlybWF0aW9uRGVwdGg='); +@$core.Deprecated('Use blocksQueryStreamResDescriptor instead') +const BlocksQueryStreamRes$json = const { + '1': 'BlocksQueryStreamRes', + '2': const [ + const {'1': 'block', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.Block', '9': 0, '10': 'block'}, + const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlocksQueryStreamRes.Failure', '9': 0, '10': 'failure'}, + ], + '3': const [BlocksQueryStreamRes_Failure$json], + '8': const [ + const {'1': 'result'}, + ], +}; + +@$core.Deprecated('Use blocksQueryStreamResDescriptor instead') +const BlocksQueryStreamRes_Failure$json = const { + '1': 'Failure', + '2': const [ + const {'1': 'data_store_connection_error', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'dataStoreConnectionError'}, + const {'1': 'invalid_query', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'invalidQuery'}, + ], + '8': const [ + const {'1': 'reason'}, + ], +}; + +/// Descriptor for `BlocksQueryStreamRes`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blocksQueryStreamResDescriptor = $convert.base64Decode('ChRCbG9ja3NRdWVyeVN0cmVhbVJlcxIsCgVibG9jaxgBIAEoCzIULmNvLnRvcGwuZ2VudXMuQmxvY2tIAFIFYmxvY2sSUAoHZmFpbHVyZRgCIAEoCzI0LmNvLnRvcGwuZ2VudXMuc2VydmljZXMuQmxvY2tzUXVlcnlTdHJlYW1SZXMuRmFpbHVyZUgAUgdmYWlsdXJlGnsKB0ZhaWx1cmUSPwobZGF0YV9zdG9yZV9jb25uZWN0aW9uX2Vycm9yGAEgASgJSABSGGRhdGFTdG9yZUNvbm5lY3Rpb25FcnJvchIlCg1pbnZhbGlkX3F1ZXJ5GAIgASgJSABSDGludmFsaWRRdWVyeUIICgZyZWFzb25CCAoGcmVzdWx0'); diff --git a/lib/genus/generated/blocks_subscription.pb.dart b/lib/genus/generated/blocks_subscription.pb.dart new file mode 100644 index 00000000..4570eddc --- /dev/null +++ b/lib/genus/generated/blocks_subscription.pb.dart @@ -0,0 +1,332 @@ +/// +// Generated code. Do not modify. +// source: blocks_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'filters.pb.dart' as $4; +import 'types.pb.dart' as $6; + +class CreateBlocksSubscriptionReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateBlocksSubscriptionReq', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOM<$4.BlockFilter>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: $4.BlockFilter.create, + ) + ..a<$core.int>( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'confirmationDepth', + $pb.PbFieldType.OU3, + ) + ..a<$fixnum.Int64>( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'startHeight', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..hasRequiredFields = false; + + CreateBlocksSubscriptionReq._() : super(); + factory CreateBlocksSubscriptionReq({ + $4.BlockFilter? filter, + $core.int? confirmationDepth, + $fixnum.Int64? startHeight, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + if (confirmationDepth != null) { + _result.confirmationDepth = confirmationDepth; + } + if (startHeight != null) { + _result.startHeight = startHeight; + } + return _result; + } + factory CreateBlocksSubscriptionReq.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory CreateBlocksSubscriptionReq.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + CreateBlocksSubscriptionReq clone() => CreateBlocksSubscriptionReq()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + CreateBlocksSubscriptionReq copyWith(void Function(CreateBlocksSubscriptionReq) updates) => + super.copyWith((message) => updates(message as CreateBlocksSubscriptionReq)) + as CreateBlocksSubscriptionReq; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static CreateBlocksSubscriptionReq create() => CreateBlocksSubscriptionReq._(); + CreateBlocksSubscriptionReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static CreateBlocksSubscriptionReq getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static CreateBlocksSubscriptionReq? _defaultInstance; + + @$pb.TagNumber(1) + $4.BlockFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter($4.BlockFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + $4.BlockFilter ensureFilter() => $_ensure(0); + + @$pb.TagNumber(2) + $core.int get confirmationDepth => $_getIZ(1); + @$pb.TagNumber(2) + set confirmationDepth($core.int v) { + $_setUnsignedInt32(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasConfirmationDepth() => $_has(1); + @$pb.TagNumber(2) + void clearConfirmationDepth() => clearField(2); + + @$pb.TagNumber(3) + $fixnum.Int64 get startHeight => $_getI64(2); + @$pb.TagNumber(3) + set startHeight($fixnum.Int64 v) { + $_setInt64(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasStartHeight() => $_has(2); + @$pb.TagNumber(3) + void clearStartHeight() => clearField(3); +} + +enum BlocksSubscriptionRes_Failure_Reason { invalidRequest, dataConnectionError, notSet } + +class BlocksSubscriptionRes_Failure extends $pb.GeneratedMessage { + static const $core.Map<$core.int, BlocksSubscriptionRes_Failure_Reason> _BlocksSubscriptionRes_Failure_ReasonByTag = { + 1: BlocksSubscriptionRes_Failure_Reason.invalidRequest, + 2: BlocksSubscriptionRes_Failure_Reason.dataConnectionError, + 0: BlocksSubscriptionRes_Failure_Reason.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlocksSubscriptionRes.Failure', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidRequest') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'dataConnectionError') + ..hasRequiredFields = false; + + BlocksSubscriptionRes_Failure._() : super(); + factory BlocksSubscriptionRes_Failure({ + $core.String? invalidRequest, + $core.String? dataConnectionError, + }) { + final _result = create(); + if (invalidRequest != null) { + _result.invalidRequest = invalidRequest; + } + if (dataConnectionError != null) { + _result.dataConnectionError = dataConnectionError; + } + return _result; + } + factory BlocksSubscriptionRes_Failure.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlocksSubscriptionRes_Failure.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlocksSubscriptionRes_Failure clone() => BlocksSubscriptionRes_Failure()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlocksSubscriptionRes_Failure copyWith(void Function(BlocksSubscriptionRes_Failure) updates) => + super.copyWith((message) => updates(message as BlocksSubscriptionRes_Failure)) + as BlocksSubscriptionRes_Failure; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlocksSubscriptionRes_Failure create() => BlocksSubscriptionRes_Failure._(); + BlocksSubscriptionRes_Failure createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlocksSubscriptionRes_Failure getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlocksSubscriptionRes_Failure? _defaultInstance; + + BlocksSubscriptionRes_Failure_Reason whichReason() => _BlocksSubscriptionRes_Failure_ReasonByTag[$_whichOneof(0)]!; + void clearReason() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $core.String get invalidRequest => $_getSZ(0); + @$pb.TagNumber(1) + set invalidRequest($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasInvalidRequest() => $_has(0); + @$pb.TagNumber(1) + void clearInvalidRequest() => clearField(1); + + @$pb.TagNumber(2) + $core.String get dataConnectionError => $_getSZ(1); + @$pb.TagNumber(2) + set dataConnectionError($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasDataConnectionError() => $_has(1); + @$pb.TagNumber(2) + void clearDataConnectionError() => clearField(2); +} + +enum BlocksSubscriptionRes_Result { success, failure, notSet } + +class BlocksSubscriptionRes extends $pb.GeneratedMessage { + static const $core.Map<$core.int, BlocksSubscriptionRes_Result> _BlocksSubscriptionRes_ResultByTag = { + 1: BlocksSubscriptionRes_Result.success, + 2: BlocksSubscriptionRes_Result.failure, + 0: BlocksSubscriptionRes_Result.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlocksSubscriptionRes', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM<$6.Block>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'success', + subBuilder: $6.Block.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', + subBuilder: BlocksSubscriptionRes_Failure.create, + ) + ..hasRequiredFields = false; + + BlocksSubscriptionRes._() : super(); + factory BlocksSubscriptionRes({ + $6.Block? success, + BlocksSubscriptionRes_Failure? failure, + }) { + final _result = create(); + if (success != null) { + _result.success = success; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory BlocksSubscriptionRes.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlocksSubscriptionRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlocksSubscriptionRes clone() => BlocksSubscriptionRes()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlocksSubscriptionRes copyWith(void Function(BlocksSubscriptionRes) updates) => + super.copyWith((message) => updates(message as BlocksSubscriptionRes)) + as BlocksSubscriptionRes; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlocksSubscriptionRes create() => BlocksSubscriptionRes._(); + BlocksSubscriptionRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlocksSubscriptionRes getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlocksSubscriptionRes? _defaultInstance; + + BlocksSubscriptionRes_Result whichResult() => _BlocksSubscriptionRes_ResultByTag[$_whichOneof(0)]!; + void clearResult() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $6.Block get success => $_getN(0); + @$pb.TagNumber(1) + set success($6.Block v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => clearField(1); + @$pb.TagNumber(1) + $6.Block ensureSuccess() => $_ensure(0); + + @$pb.TagNumber(2) + BlocksSubscriptionRes_Failure get failure => $_getN(1); + @$pb.TagNumber(2) + set failure(BlocksSubscriptionRes_Failure v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFailure() => $_has(1); + @$pb.TagNumber(2) + void clearFailure() => clearField(2); + @$pb.TagNumber(2) + BlocksSubscriptionRes_Failure ensureFailure() => $_ensure(1); +} diff --git a/lib/genus/generated/blocks_subscription.pbenum.dart b/lib/genus/generated/blocks_subscription.pbenum.dart new file mode 100644 index 00000000..9a9d8098 --- /dev/null +++ b/lib/genus/generated/blocks_subscription.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: blocks_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/blocks_subscription.pbgrpc.dart b/lib/genus/generated/blocks_subscription.pbgrpc.dart new file mode 100644 index 00000000..08c06e81 --- /dev/null +++ b/lib/genus/generated/blocks_subscription.pbgrpc.dart @@ -0,0 +1,68 @@ +/// +// Generated code. Do not modify. +// source: blocks_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:async' as $async; + +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'blocks_subscription.pb.dart' as $3; +export 'blocks_subscription.pb.dart'; + +class BlocksSubscriptionClient extends $grpc.Client { + static final _$create = $grpc.ClientMethod<$3.CreateBlocksSubscriptionReq, $3.BlocksSubscriptionRes>( + '/co.topl.genus.services.BlocksSubscription/Create', + ($3.CreateBlocksSubscriptionReq value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $3.BlocksSubscriptionRes.fromBuffer(value), + ); + + BlocksSubscriptionClient( + $grpc.ClientChannel channel, { + $grpc.CallOptions? options, + $core.Iterable<$grpc.ClientInterceptor>? interceptors, + }) : super(channel, options: options, interceptors: interceptors); + + $grpc.ResponseStream<$3.BlocksSubscriptionRes> create( + $3.CreateBlocksSubscriptionReq request, { + $grpc.CallOptions? options, + }) { + return $createStreamingCall( + _$create, + $async.Stream.fromIterable([request]), + options: options, + ); + } +} + +abstract class BlocksSubscriptionServiceBase extends $grpc.Service { + $core.String get $name => 'co.topl.genus.services.BlocksSubscription'; + + BlocksSubscriptionServiceBase() { + $addMethod( + $grpc.ServiceMethod<$3.CreateBlocksSubscriptionReq, $3.BlocksSubscriptionRes>( + 'Create', + create_Pre, + false, + true, + ($core.List<$core.int> value) => $3.CreateBlocksSubscriptionReq.fromBuffer(value), + ($3.BlocksSubscriptionRes value) => value.writeToBuffer(), + ), + ); + } + + $async.Stream<$3.BlocksSubscriptionRes> create_Pre( + $grpc.ServiceCall call, + $async.Future<$3.CreateBlocksSubscriptionReq> request, + ) async* { + yield* create(call, await request); + } + + $async.Stream<$3.BlocksSubscriptionRes> create( + $grpc.ServiceCall call, + $3.CreateBlocksSubscriptionReq request, + ); +} diff --git a/lib/genus/generated/blocks_subscription.pbjson.dart b/lib/genus/generated/blocks_subscription.pbjson.dart new file mode 100644 index 00000000..37f49830 --- /dev/null +++ b/lib/genus/generated/blocks_subscription.pbjson.dart @@ -0,0 +1,49 @@ +/// +// Generated code. Do not modify. +// source: blocks_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use createBlocksSubscriptionReqDescriptor instead') +const CreateBlocksSubscriptionReq$json = const { + '1': 'CreateBlocksSubscriptionReq', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter', '10': 'filter'}, + const {'1': 'confirmation_depth', '3': 2, '4': 1, '5': 13, '10': 'confirmationDepth'}, + const {'1': 'start_height', '3': 3, '4': 1, '5': 4, '10': 'startHeight'}, + ], +}; + +/// Descriptor for `CreateBlocksSubscriptionReq`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List createBlocksSubscriptionReqDescriptor = $convert.base64Decode('ChtDcmVhdGVCbG9ja3NTdWJzY3JpcHRpb25SZXESMgoGZmlsdGVyGAEgASgLMhouY28udG9wbC5nZW51cy5CbG9ja0ZpbHRlclIGZmlsdGVyEi0KEmNvbmZpcm1hdGlvbl9kZXB0aBgCIAEoDVIRY29uZmlybWF0aW9uRGVwdGgSIQoMc3RhcnRfaGVpZ2h0GAMgASgEUgtzdGFydEhlaWdodA=='); +@$core.Deprecated('Use blocksSubscriptionResDescriptor instead') +const BlocksSubscriptionRes$json = const { + '1': 'BlocksSubscriptionRes', + '2': const [ + const {'1': 'success', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.Block', '9': 0, '10': 'success'}, + const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.BlocksSubscriptionRes.Failure', '9': 0, '10': 'failure'}, + ], + '3': const [BlocksSubscriptionRes_Failure$json], + '8': const [ + const {'1': 'result'}, + ], +}; + +@$core.Deprecated('Use blocksSubscriptionResDescriptor instead') +const BlocksSubscriptionRes_Failure$json = const { + '1': 'Failure', + '2': const [ + const {'1': 'invalid_request', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'invalidRequest'}, + const {'1': 'data_connection_error', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'dataConnectionError'}, + ], + '8': const [ + const {'1': 'reason'}, + ], +}; + +/// Descriptor for `BlocksSubscriptionRes`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blocksSubscriptionResDescriptor = $convert.base64Decode('ChVCbG9ja3NTdWJzY3JpcHRpb25SZXMSMAoHc3VjY2VzcxgBIAEoCzIULmNvLnRvcGwuZ2VudXMuQmxvY2tIAFIHc3VjY2VzcxJRCgdmYWlsdXJlGAIgASgLMjUuY28udG9wbC5nZW51cy5zZXJ2aWNlcy5CbG9ja3NTdWJzY3JpcHRpb25SZXMuRmFpbHVyZUgAUgdmYWlsdXJlGnQKB0ZhaWx1cmUSKQoPaW52YWxpZF9yZXF1ZXN0GAEgASgJSABSDmludmFsaWRSZXF1ZXN0EjQKFWRhdGFfY29ubmVjdGlvbl9lcnJvchgCIAEoCUgAUhNkYXRhQ29ubmVjdGlvbkVycm9yQggKBnJlYXNvbkIICgZyZXN1bHQ='); diff --git a/lib/genus/generated/filters.pb.dart b/lib/genus/generated/filters.pb.dart new file mode 100644 index 00000000..747418db --- /dev/null +++ b/lib/genus/generated/filters.pb.dart @@ -0,0 +1,1801 @@ +/// +// Generated code. Do not modify. +// source: filters.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +class StringSelection extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'StringSelection', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..pPS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'values') + ..hasRequiredFields = false; + + StringSelection._() : super(); + factory StringSelection({ + $core.Iterable<$core.String>? values, + }) { + final _result = create(); + if (values != null) { + _result.values.addAll(values); + } + return _result; + } + factory StringSelection.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory StringSelection.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + StringSelection clone() => StringSelection()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + StringSelection copyWith(void Function(StringSelection) updates) => + super.copyWith((message) => updates(message as StringSelection)) + as StringSelection; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static StringSelection create() => StringSelection._(); + StringSelection createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static StringSelection getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static StringSelection? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$core.String> get values => $_getList(0); +} + +enum NumberRange_FilterType { min, max, notSet } + +class NumberRange extends $pb.GeneratedMessage { + static const $core.Map<$core.int, NumberRange_FilterType> _NumberRange_FilterTypeByTag = { + 1: NumberRange_FilterType.min, + 2: NumberRange_FilterType.max, + 0: NumberRange_FilterType.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'NumberRange', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..a<$fixnum.Int64>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'min', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..a<$fixnum.Int64>( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'max', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..hasRequiredFields = false; + + NumberRange._() : super(); + factory NumberRange({ + $fixnum.Int64? min, + $fixnum.Int64? max, + }) { + final _result = create(); + if (min != null) { + _result.min = min; + } + if (max != null) { + _result.max = max; + } + return _result; + } + factory NumberRange.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory NumberRange.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + NumberRange clone() => NumberRange()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + NumberRange copyWith(void Function(NumberRange) updates) => + super.copyWith((message) => updates(message as NumberRange)) as NumberRange; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static NumberRange create() => NumberRange._(); + NumberRange createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static NumberRange getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static NumberRange? _defaultInstance; + + NumberRange_FilterType whichFilterType() => _NumberRange_FilterTypeByTag[$_whichOneof(0)]!; + void clearFilterType() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $fixnum.Int64 get min => $_getI64(0); + @$pb.TagNumber(1) + set min($fixnum.Int64 v) { + $_setInt64(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasMin() => $_has(0); + @$pb.TagNumber(1) + void clearMin() => clearField(1); + + @$pb.TagNumber(2) + $fixnum.Int64 get max => $_getI64(1); + @$pb.TagNumber(2) + set max($fixnum.Int64 v) { + $_setInt64(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasMax() => $_has(1); + @$pb.TagNumber(2) + void clearMax() => clearField(2); +} + +class NumberSelection extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'NumberSelection', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..p<$fixnum.Int64>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'values', + $pb.PbFieldType.KU6, + ) + ..hasRequiredFields = false; + + NumberSelection._() : super(); + factory NumberSelection({ + $core.Iterable<$fixnum.Int64>? values, + }) { + final _result = create(); + if (values != null) { + _result.values.addAll(values); + } + return _result; + } + factory NumberSelection.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory NumberSelection.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + NumberSelection clone() => NumberSelection()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + NumberSelection copyWith(void Function(NumberSelection) updates) => + super.copyWith((message) => updates(message as NumberSelection)) + as NumberSelection; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static NumberSelection create() => NumberSelection._(); + NumberSelection createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static NumberSelection getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static NumberSelection? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$fixnum.Int64> get values => $_getList(0); +} + +class BooleanSelection extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BooleanSelection', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value') + ..hasRequiredFields = false; + + BooleanSelection._() : super(); + factory BooleanSelection({ + $core.bool? value, + }) { + final _result = create(); + if (value != null) { + _result.value = value; + } + return _result; + } + factory BooleanSelection.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BooleanSelection.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BooleanSelection clone() => BooleanSelection()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BooleanSelection copyWith(void Function(BooleanSelection) updates) => + super.copyWith((message) => updates(message as BooleanSelection)) + as BooleanSelection; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BooleanSelection create() => BooleanSelection._(); + BooleanSelection createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BooleanSelection getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BooleanSelection? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get value => $_getBF(0); + @$pb.TagNumber(1) + set value($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasValue() => $_has(0); + @$pb.TagNumber(1) + void clearValue() => clearField(1); +} + +enum TokenValueFilter_FilterType { assetCodeSelection, quantityRange, tokenValueTypeSelection, notSet } + +class TokenValueFilter extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TokenValueFilter_FilterType> _TokenValueFilter_FilterTypeByTag = { + 1: TokenValueFilter_FilterType.assetCodeSelection, + 2: TokenValueFilter_FilterType.quantityRange, + 3: TokenValueFilter_FilterType.tokenValueTypeSelection, + 0: TokenValueFilter_FilterType.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TokenValueFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'assetCodeSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'quantityRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'tokenValueTypeSelection', + subBuilder: StringSelection.create, + ) + ..hasRequiredFields = false; + + TokenValueFilter._() : super(); + factory TokenValueFilter({ + StringSelection? assetCodeSelection, + NumberRange? quantityRange, + StringSelection? tokenValueTypeSelection, + }) { + final _result = create(); + if (assetCodeSelection != null) { + _result.assetCodeSelection = assetCodeSelection; + } + if (quantityRange != null) { + _result.quantityRange = quantityRange; + } + if (tokenValueTypeSelection != null) { + _result.tokenValueTypeSelection = tokenValueTypeSelection; + } + return _result; + } + factory TokenValueFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TokenValueFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TokenValueFilter clone() => TokenValueFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TokenValueFilter copyWith(void Function(TokenValueFilter) updates) => + super.copyWith((message) => updates(message as TokenValueFilter)) + as TokenValueFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TokenValueFilter create() => TokenValueFilter._(); + TokenValueFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TokenValueFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TokenValueFilter? _defaultInstance; + + TokenValueFilter_FilterType whichFilterType() => _TokenValueFilter_FilterTypeByTag[$_whichOneof(0)]!; + void clearFilterType() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + StringSelection get assetCodeSelection => $_getN(0); + @$pb.TagNumber(1) + set assetCodeSelection(StringSelection v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasAssetCodeSelection() => $_has(0); + @$pb.TagNumber(1) + void clearAssetCodeSelection() => clearField(1); + @$pb.TagNumber(1) + StringSelection ensureAssetCodeSelection() => $_ensure(0); + + @$pb.TagNumber(2) + NumberRange get quantityRange => $_getN(1); + @$pb.TagNumber(2) + set quantityRange(NumberRange v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasQuantityRange() => $_has(1); + @$pb.TagNumber(2) + void clearQuantityRange() => clearField(2); + @$pb.TagNumber(2) + NumberRange ensureQuantityRange() => $_ensure(1); + + @$pb.TagNumber(3) + StringSelection get tokenValueTypeSelection => $_getN(2); + @$pb.TagNumber(3) + set tokenValueTypeSelection(StringSelection v) { + setField(3, v); + } + + @$pb.TagNumber(3) + $core.bool hasTokenValueTypeSelection() => $_has(2); + @$pb.TagNumber(3) + void clearTokenValueTypeSelection() => clearField(3); + @$pb.TagNumber(3) + StringSelection ensureTokenValueTypeSelection() => $_ensure(2); +} + +class TransactionFilter_AndFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionFilter.AndFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..pc( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filters', + $pb.PbFieldType.PM, + subBuilder: TransactionFilter.create, + ) + ..hasRequiredFields = false; + + TransactionFilter_AndFilter._() : super(); + factory TransactionFilter_AndFilter({ + $core.Iterable? filters, + }) { + final _result = create(); + if (filters != null) { + _result.filters.addAll(filters); + } + return _result; + } + factory TransactionFilter_AndFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionFilter_AndFilter.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_AndFilter clone() => TransactionFilter_AndFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_AndFilter copyWith(void Function(TransactionFilter_AndFilter) updates) => + super.copyWith((message) => updates(message as TransactionFilter_AndFilter)) + as TransactionFilter_AndFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionFilter_AndFilter create() => TransactionFilter_AndFilter._(); + TransactionFilter_AndFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionFilter_AndFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionFilter_AndFilter? _defaultInstance; + + @$pb.TagNumber(1) + $core.List get filters => $_getList(0); +} + +class TransactionFilter_OrFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionFilter.OrFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..pc( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filters', + $pb.PbFieldType.PM, + subBuilder: TransactionFilter.create, + ) + ..hasRequiredFields = false; + + TransactionFilter_OrFilter._() : super(); + factory TransactionFilter_OrFilter({ + $core.Iterable? filters, + }) { + final _result = create(); + if (filters != null) { + _result.filters.addAll(filters); + } + return _result; + } + factory TransactionFilter_OrFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionFilter_OrFilter.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_OrFilter clone() => TransactionFilter_OrFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_OrFilter copyWith(void Function(TransactionFilter_OrFilter) updates) => + super.copyWith((message) => updates(message as TransactionFilter_OrFilter)) + as TransactionFilter_OrFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionFilter_OrFilter create() => TransactionFilter_OrFilter._(); + TransactionFilter_OrFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionFilter_OrFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionFilter_OrFilter? _defaultInstance; + + @$pb.TagNumber(1) + $core.List get filters => $_getList(0); +} + +class TransactionFilter_NotFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionFilter.NotFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: TransactionFilter.create, + ) + ..hasRequiredFields = false; + + TransactionFilter_NotFilter._() : super(); + factory TransactionFilter_NotFilter({ + TransactionFilter? filter, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + return _result; + } + factory TransactionFilter_NotFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionFilter_NotFilter.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_NotFilter clone() => TransactionFilter_NotFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_NotFilter copyWith(void Function(TransactionFilter_NotFilter) updates) => + super.copyWith((message) => updates(message as TransactionFilter_NotFilter)) + as TransactionFilter_NotFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionFilter_NotFilter create() => TransactionFilter_NotFilter._(); + TransactionFilter_NotFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionFilter_NotFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionFilter_NotFilter? _defaultInstance; + + @$pb.TagNumber(1) + TransactionFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter(TransactionFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + TransactionFilter ensureFilter() => $_ensure(0); +} + +class TransactionFilter_AllFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionFilter.AllFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + )..hasRequiredFields = false; + + TransactionFilter_AllFilter._() : super(); + factory TransactionFilter_AllFilter() => create(); + factory TransactionFilter_AllFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionFilter_AllFilter.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_AllFilter clone() => TransactionFilter_AllFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter_AllFilter copyWith(void Function(TransactionFilter_AllFilter) updates) => + super.copyWith((message) => updates(message as TransactionFilter_AllFilter)) + as TransactionFilter_AllFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionFilter_AllFilter create() => TransactionFilter_AllFilter._(); + TransactionFilter_AllFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionFilter_AllFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionFilter_AllFilter? _defaultInstance; +} + +enum TransactionFilter_FilterType { + txTypeSelection, + timestampRange, + inputAddressSelection, + inputNonceSelection, + outputTokenBoxTypeSelection, + outputTokenValueFilter, + outputAddressSelection, + mintingSelection, + txIdSelection, + boxesToRemoveSelection, + feeRange, + propositionSelection, + blockIdSelection, + blockHeightRange, + and, + or, + not, + all, + notSet +} + +class TransactionFilter extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TransactionFilter_FilterType> _TransactionFilter_FilterTypeByTag = { + 1: TransactionFilter_FilterType.txTypeSelection, + 2: TransactionFilter_FilterType.timestampRange, + 3: TransactionFilter_FilterType.inputAddressSelection, + 4: TransactionFilter_FilterType.inputNonceSelection, + 5: TransactionFilter_FilterType.outputTokenBoxTypeSelection, + 6: TransactionFilter_FilterType.outputTokenValueFilter, + 7: TransactionFilter_FilterType.outputAddressSelection, + 8: TransactionFilter_FilterType.mintingSelection, + 9: TransactionFilter_FilterType.txIdSelection, + 10: TransactionFilter_FilterType.boxesToRemoveSelection, + 11: TransactionFilter_FilterType.feeRange, + 12: TransactionFilter_FilterType.propositionSelection, + 13: TransactionFilter_FilterType.blockIdSelection, + 14: TransactionFilter_FilterType.blockHeightRange, + 15: TransactionFilter_FilterType.and, + 16: TransactionFilter_FilterType.or, + 17: TransactionFilter_FilterType.not, + 18: TransactionFilter_FilterType.all, + 0: TransactionFilter_FilterType.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'txTypeSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timestampRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'inputAddressSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'inputNonceSelection', + subBuilder: NumberSelection.create, + ) + ..aOM( + 5, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'outputTokenBoxTypeSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 6, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'outputTokenValueFilter', + subBuilder: TokenValueFilter.create, + ) + ..aOM( + 7, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'outputAddressSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 8, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mintingSelection', + subBuilder: BooleanSelection.create, + ) + ..aOM( + 9, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'txIdSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 10, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'boxesToRemoveSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 11, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'feeRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 12, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'propositionSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 13, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'blockIdSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 14, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'blockHeightRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 15, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'and', + subBuilder: TransactionFilter_AndFilter.create, + ) + ..aOM( + 16, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'or', + subBuilder: TransactionFilter_OrFilter.create, + ) + ..aOM( + 17, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'not', + subBuilder: TransactionFilter_NotFilter.create, + ) + ..aOM( + 18, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'all', + subBuilder: TransactionFilter_AllFilter.create, + ) + ..hasRequiredFields = false; + + TransactionFilter._() : super(); + factory TransactionFilter({ + StringSelection? txTypeSelection, + NumberRange? timestampRange, + StringSelection? inputAddressSelection, + NumberSelection? inputNonceSelection, + StringSelection? outputTokenBoxTypeSelection, + TokenValueFilter? outputTokenValueFilter, + StringSelection? outputAddressSelection, + BooleanSelection? mintingSelection, + StringSelection? txIdSelection, + StringSelection? boxesToRemoveSelection, + NumberRange? feeRange, + StringSelection? propositionSelection, + StringSelection? blockIdSelection, + NumberRange? blockHeightRange, + TransactionFilter_AndFilter? and, + TransactionFilter_OrFilter? or, + TransactionFilter_NotFilter? not, + TransactionFilter_AllFilter? all, + }) { + final _result = create(); + if (txTypeSelection != null) { + _result.txTypeSelection = txTypeSelection; + } + if (timestampRange != null) { + _result.timestampRange = timestampRange; + } + if (inputAddressSelection != null) { + _result.inputAddressSelection = inputAddressSelection; + } + if (inputNonceSelection != null) { + _result.inputNonceSelection = inputNonceSelection; + } + if (outputTokenBoxTypeSelection != null) { + _result.outputTokenBoxTypeSelection = outputTokenBoxTypeSelection; + } + if (outputTokenValueFilter != null) { + _result.outputTokenValueFilter = outputTokenValueFilter; + } + if (outputAddressSelection != null) { + _result.outputAddressSelection = outputAddressSelection; + } + if (mintingSelection != null) { + _result.mintingSelection = mintingSelection; + } + if (txIdSelection != null) { + _result.txIdSelection = txIdSelection; + } + if (boxesToRemoveSelection != null) { + _result.boxesToRemoveSelection = boxesToRemoveSelection; + } + if (feeRange != null) { + _result.feeRange = feeRange; + } + if (propositionSelection != null) { + _result.propositionSelection = propositionSelection; + } + if (blockIdSelection != null) { + _result.blockIdSelection = blockIdSelection; + } + if (blockHeightRange != null) { + _result.blockHeightRange = blockHeightRange; + } + if (and != null) { + _result.and = and; + } + if (or != null) { + _result.or = or; + } + if (not != null) { + _result.not = not; + } + if (all != null) { + _result.all = all; + } + return _result; + } + factory TransactionFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter clone() => TransactionFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionFilter copyWith(void Function(TransactionFilter) updates) => + super.copyWith((message) => updates(message as TransactionFilter)) + as TransactionFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionFilter create() => TransactionFilter._(); + TransactionFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionFilter? _defaultInstance; + + TransactionFilter_FilterType whichFilterType() => _TransactionFilter_FilterTypeByTag[$_whichOneof(0)]!; + void clearFilterType() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + StringSelection get txTypeSelection => $_getN(0); + @$pb.TagNumber(1) + set txTypeSelection(StringSelection v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasTxTypeSelection() => $_has(0); + @$pb.TagNumber(1) + void clearTxTypeSelection() => clearField(1); + @$pb.TagNumber(1) + StringSelection ensureTxTypeSelection() => $_ensure(0); + + @$pb.TagNumber(2) + NumberRange get timestampRange => $_getN(1); + @$pb.TagNumber(2) + set timestampRange(NumberRange v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasTimestampRange() => $_has(1); + @$pb.TagNumber(2) + void clearTimestampRange() => clearField(2); + @$pb.TagNumber(2) + NumberRange ensureTimestampRange() => $_ensure(1); + + @$pb.TagNumber(3) + StringSelection get inputAddressSelection => $_getN(2); + @$pb.TagNumber(3) + set inputAddressSelection(StringSelection v) { + setField(3, v); + } + + @$pb.TagNumber(3) + $core.bool hasInputAddressSelection() => $_has(2); + @$pb.TagNumber(3) + void clearInputAddressSelection() => clearField(3); + @$pb.TagNumber(3) + StringSelection ensureInputAddressSelection() => $_ensure(2); + + @$pb.TagNumber(4) + NumberSelection get inputNonceSelection => $_getN(3); + @$pb.TagNumber(4) + set inputNonceSelection(NumberSelection v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasInputNonceSelection() => $_has(3); + @$pb.TagNumber(4) + void clearInputNonceSelection() => clearField(4); + @$pb.TagNumber(4) + NumberSelection ensureInputNonceSelection() => $_ensure(3); + + @$pb.TagNumber(5) + StringSelection get outputTokenBoxTypeSelection => $_getN(4); + @$pb.TagNumber(5) + set outputTokenBoxTypeSelection(StringSelection v) { + setField(5, v); + } + + @$pb.TagNumber(5) + $core.bool hasOutputTokenBoxTypeSelection() => $_has(4); + @$pb.TagNumber(5) + void clearOutputTokenBoxTypeSelection() => clearField(5); + @$pb.TagNumber(5) + StringSelection ensureOutputTokenBoxTypeSelection() => $_ensure(4); + + @$pb.TagNumber(6) + TokenValueFilter get outputTokenValueFilter => $_getN(5); + @$pb.TagNumber(6) + set outputTokenValueFilter(TokenValueFilter v) { + setField(6, v); + } + + @$pb.TagNumber(6) + $core.bool hasOutputTokenValueFilter() => $_has(5); + @$pb.TagNumber(6) + void clearOutputTokenValueFilter() => clearField(6); + @$pb.TagNumber(6) + TokenValueFilter ensureOutputTokenValueFilter() => $_ensure(5); + + @$pb.TagNumber(7) + StringSelection get outputAddressSelection => $_getN(6); + @$pb.TagNumber(7) + set outputAddressSelection(StringSelection v) { + setField(7, v); + } + + @$pb.TagNumber(7) + $core.bool hasOutputAddressSelection() => $_has(6); + @$pb.TagNumber(7) + void clearOutputAddressSelection() => clearField(7); + @$pb.TagNumber(7) + StringSelection ensureOutputAddressSelection() => $_ensure(6); + + @$pb.TagNumber(8) + BooleanSelection get mintingSelection => $_getN(7); + @$pb.TagNumber(8) + set mintingSelection(BooleanSelection v) { + setField(8, v); + } + + @$pb.TagNumber(8) + $core.bool hasMintingSelection() => $_has(7); + @$pb.TagNumber(8) + void clearMintingSelection() => clearField(8); + @$pb.TagNumber(8) + BooleanSelection ensureMintingSelection() => $_ensure(7); + + @$pb.TagNumber(9) + StringSelection get txIdSelection => $_getN(8); + @$pb.TagNumber(9) + set txIdSelection(StringSelection v) { + setField(9, v); + } + + @$pb.TagNumber(9) + $core.bool hasTxIdSelection() => $_has(8); + @$pb.TagNumber(9) + void clearTxIdSelection() => clearField(9); + @$pb.TagNumber(9) + StringSelection ensureTxIdSelection() => $_ensure(8); + + @$pb.TagNumber(10) + StringSelection get boxesToRemoveSelection => $_getN(9); + @$pb.TagNumber(10) + set boxesToRemoveSelection(StringSelection v) { + setField(10, v); + } + + @$pb.TagNumber(10) + $core.bool hasBoxesToRemoveSelection() => $_has(9); + @$pb.TagNumber(10) + void clearBoxesToRemoveSelection() => clearField(10); + @$pb.TagNumber(10) + StringSelection ensureBoxesToRemoveSelection() => $_ensure(9); + + @$pb.TagNumber(11) + NumberRange get feeRange => $_getN(10); + @$pb.TagNumber(11) + set feeRange(NumberRange v) { + setField(11, v); + } + + @$pb.TagNumber(11) + $core.bool hasFeeRange() => $_has(10); + @$pb.TagNumber(11) + void clearFeeRange() => clearField(11); + @$pb.TagNumber(11) + NumberRange ensureFeeRange() => $_ensure(10); + + @$pb.TagNumber(12) + StringSelection get propositionSelection => $_getN(11); + @$pb.TagNumber(12) + set propositionSelection(StringSelection v) { + setField(12, v); + } + + @$pb.TagNumber(12) + $core.bool hasPropositionSelection() => $_has(11); + @$pb.TagNumber(12) + void clearPropositionSelection() => clearField(12); + @$pb.TagNumber(12) + StringSelection ensurePropositionSelection() => $_ensure(11); + + @$pb.TagNumber(13) + StringSelection get blockIdSelection => $_getN(12); + @$pb.TagNumber(13) + set blockIdSelection(StringSelection v) { + setField(13, v); + } + + @$pb.TagNumber(13) + $core.bool hasBlockIdSelection() => $_has(12); + @$pb.TagNumber(13) + void clearBlockIdSelection() => clearField(13); + @$pb.TagNumber(13) + StringSelection ensureBlockIdSelection() => $_ensure(12); + + @$pb.TagNumber(14) + NumberRange get blockHeightRange => $_getN(13); + @$pb.TagNumber(14) + set blockHeightRange(NumberRange v) { + setField(14, v); + } + + @$pb.TagNumber(14) + $core.bool hasBlockHeightRange() => $_has(13); + @$pb.TagNumber(14) + void clearBlockHeightRange() => clearField(14); + @$pb.TagNumber(14) + NumberRange ensureBlockHeightRange() => $_ensure(13); + + @$pb.TagNumber(15) + TransactionFilter_AndFilter get and => $_getN(14); + @$pb.TagNumber(15) + set and(TransactionFilter_AndFilter v) { + setField(15, v); + } + + @$pb.TagNumber(15) + $core.bool hasAnd() => $_has(14); + @$pb.TagNumber(15) + void clearAnd() => clearField(15); + @$pb.TagNumber(15) + TransactionFilter_AndFilter ensureAnd() => $_ensure(14); + + @$pb.TagNumber(16) + TransactionFilter_OrFilter get or => $_getN(15); + @$pb.TagNumber(16) + set or(TransactionFilter_OrFilter v) { + setField(16, v); + } + + @$pb.TagNumber(16) + $core.bool hasOr() => $_has(15); + @$pb.TagNumber(16) + void clearOr() => clearField(16); + @$pb.TagNumber(16) + TransactionFilter_OrFilter ensureOr() => $_ensure(15); + + @$pb.TagNumber(17) + TransactionFilter_NotFilter get not => $_getN(16); + @$pb.TagNumber(17) + set not(TransactionFilter_NotFilter v) { + setField(17, v); + } + + @$pb.TagNumber(17) + $core.bool hasNot() => $_has(16); + @$pb.TagNumber(17) + void clearNot() => clearField(17); + @$pb.TagNumber(17) + TransactionFilter_NotFilter ensureNot() => $_ensure(16); + + @$pb.TagNumber(18) + TransactionFilter_AllFilter get all => $_getN(17); + @$pb.TagNumber(18) + set all(TransactionFilter_AllFilter v) { + setField(18, v); + } + + @$pb.TagNumber(18) + $core.bool hasAll() => $_has(17); + @$pb.TagNumber(18) + void clearAll() => clearField(18); + @$pb.TagNumber(18) + TransactionFilter_AllFilter ensureAll() => $_ensure(17); +} + +class BlockFilter_AndFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockFilter.AndFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..pc( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filters', + $pb.PbFieldType.PM, + subBuilder: BlockFilter.create, + ) + ..hasRequiredFields = false; + + BlockFilter_AndFilter._() : super(); + factory BlockFilter_AndFilter({ + $core.Iterable? filters, + }) { + final _result = create(); + if (filters != null) { + _result.filters.addAll(filters); + } + return _result; + } + factory BlockFilter_AndFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockFilter_AndFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_AndFilter clone() => BlockFilter_AndFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_AndFilter copyWith(void Function(BlockFilter_AndFilter) updates) => + super.copyWith((message) => updates(message as BlockFilter_AndFilter)) + as BlockFilter_AndFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockFilter_AndFilter create() => BlockFilter_AndFilter._(); + BlockFilter_AndFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockFilter_AndFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockFilter_AndFilter? _defaultInstance; + + @$pb.TagNumber(1) + $core.List get filters => $_getList(0); +} + +class BlockFilter_OrFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockFilter.OrFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..pc( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filters', + $pb.PbFieldType.PM, + subBuilder: BlockFilter.create, + ) + ..hasRequiredFields = false; + + BlockFilter_OrFilter._() : super(); + factory BlockFilter_OrFilter({ + $core.Iterable? filters, + }) { + final _result = create(); + if (filters != null) { + _result.filters.addAll(filters); + } + return _result; + } + factory BlockFilter_OrFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockFilter_OrFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_OrFilter clone() => BlockFilter_OrFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_OrFilter copyWith(void Function(BlockFilter_OrFilter) updates) => + super.copyWith((message) => updates(message as BlockFilter_OrFilter)) + as BlockFilter_OrFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockFilter_OrFilter create() => BlockFilter_OrFilter._(); + BlockFilter_OrFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockFilter_OrFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockFilter_OrFilter? _defaultInstance; + + @$pb.TagNumber(1) + $core.List get filters => $_getList(0); +} + +class BlockFilter_NotFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockFilter.NotFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: BlockFilter.create, + ) + ..hasRequiredFields = false; + + BlockFilter_NotFilter._() : super(); + factory BlockFilter_NotFilter({ + BlockFilter? filter, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + return _result; + } + factory BlockFilter_NotFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockFilter_NotFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_NotFilter clone() => BlockFilter_NotFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_NotFilter copyWith(void Function(BlockFilter_NotFilter) updates) => + super.copyWith((message) => updates(message as BlockFilter_NotFilter)) + as BlockFilter_NotFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockFilter_NotFilter create() => BlockFilter_NotFilter._(); + BlockFilter_NotFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockFilter_NotFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockFilter_NotFilter? _defaultInstance; + + @$pb.TagNumber(1) + BlockFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter(BlockFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + BlockFilter ensureFilter() => $_ensure(0); +} + +class BlockFilter_AllFilter extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockFilter.AllFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + )..hasRequiredFields = false; + + BlockFilter_AllFilter._() : super(); + factory BlockFilter_AllFilter() => create(); + factory BlockFilter_AllFilter.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory BlockFilter_AllFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_AllFilter clone() => BlockFilter_AllFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockFilter_AllFilter copyWith(void Function(BlockFilter_AllFilter) updates) => + super.copyWith((message) => updates(message as BlockFilter_AllFilter)) + as BlockFilter_AllFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockFilter_AllFilter create() => BlockFilter_AllFilter._(); + BlockFilter_AllFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockFilter_AllFilter getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockFilter_AllFilter? _defaultInstance; +} + +enum BlockFilter_FilterType { + idSelection, + parentIdSelection, + timestampRange, + generatorBoxTokenValueFilter, + publicKeySelection, + heightRange, + heightSelection, + difficultyRange, + versionSelection, + numTransactionRange, + and, + or, + not, + all, + notSet +} + +class BlockFilter extends $pb.GeneratedMessage { + static const $core.Map<$core.int, BlockFilter_FilterType> _BlockFilter_FilterTypeByTag = { + 1: BlockFilter_FilterType.idSelection, + 2: BlockFilter_FilterType.parentIdSelection, + 3: BlockFilter_FilterType.timestampRange, + 4: BlockFilter_FilterType.generatorBoxTokenValueFilter, + 5: BlockFilter_FilterType.publicKeySelection, + 6: BlockFilter_FilterType.heightRange, + 7: BlockFilter_FilterType.heightSelection, + 8: BlockFilter_FilterType.difficultyRange, + 9: BlockFilter_FilterType.versionSelection, + 10: BlockFilter_FilterType.numTransactionRange, + 15: BlockFilter_FilterType.and, + 16: BlockFilter_FilterType.or, + 17: BlockFilter_FilterType.not, + 18: BlockFilter_FilterType.all, + 0: BlockFilter_FilterType.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockFilter', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 18]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'idSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'parentIdSelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timestampRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'generatorBoxTokenValueFilter', + subBuilder: TokenValueFilter.create, + ) + ..aOM( + 5, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'publicKeySelection', + subBuilder: StringSelection.create, + ) + ..aOM( + 6, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'heightRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 7, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'heightSelection', + subBuilder: NumberSelection.create, + ) + ..aOM( + 8, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'difficultyRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 9, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'versionSelection', + subBuilder: NumberSelection.create, + ) + ..aOM( + 10, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'numTransactionRange', + subBuilder: NumberRange.create, + ) + ..aOM( + 15, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'and', + subBuilder: BlockFilter_AndFilter.create, + ) + ..aOM( + 16, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'or', + subBuilder: BlockFilter_OrFilter.create, + ) + ..aOM( + 17, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'not', + subBuilder: BlockFilter_NotFilter.create, + ) + ..aOM( + 18, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'all', + subBuilder: BlockFilter_AllFilter.create, + ) + ..hasRequiredFields = false; + + BlockFilter._() : super(); + factory BlockFilter({ + StringSelection? idSelection, + StringSelection? parentIdSelection, + NumberRange? timestampRange, + TokenValueFilter? generatorBoxTokenValueFilter, + StringSelection? publicKeySelection, + NumberRange? heightRange, + NumberSelection? heightSelection, + NumberRange? difficultyRange, + NumberSelection? versionSelection, + NumberRange? numTransactionRange, + BlockFilter_AndFilter? and, + BlockFilter_OrFilter? or, + BlockFilter_NotFilter? not, + BlockFilter_AllFilter? all, + }) { + final _result = create(); + if (idSelection != null) { + _result.idSelection = idSelection; + } + if (parentIdSelection != null) { + _result.parentIdSelection = parentIdSelection; + } + if (timestampRange != null) { + _result.timestampRange = timestampRange; + } + if (generatorBoxTokenValueFilter != null) { + _result.generatorBoxTokenValueFilter = generatorBoxTokenValueFilter; + } + if (publicKeySelection != null) { + _result.publicKeySelection = publicKeySelection; + } + if (heightRange != null) { + _result.heightRange = heightRange; + } + if (heightSelection != null) { + _result.heightSelection = heightSelection; + } + if (difficultyRange != null) { + _result.difficultyRange = difficultyRange; + } + if (versionSelection != null) { + _result.versionSelection = versionSelection; + } + if (numTransactionRange != null) { + _result.numTransactionRange = numTransactionRange; + } + if (and != null) { + _result.and = and; + } + if (or != null) { + _result.or = or; + } + if (not != null) { + _result.not = not; + } + if (all != null) { + _result.all = all; + } + return _result; + } + factory BlockFilter.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory BlockFilter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockFilter clone() => BlockFilter()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockFilter copyWith(void Function(BlockFilter) updates) => + super.copyWith((message) => updates(message as BlockFilter)) as BlockFilter; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockFilter create() => BlockFilter._(); + BlockFilter createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockFilter getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockFilter? _defaultInstance; + + BlockFilter_FilterType whichFilterType() => _BlockFilter_FilterTypeByTag[$_whichOneof(0)]!; + void clearFilterType() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + StringSelection get idSelection => $_getN(0); + @$pb.TagNumber(1) + set idSelection(StringSelection v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasIdSelection() => $_has(0); + @$pb.TagNumber(1) + void clearIdSelection() => clearField(1); + @$pb.TagNumber(1) + StringSelection ensureIdSelection() => $_ensure(0); + + @$pb.TagNumber(2) + StringSelection get parentIdSelection => $_getN(1); + @$pb.TagNumber(2) + set parentIdSelection(StringSelection v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasParentIdSelection() => $_has(1); + @$pb.TagNumber(2) + void clearParentIdSelection() => clearField(2); + @$pb.TagNumber(2) + StringSelection ensureParentIdSelection() => $_ensure(1); + + @$pb.TagNumber(3) + NumberRange get timestampRange => $_getN(2); + @$pb.TagNumber(3) + set timestampRange(NumberRange v) { + setField(3, v); + } + + @$pb.TagNumber(3) + $core.bool hasTimestampRange() => $_has(2); + @$pb.TagNumber(3) + void clearTimestampRange() => clearField(3); + @$pb.TagNumber(3) + NumberRange ensureTimestampRange() => $_ensure(2); + + @$pb.TagNumber(4) + TokenValueFilter get generatorBoxTokenValueFilter => $_getN(3); + @$pb.TagNumber(4) + set generatorBoxTokenValueFilter(TokenValueFilter v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasGeneratorBoxTokenValueFilter() => $_has(3); + @$pb.TagNumber(4) + void clearGeneratorBoxTokenValueFilter() => clearField(4); + @$pb.TagNumber(4) + TokenValueFilter ensureGeneratorBoxTokenValueFilter() => $_ensure(3); + + @$pb.TagNumber(5) + StringSelection get publicKeySelection => $_getN(4); + @$pb.TagNumber(5) + set publicKeySelection(StringSelection v) { + setField(5, v); + } + + @$pb.TagNumber(5) + $core.bool hasPublicKeySelection() => $_has(4); + @$pb.TagNumber(5) + void clearPublicKeySelection() => clearField(5); + @$pb.TagNumber(5) + StringSelection ensurePublicKeySelection() => $_ensure(4); + + @$pb.TagNumber(6) + NumberRange get heightRange => $_getN(5); + @$pb.TagNumber(6) + set heightRange(NumberRange v) { + setField(6, v); + } + + @$pb.TagNumber(6) + $core.bool hasHeightRange() => $_has(5); + @$pb.TagNumber(6) + void clearHeightRange() => clearField(6); + @$pb.TagNumber(6) + NumberRange ensureHeightRange() => $_ensure(5); + + @$pb.TagNumber(7) + NumberSelection get heightSelection => $_getN(6); + @$pb.TagNumber(7) + set heightSelection(NumberSelection v) { + setField(7, v); + } + + @$pb.TagNumber(7) + $core.bool hasHeightSelection() => $_has(6); + @$pb.TagNumber(7) + void clearHeightSelection() => clearField(7); + @$pb.TagNumber(7) + NumberSelection ensureHeightSelection() => $_ensure(6); + + @$pb.TagNumber(8) + NumberRange get difficultyRange => $_getN(7); + @$pb.TagNumber(8) + set difficultyRange(NumberRange v) { + setField(8, v); + } + + @$pb.TagNumber(8) + $core.bool hasDifficultyRange() => $_has(7); + @$pb.TagNumber(8) + void clearDifficultyRange() => clearField(8); + @$pb.TagNumber(8) + NumberRange ensureDifficultyRange() => $_ensure(7); + + @$pb.TagNumber(9) + NumberSelection get versionSelection => $_getN(8); + @$pb.TagNumber(9) + set versionSelection(NumberSelection v) { + setField(9, v); + } + + @$pb.TagNumber(9) + $core.bool hasVersionSelection() => $_has(8); + @$pb.TagNumber(9) + void clearVersionSelection() => clearField(9); + @$pb.TagNumber(9) + NumberSelection ensureVersionSelection() => $_ensure(8); + + @$pb.TagNumber(10) + NumberRange get numTransactionRange => $_getN(9); + @$pb.TagNumber(10) + set numTransactionRange(NumberRange v) { + setField(10, v); + } + + @$pb.TagNumber(10) + $core.bool hasNumTransactionRange() => $_has(9); + @$pb.TagNumber(10) + void clearNumTransactionRange() => clearField(10); + @$pb.TagNumber(10) + NumberRange ensureNumTransactionRange() => $_ensure(9); + + @$pb.TagNumber(15) + BlockFilter_AndFilter get and => $_getN(10); + @$pb.TagNumber(15) + set and(BlockFilter_AndFilter v) { + setField(15, v); + } + + @$pb.TagNumber(15) + $core.bool hasAnd() => $_has(10); + @$pb.TagNumber(15) + void clearAnd() => clearField(15); + @$pb.TagNumber(15) + BlockFilter_AndFilter ensureAnd() => $_ensure(10); + + @$pb.TagNumber(16) + BlockFilter_OrFilter get or => $_getN(11); + @$pb.TagNumber(16) + set or(BlockFilter_OrFilter v) { + setField(16, v); + } + + @$pb.TagNumber(16) + $core.bool hasOr() => $_has(11); + @$pb.TagNumber(16) + void clearOr() => clearField(16); + @$pb.TagNumber(16) + BlockFilter_OrFilter ensureOr() => $_ensure(11); + + @$pb.TagNumber(17) + BlockFilter_NotFilter get not => $_getN(12); + @$pb.TagNumber(17) + set not(BlockFilter_NotFilter v) { + setField(17, v); + } + + @$pb.TagNumber(17) + $core.bool hasNot() => $_has(12); + @$pb.TagNumber(17) + void clearNot() => clearField(17); + @$pb.TagNumber(17) + BlockFilter_NotFilter ensureNot() => $_ensure(12); + + @$pb.TagNumber(18) + BlockFilter_AllFilter get all => $_getN(13); + @$pb.TagNumber(18) + set all(BlockFilter_AllFilter v) { + setField(18, v); + } + + @$pb.TagNumber(18) + $core.bool hasAll() => $_has(13); + @$pb.TagNumber(18) + void clearAll() => clearField(18); + @$pb.TagNumber(18) + BlockFilter_AllFilter ensureAll() => $_ensure(13); +} diff --git a/lib/genus/generated/filters.pbenum.dart b/lib/genus/generated/filters.pbenum.dart new file mode 100644 index 00000000..67c28c19 --- /dev/null +++ b/lib/genus/generated/filters.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: filters.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/filters.pbjson.dart b/lib/genus/generated/filters.pbjson.dart new file mode 100644 index 00000000..deb829bc --- /dev/null +++ b/lib/genus/generated/filters.pbjson.dart @@ -0,0 +1,185 @@ +/// +// Generated code. Do not modify. +// source: filters.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use stringSelectionDescriptor instead') +const StringSelection$json = const { + '1': 'StringSelection', + '2': const [ + const {'1': 'values', '3': 1, '4': 3, '5': 9, '10': 'values'}, + ], +}; + +/// Descriptor for `StringSelection`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List stringSelectionDescriptor = $convert.base64Decode('Cg9TdHJpbmdTZWxlY3Rpb24SFgoGdmFsdWVzGAEgAygJUgZ2YWx1ZXM='); +@$core.Deprecated('Use numberRangeDescriptor instead') +const NumberRange$json = const { + '1': 'NumberRange', + '2': const [ + const {'1': 'min', '3': 1, '4': 1, '5': 4, '9': 0, '10': 'min'}, + const {'1': 'max', '3': 2, '4': 1, '5': 4, '9': 0, '10': 'max'}, + ], + '8': const [ + const {'1': 'filter_type'}, + ], +}; + +/// Descriptor for `NumberRange`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List numberRangeDescriptor = $convert.base64Decode('CgtOdW1iZXJSYW5nZRISCgNtaW4YASABKARIAFIDbWluEhIKA21heBgCIAEoBEgAUgNtYXhCDQoLZmlsdGVyX3R5cGU='); +@$core.Deprecated('Use numberSelectionDescriptor instead') +const NumberSelection$json = const { + '1': 'NumberSelection', + '2': const [ + const {'1': 'values', '3': 1, '4': 3, '5': 4, '10': 'values'}, + ], +}; + +/// Descriptor for `NumberSelection`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List numberSelectionDescriptor = $convert.base64Decode('Cg9OdW1iZXJTZWxlY3Rpb24SFgoGdmFsdWVzGAEgAygEUgZ2YWx1ZXM='); +@$core.Deprecated('Use booleanSelectionDescriptor instead') +const BooleanSelection$json = const { + '1': 'BooleanSelection', + '2': const [ + const {'1': 'value', '3': 1, '4': 1, '5': 8, '10': 'value'}, + ], +}; + +/// Descriptor for `BooleanSelection`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List booleanSelectionDescriptor = $convert.base64Decode('ChBCb29sZWFuU2VsZWN0aW9uEhQKBXZhbHVlGAEgASgIUgV2YWx1ZQ=='); +@$core.Deprecated('Use tokenValueFilterDescriptor instead') +const TokenValueFilter$json = const { + '1': 'TokenValueFilter', + '2': const [ + const {'1': 'asset_code_selection', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'assetCodeSelection'}, + const {'1': 'quantity_range', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'quantityRange'}, + const {'1': 'token_value_type_selection', '3': 3, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'tokenValueTypeSelection'}, + ], + '8': const [ + const {'1': 'filter_type'}, + ], +}; + +/// Descriptor for `TokenValueFilter`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List tokenValueFilterDescriptor = $convert.base64Decode('ChBUb2tlblZhbHVlRmlsdGVyElIKFGFzc2V0X2NvZGVfc2VsZWN0aW9uGAEgASgLMh4uY28udG9wbC5nZW51cy5TdHJpbmdTZWxlY3Rpb25IAFISYXNzZXRDb2RlU2VsZWN0aW9uEkMKDnF1YW50aXR5X3JhbmdlGAIgASgLMhouY28udG9wbC5nZW51cy5OdW1iZXJSYW5nZUgAUg1xdWFudGl0eVJhbmdlEl0KGnRva2VuX3ZhbHVlX3R5cGVfc2VsZWN0aW9uGAMgASgLMh4uY28udG9wbC5nZW51cy5TdHJpbmdTZWxlY3Rpb25IAFIXdG9rZW5WYWx1ZVR5cGVTZWxlY3Rpb25CDQoLZmlsdGVyX3R5cGU='); +@$core.Deprecated('Use transactionFilterDescriptor instead') +const TransactionFilter$json = const { + '1': 'TransactionFilter', + '2': const [ + const {'1': 'tx_type_selection', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'txTypeSelection'}, + const {'1': 'timestamp_range', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'timestampRange'}, + const {'1': 'input_address_selection', '3': 3, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'inputAddressSelection'}, + const {'1': 'input_nonce_selection', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.NumberSelection', '9': 0, '10': 'inputNonceSelection'}, + const {'1': 'output_token_box_type_selection', '3': 5, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'outputTokenBoxTypeSelection'}, + const {'1': 'output_token_value_filter', '3': 6, '4': 1, '5': 11, '6': '.co.topl.genus.TokenValueFilter', '9': 0, '10': 'outputTokenValueFilter'}, + const {'1': 'output_address_selection', '3': 7, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'outputAddressSelection'}, + const {'1': 'minting_selection', '3': 8, '4': 1, '5': 11, '6': '.co.topl.genus.BooleanSelection', '9': 0, '10': 'mintingSelection'}, + const {'1': 'tx_id_selection', '3': 9, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'txIdSelection'}, + const {'1': 'boxes_to_remove_selection', '3': 10, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'boxesToRemoveSelection'}, + const {'1': 'fee_range', '3': 11, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'feeRange'}, + const {'1': 'proposition_selection', '3': 12, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'propositionSelection'}, + const {'1': 'block_id_selection', '3': 13, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'blockIdSelection'}, + const {'1': 'block_height_range', '3': 14, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'blockHeightRange'}, + const {'1': 'and', '3': 15, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter.AndFilter', '9': 0, '10': 'and'}, + const {'1': 'or', '3': 16, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter.OrFilter', '9': 0, '10': 'or'}, + const {'1': 'not', '3': 17, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter.NotFilter', '9': 0, '10': 'not'}, + const {'1': 'all', '3': 18, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter.AllFilter', '9': 0, '10': 'all'}, + ], + '3': const [TransactionFilter_AndFilter$json, TransactionFilter_OrFilter$json, TransactionFilter_NotFilter$json, TransactionFilter_AllFilter$json], + '8': const [ + const {'1': 'filter_type'}, + ], +}; + +@$core.Deprecated('Use transactionFilterDescriptor instead') +const TransactionFilter_AndFilter$json = const { + '1': 'AndFilter', + '2': const [ + const {'1': 'filters', '3': 1, '4': 3, '5': 11, '6': '.co.topl.genus.TransactionFilter', '10': 'filters'}, + ], +}; + +@$core.Deprecated('Use transactionFilterDescriptor instead') +const TransactionFilter_OrFilter$json = const { + '1': 'OrFilter', + '2': const [ + const {'1': 'filters', '3': 1, '4': 3, '5': 11, '6': '.co.topl.genus.TransactionFilter', '10': 'filters'}, + ], +}; + +@$core.Deprecated('Use transactionFilterDescriptor instead') +const TransactionFilter_NotFilter$json = const { + '1': 'NotFilter', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter', '10': 'filter'}, + ], +}; + +@$core.Deprecated('Use transactionFilterDescriptor instead') +const TransactionFilter_AllFilter$json = const { + '1': 'AllFilter', +}; + +/// Descriptor for `TransactionFilter`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List transactionFilterDescriptor = $convert.base64Decode('ChFUcmFuc2FjdGlvbkZpbHRlchJMChF0eF90eXBlX3NlbGVjdGlvbhgBIAEoCzIeLmNvLnRvcGwuZ2VudXMuU3RyaW5nU2VsZWN0aW9uSABSD3R4VHlwZVNlbGVjdGlvbhJFCg90aW1lc3RhbXBfcmFuZ2UYAiABKAsyGi5jby50b3BsLmdlbnVzLk51bWJlclJhbmdlSABSDnRpbWVzdGFtcFJhbmdlElgKF2lucHV0X2FkZHJlc3Nfc2VsZWN0aW9uGAMgASgLMh4uY28udG9wbC5nZW51cy5TdHJpbmdTZWxlY3Rpb25IAFIVaW5wdXRBZGRyZXNzU2VsZWN0aW9uElQKFWlucHV0X25vbmNlX3NlbGVjdGlvbhgEIAEoCzIeLmNvLnRvcGwuZ2VudXMuTnVtYmVyU2VsZWN0aW9uSABSE2lucHV0Tm9uY2VTZWxlY3Rpb24SZgofb3V0cHV0X3Rva2VuX2JveF90eXBlX3NlbGVjdGlvbhgFIAEoCzIeLmNvLnRvcGwuZ2VudXMuU3RyaW5nU2VsZWN0aW9uSABSG291dHB1dFRva2VuQm94VHlwZVNlbGVjdGlvbhJcChlvdXRwdXRfdG9rZW5fdmFsdWVfZmlsdGVyGAYgASgLMh8uY28udG9wbC5nZW51cy5Ub2tlblZhbHVlRmlsdGVySABSFm91dHB1dFRva2VuVmFsdWVGaWx0ZXISWgoYb3V0cHV0X2FkZHJlc3Nfc2VsZWN0aW9uGAcgASgLMh4uY28udG9wbC5nZW51cy5TdHJpbmdTZWxlY3Rpb25IAFIWb3V0cHV0QWRkcmVzc1NlbGVjdGlvbhJOChFtaW50aW5nX3NlbGVjdGlvbhgIIAEoCzIfLmNvLnRvcGwuZ2VudXMuQm9vbGVhblNlbGVjdGlvbkgAUhBtaW50aW5nU2VsZWN0aW9uEkgKD3R4X2lkX3NlbGVjdGlvbhgJIAEoCzIeLmNvLnRvcGwuZ2VudXMuU3RyaW5nU2VsZWN0aW9uSABSDXR4SWRTZWxlY3Rpb24SWwoZYm94ZXNfdG9fcmVtb3ZlX3NlbGVjdGlvbhgKIAEoCzIeLmNvLnRvcGwuZ2VudXMuU3RyaW5nU2VsZWN0aW9uSABSFmJveGVzVG9SZW1vdmVTZWxlY3Rpb24SOQoJZmVlX3JhbmdlGAsgASgLMhouY28udG9wbC5nZW51cy5OdW1iZXJSYW5nZUgAUghmZWVSYW5nZRJVChVwcm9wb3NpdGlvbl9zZWxlY3Rpb24YDCABKAsyHi5jby50b3BsLmdlbnVzLlN0cmluZ1NlbGVjdGlvbkgAUhRwcm9wb3NpdGlvblNlbGVjdGlvbhJOChJibG9ja19pZF9zZWxlY3Rpb24YDSABKAsyHi5jby50b3BsLmdlbnVzLlN0cmluZ1NlbGVjdGlvbkgAUhBibG9ja0lkU2VsZWN0aW9uEkoKEmJsb2NrX2hlaWdodF9yYW5nZRgOIAEoCzIaLmNvLnRvcGwuZ2VudXMuTnVtYmVyUmFuZ2VIAFIQYmxvY2tIZWlnaHRSYW5nZRI+CgNhbmQYDyABKAsyKi5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyLkFuZEZpbHRlckgAUgNhbmQSOwoCb3IYECABKAsyKS5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyLk9yRmlsdGVySABSAm9yEj4KA25vdBgRIAEoCzIqLmNvLnRvcGwuZ2VudXMuVHJhbnNhY3Rpb25GaWx0ZXIuTm90RmlsdGVySABSA25vdBI+CgNhbGwYEiABKAsyKi5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyLkFsbEZpbHRlckgAUgNhbGwaRwoJQW5kRmlsdGVyEjoKB2ZpbHRlcnMYASADKAsyIC5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyUgdmaWx0ZXJzGkYKCE9yRmlsdGVyEjoKB2ZpbHRlcnMYASADKAsyIC5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyUgdmaWx0ZXJzGkUKCU5vdEZpbHRlchI4CgZmaWx0ZXIYASABKAsyIC5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyUgZmaWx0ZXIaCwoJQWxsRmlsdGVyQg0KC2ZpbHRlcl90eXBl'); +@$core.Deprecated('Use blockFilterDescriptor instead') +const BlockFilter$json = const { + '1': 'BlockFilter', + '2': const [ + const {'1': 'id_selection', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'idSelection'}, + const {'1': 'parent_id_selection', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'parentIdSelection'}, + const {'1': 'timestamp_range', '3': 3, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'timestampRange'}, + const {'1': 'generator_box_token_value_filter', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.TokenValueFilter', '9': 0, '10': 'generatorBoxTokenValueFilter'}, + const {'1': 'public_key_selection', '3': 5, '4': 1, '5': 11, '6': '.co.topl.genus.StringSelection', '9': 0, '10': 'publicKeySelection'}, + const {'1': 'height_range', '3': 6, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'heightRange'}, + const {'1': 'height_selection', '3': 7, '4': 1, '5': 11, '6': '.co.topl.genus.NumberSelection', '9': 0, '10': 'heightSelection'}, + const {'1': 'difficulty_range', '3': 8, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'difficultyRange'}, + const {'1': 'version_selection', '3': 9, '4': 1, '5': 11, '6': '.co.topl.genus.NumberSelection', '9': 0, '10': 'versionSelection'}, + const {'1': 'num_transaction_range', '3': 10, '4': 1, '5': 11, '6': '.co.topl.genus.NumberRange', '9': 0, '10': 'numTransactionRange'}, + const {'1': 'and', '3': 15, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter.AndFilter', '9': 0, '10': 'and'}, + const {'1': 'or', '3': 16, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter.OrFilter', '9': 0, '10': 'or'}, + const {'1': 'not', '3': 17, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter.NotFilter', '9': 0, '10': 'not'}, + const {'1': 'all', '3': 18, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter.AllFilter', '9': 0, '10': 'all'}, + ], + '3': const [BlockFilter_AndFilter$json, BlockFilter_OrFilter$json, BlockFilter_NotFilter$json, BlockFilter_AllFilter$json], + '8': const [ + const {'1': 'filter_type'}, + ], +}; + +@$core.Deprecated('Use blockFilterDescriptor instead') +const BlockFilter_AndFilter$json = const { + '1': 'AndFilter', + '2': const [ + const {'1': 'filters', '3': 1, '4': 3, '5': 11, '6': '.co.topl.genus.BlockFilter', '10': 'filters'}, + ], +}; + +@$core.Deprecated('Use blockFilterDescriptor instead') +const BlockFilter_OrFilter$json = const { + '1': 'OrFilter', + '2': const [ + const {'1': 'filters', '3': 1, '4': 3, '5': 11, '6': '.co.topl.genus.BlockFilter', '10': 'filters'}, + ], +}; + +@$core.Deprecated('Use blockFilterDescriptor instead') +const BlockFilter_NotFilter$json = const { + '1': 'NotFilter', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.BlockFilter', '10': 'filter'}, + ], +}; + +@$core.Deprecated('Use blockFilterDescriptor instead') +const BlockFilter_AllFilter$json = const { + '1': 'AllFilter', +}; + +/// Descriptor for `BlockFilter`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blockFilterDescriptor = $convert.base64Decode('CgtCbG9ja0ZpbHRlchJDCgxpZF9zZWxlY3Rpb24YASABKAsyHi5jby50b3BsLmdlbnVzLlN0cmluZ1NlbGVjdGlvbkgAUgtpZFNlbGVjdGlvbhJQChNwYXJlbnRfaWRfc2VsZWN0aW9uGAIgASgLMh4uY28udG9wbC5nZW51cy5TdHJpbmdTZWxlY3Rpb25IAFIRcGFyZW50SWRTZWxlY3Rpb24SRQoPdGltZXN0YW1wX3JhbmdlGAMgASgLMhouY28udG9wbC5nZW51cy5OdW1iZXJSYW5nZUgAUg50aW1lc3RhbXBSYW5nZRJpCiBnZW5lcmF0b3JfYm94X3Rva2VuX3ZhbHVlX2ZpbHRlchgEIAEoCzIfLmNvLnRvcGwuZ2VudXMuVG9rZW5WYWx1ZUZpbHRlckgAUhxnZW5lcmF0b3JCb3hUb2tlblZhbHVlRmlsdGVyElIKFHB1YmxpY19rZXlfc2VsZWN0aW9uGAUgASgLMh4uY28udG9wbC5nZW51cy5TdHJpbmdTZWxlY3Rpb25IAFIScHVibGljS2V5U2VsZWN0aW9uEj8KDGhlaWdodF9yYW5nZRgGIAEoCzIaLmNvLnRvcGwuZ2VudXMuTnVtYmVyUmFuZ2VIAFILaGVpZ2h0UmFuZ2USSwoQaGVpZ2h0X3NlbGVjdGlvbhgHIAEoCzIeLmNvLnRvcGwuZ2VudXMuTnVtYmVyU2VsZWN0aW9uSABSD2hlaWdodFNlbGVjdGlvbhJHChBkaWZmaWN1bHR5X3JhbmdlGAggASgLMhouY28udG9wbC5nZW51cy5OdW1iZXJSYW5nZUgAUg9kaWZmaWN1bHR5UmFuZ2USTQoRdmVyc2lvbl9zZWxlY3Rpb24YCSABKAsyHi5jby50b3BsLmdlbnVzLk51bWJlclNlbGVjdGlvbkgAUhB2ZXJzaW9uU2VsZWN0aW9uElAKFW51bV90cmFuc2FjdGlvbl9yYW5nZRgKIAEoCzIaLmNvLnRvcGwuZ2VudXMuTnVtYmVyUmFuZ2VIAFITbnVtVHJhbnNhY3Rpb25SYW5nZRI4CgNhbmQYDyABKAsyJC5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyLkFuZEZpbHRlckgAUgNhbmQSNQoCb3IYECABKAsyIy5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyLk9yRmlsdGVySABSAm9yEjgKA25vdBgRIAEoCzIkLmNvLnRvcGwuZ2VudXMuQmxvY2tGaWx0ZXIuTm90RmlsdGVySABSA25vdBI4CgNhbGwYEiABKAsyJC5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyLkFsbEZpbHRlckgAUgNhbGwaQQoJQW5kRmlsdGVyEjQKB2ZpbHRlcnMYASADKAsyGi5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyUgdmaWx0ZXJzGkAKCE9yRmlsdGVyEjQKB2ZpbHRlcnMYASADKAsyGi5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyUgdmaWx0ZXJzGj8KCU5vdEZpbHRlchIyCgZmaWx0ZXIYASABKAsyGi5jby50b3BsLmdlbnVzLkJsb2NrRmlsdGVyUgZmaWx0ZXIaCwoJQWxsRmlsdGVyQg0KC2ZpbHRlcl90eXBl'); diff --git a/lib/genus/generated/services_types.pb.dart b/lib/genus/generated/services_types.pb.dart new file mode 100644 index 00000000..95911845 --- /dev/null +++ b/lib/genus/generated/services_types.pb.dart @@ -0,0 +1,95 @@ +/// +// Generated code. Do not modify. +// source: services_types.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +class Paging extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Paging', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..a<$core.int>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'pageNumber', + $pb.PbFieldType.OU3, + ) + ..a<$core.int>( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'pageSize', + $pb.PbFieldType.OU3, + ) + ..hasRequiredFields = false; + + Paging._() : super(); + factory Paging({ + $core.int? pageNumber, + $core.int? pageSize, + }) { + final _result = create(); + if (pageNumber != null) { + _result.pageNumber = pageNumber; + } + if (pageSize != null) { + _result.pageSize = pageSize; + } + return _result; + } + factory Paging.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory Paging.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + Paging clone() => Paging()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + Paging copyWith(void Function(Paging) updates) => + super.copyWith((message) => updates(message as Paging)) as Paging; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static Paging create() => Paging._(); + Paging createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static Paging getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Paging? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get pageNumber => $_getIZ(0); + @$pb.TagNumber(1) + set pageNumber($core.int v) { + $_setUnsignedInt32(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasPageNumber() => $_has(0); + @$pb.TagNumber(1) + void clearPageNumber() => clearField(1); + + @$pb.TagNumber(2) + $core.int get pageSize => $_getIZ(1); + @$pb.TagNumber(2) + set pageSize($core.int v) { + $_setUnsignedInt32(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasPageSize() => $_has(1); + @$pb.TagNumber(2) + void clearPageSize() => clearField(2); +} diff --git a/lib/genus/generated/services_types.pbenum.dart b/lib/genus/generated/services_types.pbenum.dart new file mode 100644 index 00000000..f1c28728 --- /dev/null +++ b/lib/genus/generated/services_types.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: services_types.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/services_types.pbjson.dart b/lib/genus/generated/services_types.pbjson.dart new file mode 100644 index 00000000..7847a65f --- /dev/null +++ b/lib/genus/generated/services_types.pbjson.dart @@ -0,0 +1,21 @@ +/// +// Generated code. Do not modify. +// source: services_types.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use pagingDescriptor instead') +const Paging$json = const { + '1': 'Paging', + '2': const [ + const {'1': 'page_number', '3': 1, '4': 1, '5': 13, '10': 'pageNumber'}, + const {'1': 'page_size', '3': 2, '4': 1, '5': 13, '10': 'pageSize'}, + ], +}; + +/// Descriptor for `Paging`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List pagingDescriptor = $convert.base64Decode('CgZQYWdpbmcSHwoLcGFnZV9udW1iZXIYASABKA1SCnBhZ2VOdW1iZXISGwoJcGFnZV9zaXplGAIgASgNUghwYWdlU2l6ZQ=='); diff --git a/lib/genus/generated/transactions_query.pb.dart b/lib/genus/generated/transactions_query.pb.dart new file mode 100644 index 00000000..89906d4d --- /dev/null +++ b/lib/genus/generated/transactions_query.pb.dart @@ -0,0 +1,1059 @@ +/// +// Generated code. Do not modify. +// source: transactions_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +import 'filters.pb.dart' as $4; +import 'services_types.pb.dart' as $5; +import 'types.pb.dart' as $6; + +class TransactionSorting_Height extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionSorting.Height', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + TransactionSorting_Height._() : super(); + factory TransactionSorting_Height({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory TransactionSorting_Height.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionSorting_Height.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting_Height clone() => TransactionSorting_Height()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting_Height copyWith(void Function(TransactionSorting_Height) updates) => + super.copyWith((message) => updates(message as TransactionSorting_Height)) + as TransactionSorting_Height; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionSorting_Height create() => TransactionSorting_Height._(); + TransactionSorting_Height createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionSorting_Height getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionSorting_Height? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +class TransactionSorting_Fee extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionSorting.Fee', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + TransactionSorting_Fee._() : super(); + factory TransactionSorting_Fee({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory TransactionSorting_Fee.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionSorting_Fee.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting_Fee clone() => TransactionSorting_Fee()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting_Fee copyWith(void Function(TransactionSorting_Fee) updates) => + super.copyWith((message) => updates(message as TransactionSorting_Fee)) + as TransactionSorting_Fee; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionSorting_Fee create() => TransactionSorting_Fee._(); + TransactionSorting_Fee createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionSorting_Fee getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionSorting_Fee? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +class TransactionSorting_Timestamp extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionSorting.Timestamp', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOB(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descending') + ..hasRequiredFields = false; + + TransactionSorting_Timestamp._() : super(); + factory TransactionSorting_Timestamp({ + $core.bool? descending, + }) { + final _result = create(); + if (descending != null) { + _result.descending = descending; + } + return _result; + } + factory TransactionSorting_Timestamp.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionSorting_Timestamp.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting_Timestamp clone() => TransactionSorting_Timestamp()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting_Timestamp copyWith(void Function(TransactionSorting_Timestamp) updates) => + super.copyWith((message) => updates(message as TransactionSorting_Timestamp)) + as TransactionSorting_Timestamp; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionSorting_Timestamp create() => TransactionSorting_Timestamp._(); + TransactionSorting_Timestamp createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionSorting_Timestamp getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionSorting_Timestamp? _defaultInstance; + + @$pb.TagNumber(1) + $core.bool get descending => $_getBF(0); + @$pb.TagNumber(1) + set descending($core.bool v) { + $_setBool(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDescending() => $_has(0); + @$pb.TagNumber(1) + void clearDescending() => clearField(1); +} + +enum TransactionSorting_SortBy { height, fee, timestamp, notSet } + +class TransactionSorting extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TransactionSorting_SortBy> _TransactionSorting_SortByByTag = { + 1: TransactionSorting_SortBy.height, + 2: TransactionSorting_SortBy.fee, + 3: TransactionSorting_SortBy.timestamp, + 0: TransactionSorting_SortBy.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TransactionSorting', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'height', + subBuilder: TransactionSorting_Height.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'fee', + subBuilder: TransactionSorting_Fee.create, + ) + ..aOM( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timestamp', + subBuilder: TransactionSorting_Timestamp.create, + ) + ..hasRequiredFields = false; + + TransactionSorting._() : super(); + factory TransactionSorting({ + TransactionSorting_Height? height, + TransactionSorting_Fee? fee, + TransactionSorting_Timestamp? timestamp, + }) { + final _result = create(); + if (height != null) { + _result.height = height; + } + if (fee != null) { + _result.fee = fee; + } + if (timestamp != null) { + _result.timestamp = timestamp; + } + return _result; + } + factory TransactionSorting.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TransactionSorting.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting clone() => TransactionSorting()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TransactionSorting copyWith(void Function(TransactionSorting) updates) => + super.copyWith((message) => updates(message as TransactionSorting)) + as TransactionSorting; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TransactionSorting create() => TransactionSorting._(); + TransactionSorting createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TransactionSorting getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TransactionSorting? _defaultInstance; + + TransactionSorting_SortBy whichSortBy() => _TransactionSorting_SortByByTag[$_whichOneof(0)]!; + void clearSortBy() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + TransactionSorting_Height get height => $_getN(0); + @$pb.TagNumber(1) + set height(TransactionSorting_Height v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasHeight() => $_has(0); + @$pb.TagNumber(1) + void clearHeight() => clearField(1); + @$pb.TagNumber(1) + TransactionSorting_Height ensureHeight() => $_ensure(0); + + @$pb.TagNumber(2) + TransactionSorting_Fee get fee => $_getN(1); + @$pb.TagNumber(2) + set fee(TransactionSorting_Fee v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFee() => $_has(1); + @$pb.TagNumber(2) + void clearFee() => clearField(2); + @$pb.TagNumber(2) + TransactionSorting_Fee ensureFee() => $_ensure(1); + + @$pb.TagNumber(3) + TransactionSorting_Timestamp get timestamp => $_getN(2); + @$pb.TagNumber(3) + set timestamp(TransactionSorting_Timestamp v) { + setField(3, v); + } + + @$pb.TagNumber(3) + $core.bool hasTimestamp() => $_has(2); + @$pb.TagNumber(3) + void clearTimestamp() => clearField(3); + @$pb.TagNumber(3) + TransactionSorting_Timestamp ensureTimestamp() => $_ensure(2); +} + +class QueryTxsReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryTxsReq', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOM<$4.TransactionFilter>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: $4.TransactionFilter.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sorting', + subBuilder: TransactionSorting.create, + ) + ..a<$core.int>( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'confirmationDepth', + $pb.PbFieldType.OU3, + ) + ..aOM<$5.Paging>( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'pagingOptions', + subBuilder: $5.Paging.create, + ) + ..hasRequiredFields = false; + + QueryTxsReq._() : super(); + factory QueryTxsReq({ + $4.TransactionFilter? filter, + TransactionSorting? sorting, + $core.int? confirmationDepth, + $5.Paging? pagingOptions, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + if (sorting != null) { + _result.sorting = sorting; + } + if (confirmationDepth != null) { + _result.confirmationDepth = confirmationDepth; + } + if (pagingOptions != null) { + _result.pagingOptions = pagingOptions; + } + return _result; + } + factory QueryTxsReq.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory QueryTxsReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryTxsReq clone() => QueryTxsReq()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryTxsReq copyWith(void Function(QueryTxsReq) updates) => + super.copyWith((message) => updates(message as QueryTxsReq)) as QueryTxsReq; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryTxsReq create() => QueryTxsReq._(); + QueryTxsReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryTxsReq getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryTxsReq? _defaultInstance; + + @$pb.TagNumber(1) + $4.TransactionFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter($4.TransactionFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + $4.TransactionFilter ensureFilter() => $_ensure(0); + + @$pb.TagNumber(2) + TransactionSorting get sorting => $_getN(1); + @$pb.TagNumber(2) + set sorting(TransactionSorting v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasSorting() => $_has(1); + @$pb.TagNumber(2) + void clearSorting() => clearField(2); + @$pb.TagNumber(2) + TransactionSorting ensureSorting() => $_ensure(1); + + @$pb.TagNumber(3) + $core.int get confirmationDepth => $_getIZ(2); + @$pb.TagNumber(3) + set confirmationDepth($core.int v) { + $_setUnsignedInt32(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasConfirmationDepth() => $_has(2); + @$pb.TagNumber(3) + void clearConfirmationDepth() => clearField(3); + + @$pb.TagNumber(4) + $5.Paging get pagingOptions => $_getN(3); + @$pb.TagNumber(4) + set pagingOptions($5.Paging v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasPagingOptions() => $_has(3); + @$pb.TagNumber(4) + void clearPagingOptions() => clearField(4); + @$pb.TagNumber(4) + $5.Paging ensurePagingOptions() => $_ensure(3); +} + +class QueryTxsRes_Success extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryTxsRes.Success', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..pc<$6.Transaction>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'transactions', + $pb.PbFieldType.PM, + subBuilder: $6.Transaction.create, + ) + ..hasRequiredFields = false; + + QueryTxsRes_Success._() : super(); + factory QueryTxsRes_Success({ + $core.Iterable<$6.Transaction>? transactions, + }) { + final _result = create(); + if (transactions != null) { + _result.transactions.addAll(transactions); + } + return _result; + } + factory QueryTxsRes_Success.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory QueryTxsRes_Success.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryTxsRes_Success clone() => QueryTxsRes_Success()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryTxsRes_Success copyWith(void Function(QueryTxsRes_Success) updates) => + super.copyWith((message) => updates(message as QueryTxsRes_Success)) + as QueryTxsRes_Success; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryTxsRes_Success create() => QueryTxsRes_Success._(); + QueryTxsRes_Success createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryTxsRes_Success getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryTxsRes_Success? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$6.Transaction> get transactions => $_getList(0); +} + +enum QueryTxsRes_Failure_Reason { dataStoreConnectionError, queryTimeout, invalidQuery, notSet } + +class QueryTxsRes_Failure extends $pb.GeneratedMessage { + static const $core.Map<$core.int, QueryTxsRes_Failure_Reason> _QueryTxsRes_Failure_ReasonByTag = { + 1: QueryTxsRes_Failure_Reason.dataStoreConnectionError, + 2: QueryTxsRes_Failure_Reason.queryTimeout, + 3: QueryTxsRes_Failure_Reason.invalidQuery, + 0: QueryTxsRes_Failure_Reason.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryTxsRes.Failure', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2, 3]) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'dataStoreConnectionError') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'queryTimeout') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidQuery') + ..hasRequiredFields = false; + + QueryTxsRes_Failure._() : super(); + factory QueryTxsRes_Failure({ + $core.String? dataStoreConnectionError, + $core.String? queryTimeout, + $core.String? invalidQuery, + }) { + final _result = create(); + if (dataStoreConnectionError != null) { + _result.dataStoreConnectionError = dataStoreConnectionError; + } + if (queryTimeout != null) { + _result.queryTimeout = queryTimeout; + } + if (invalidQuery != null) { + _result.invalidQuery = invalidQuery; + } + return _result; + } + factory QueryTxsRes_Failure.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory QueryTxsRes_Failure.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryTxsRes_Failure clone() => QueryTxsRes_Failure()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryTxsRes_Failure copyWith(void Function(QueryTxsRes_Failure) updates) => + super.copyWith((message) => updates(message as QueryTxsRes_Failure)) + as QueryTxsRes_Failure; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryTxsRes_Failure create() => QueryTxsRes_Failure._(); + QueryTxsRes_Failure createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryTxsRes_Failure getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryTxsRes_Failure? _defaultInstance; + + QueryTxsRes_Failure_Reason whichReason() => _QueryTxsRes_Failure_ReasonByTag[$_whichOneof(0)]!; + void clearReason() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $core.String get dataStoreConnectionError => $_getSZ(0); + @$pb.TagNumber(1) + set dataStoreConnectionError($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDataStoreConnectionError() => $_has(0); + @$pb.TagNumber(1) + void clearDataStoreConnectionError() => clearField(1); + + @$pb.TagNumber(2) + $core.String get queryTimeout => $_getSZ(1); + @$pb.TagNumber(2) + set queryTimeout($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasQueryTimeout() => $_has(1); + @$pb.TagNumber(2) + void clearQueryTimeout() => clearField(2); + + @$pb.TagNumber(3) + $core.String get invalidQuery => $_getSZ(2); + @$pb.TagNumber(3) + set invalidQuery($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasInvalidQuery() => $_has(2); + @$pb.TagNumber(3) + void clearInvalidQuery() => clearField(3); +} + +enum QueryTxsRes_Result { success, failure, notSet } + +class QueryTxsRes extends $pb.GeneratedMessage { + static const $core.Map<$core.int, QueryTxsRes_Result> _QueryTxsRes_ResultByTag = { + 1: QueryTxsRes_Result.success, + 2: QueryTxsRes_Result.failure, + 0: QueryTxsRes_Result.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'QueryTxsRes', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'success', + subBuilder: QueryTxsRes_Success.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', + subBuilder: QueryTxsRes_Failure.create, + ) + ..hasRequiredFields = false; + + QueryTxsRes._() : super(); + factory QueryTxsRes({ + QueryTxsRes_Success? success, + QueryTxsRes_Failure? failure, + }) { + final _result = create(); + if (success != null) { + _result.success = success; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory QueryTxsRes.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory QueryTxsRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + QueryTxsRes clone() => QueryTxsRes()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + QueryTxsRes copyWith(void Function(QueryTxsRes) updates) => + super.copyWith((message) => updates(message as QueryTxsRes)) as QueryTxsRes; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static QueryTxsRes create() => QueryTxsRes._(); + QueryTxsRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static QueryTxsRes getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static QueryTxsRes? _defaultInstance; + + QueryTxsRes_Result whichResult() => _QueryTxsRes_ResultByTag[$_whichOneof(0)]!; + void clearResult() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + QueryTxsRes_Success get success => $_getN(0); + @$pb.TagNumber(1) + set success(QueryTxsRes_Success v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => clearField(1); + @$pb.TagNumber(1) + QueryTxsRes_Success ensureSuccess() => $_ensure(0); + + @$pb.TagNumber(2) + QueryTxsRes_Failure get failure => $_getN(1); + @$pb.TagNumber(2) + set failure(QueryTxsRes_Failure v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFailure() => $_has(1); + @$pb.TagNumber(2) + void clearFailure() => clearField(2); + @$pb.TagNumber(2) + QueryTxsRes_Failure ensureFailure() => $_ensure(1); +} + +class TxsQueryStreamReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TxsQueryStreamReq', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOM<$4.TransactionFilter>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: $4.TransactionFilter.create, + ) + ..a<$core.int>( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'confirmationDepth', + $pb.PbFieldType.OU3, + ) + ..aOM( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'sorting', + subBuilder: TransactionSorting.create, + ) + ..hasRequiredFields = false; + + TxsQueryStreamReq._() : super(); + factory TxsQueryStreamReq({ + $4.TransactionFilter? filter, + $core.int? confirmationDepth, + TransactionSorting? sorting, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + if (confirmationDepth != null) { + _result.confirmationDepth = confirmationDepth; + } + if (sorting != null) { + _result.sorting = sorting; + } + return _result; + } + factory TxsQueryStreamReq.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TxsQueryStreamReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TxsQueryStreamReq clone() => TxsQueryStreamReq()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TxsQueryStreamReq copyWith(void Function(TxsQueryStreamReq) updates) => + super.copyWith((message) => updates(message as TxsQueryStreamReq)) + as TxsQueryStreamReq; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TxsQueryStreamReq create() => TxsQueryStreamReq._(); + TxsQueryStreamReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TxsQueryStreamReq getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TxsQueryStreamReq? _defaultInstance; + + @$pb.TagNumber(1) + $4.TransactionFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter($4.TransactionFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + $4.TransactionFilter ensureFilter() => $_ensure(0); + + @$pb.TagNumber(2) + $core.int get confirmationDepth => $_getIZ(1); + @$pb.TagNumber(2) + set confirmationDepth($core.int v) { + $_setUnsignedInt32(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasConfirmationDepth() => $_has(1); + @$pb.TagNumber(2) + void clearConfirmationDepth() => clearField(2); + + @$pb.TagNumber(4) + TransactionSorting get sorting => $_getN(2); + @$pb.TagNumber(4) + set sorting(TransactionSorting v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasSorting() => $_has(2); + @$pb.TagNumber(4) + void clearSorting() => clearField(4); + @$pb.TagNumber(4) + TransactionSorting ensureSorting() => $_ensure(2); +} + +enum TxsQueryStreamRes_Failure_Reason { dataStoreConnectionError, invalidQuery, notSet } + +class TxsQueryStreamRes_Failure extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TxsQueryStreamRes_Failure_Reason> _TxsQueryStreamRes_Failure_ReasonByTag = { + 1: TxsQueryStreamRes_Failure_Reason.dataStoreConnectionError, + 2: TxsQueryStreamRes_Failure_Reason.invalidQuery, + 0: TxsQueryStreamRes_Failure_Reason.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TxsQueryStreamRes.Failure', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'dataStoreConnectionError') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidQuery') + ..hasRequiredFields = false; + + TxsQueryStreamRes_Failure._() : super(); + factory TxsQueryStreamRes_Failure({ + $core.String? dataStoreConnectionError, + $core.String? invalidQuery, + }) { + final _result = create(); + if (dataStoreConnectionError != null) { + _result.dataStoreConnectionError = dataStoreConnectionError; + } + if (invalidQuery != null) { + _result.invalidQuery = invalidQuery; + } + return _result; + } + factory TxsQueryStreamRes_Failure.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TxsQueryStreamRes_Failure.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TxsQueryStreamRes_Failure clone() => TxsQueryStreamRes_Failure()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TxsQueryStreamRes_Failure copyWith(void Function(TxsQueryStreamRes_Failure) updates) => + super.copyWith((message) => updates(message as TxsQueryStreamRes_Failure)) + as TxsQueryStreamRes_Failure; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TxsQueryStreamRes_Failure create() => TxsQueryStreamRes_Failure._(); + TxsQueryStreamRes_Failure createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TxsQueryStreamRes_Failure getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TxsQueryStreamRes_Failure? _defaultInstance; + + TxsQueryStreamRes_Failure_Reason whichReason() => _TxsQueryStreamRes_Failure_ReasonByTag[$_whichOneof(0)]!; + void clearReason() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $core.String get dataStoreConnectionError => $_getSZ(0); + @$pb.TagNumber(1) + set dataStoreConnectionError($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasDataStoreConnectionError() => $_has(0); + @$pb.TagNumber(1) + void clearDataStoreConnectionError() => clearField(1); + + @$pb.TagNumber(2) + $core.String get invalidQuery => $_getSZ(1); + @$pb.TagNumber(2) + set invalidQuery($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasInvalidQuery() => $_has(1); + @$pb.TagNumber(2) + void clearInvalidQuery() => clearField(2); +} + +enum TxsQueryStreamRes_Result { tx, failure, notSet } + +class TxsQueryStreamRes extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TxsQueryStreamRes_Result> _TxsQueryStreamRes_ResultByTag = { + 1: TxsQueryStreamRes_Result.tx, + 2: TxsQueryStreamRes_Result.failure, + 0: TxsQueryStreamRes_Result.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TxsQueryStreamRes', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM<$6.Transaction>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'tx', + subBuilder: $6.Transaction.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', + subBuilder: TxsQueryStreamRes_Failure.create, + ) + ..hasRequiredFields = false; + + TxsQueryStreamRes._() : super(); + factory TxsQueryStreamRes({ + $6.Transaction? tx, + TxsQueryStreamRes_Failure? failure, + }) { + final _result = create(); + if (tx != null) { + _result.tx = tx; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory TxsQueryStreamRes.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TxsQueryStreamRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TxsQueryStreamRes clone() => TxsQueryStreamRes()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TxsQueryStreamRes copyWith(void Function(TxsQueryStreamRes) updates) => + super.copyWith((message) => updates(message as TxsQueryStreamRes)) + as TxsQueryStreamRes; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TxsQueryStreamRes create() => TxsQueryStreamRes._(); + TxsQueryStreamRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TxsQueryStreamRes getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TxsQueryStreamRes? _defaultInstance; + + TxsQueryStreamRes_Result whichResult() => _TxsQueryStreamRes_ResultByTag[$_whichOneof(0)]!; + void clearResult() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $6.Transaction get tx => $_getN(0); + @$pb.TagNumber(1) + set tx($6.Transaction v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasTx() => $_has(0); + @$pb.TagNumber(1) + void clearTx() => clearField(1); + @$pb.TagNumber(1) + $6.Transaction ensureTx() => $_ensure(0); + + @$pb.TagNumber(2) + TxsQueryStreamRes_Failure get failure => $_getN(1); + @$pb.TagNumber(2) + set failure(TxsQueryStreamRes_Failure v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFailure() => $_has(1); + @$pb.TagNumber(2) + void clearFailure() => clearField(2); + @$pb.TagNumber(2) + TxsQueryStreamRes_Failure ensureFailure() => $_ensure(1); +} diff --git a/lib/genus/generated/transactions_query.pbenum.dart b/lib/genus/generated/transactions_query.pbenum.dart new file mode 100644 index 00000000..93d1c1e4 --- /dev/null +++ b/lib/genus/generated/transactions_query.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: transactions_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/transactions_query.pbgrpc.dart b/lib/genus/generated/transactions_query.pbgrpc.dart new file mode 100644 index 00000000..1955c2d8 --- /dev/null +++ b/lib/genus/generated/transactions_query.pbgrpc.dart @@ -0,0 +1,101 @@ +/// +// Generated code. Do not modify. +// source: transactions_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:async' as $async; + +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'transactions_query.pb.dart' as $0; +export 'transactions_query.pb.dart'; + +class TransactionsQueryClient extends $grpc.Client { + static final _$query = $grpc.ClientMethod<$0.QueryTxsReq, $0.QueryTxsRes>( + '/co.topl.genus.services.TransactionsQuery/Query', + ($0.QueryTxsReq value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $0.QueryTxsRes.fromBuffer(value), + ); + static final _$queryStreamed = $grpc.ClientMethod<$0.TxsQueryStreamReq, $0.TxsQueryStreamRes>( + '/co.topl.genus.services.TransactionsQuery/QueryStreamed', + ($0.TxsQueryStreamReq value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $0.TxsQueryStreamRes.fromBuffer(value), + ); + + TransactionsQueryClient( + $grpc.ClientChannel channel, { + $grpc.CallOptions? options, + $core.Iterable<$grpc.ClientInterceptor>? interceptors, + }) : super(channel, options: options, interceptors: interceptors); + + $grpc.ResponseFuture<$0.QueryTxsRes> query( + $0.QueryTxsReq request, { + $grpc.CallOptions? options, + }) { + return $createUnaryCall(_$query, request, options: options); + } + + $grpc.ResponseStream<$0.TxsQueryStreamRes> queryStreamed( + $0.TxsQueryStreamReq request, { + $grpc.CallOptions? options, + }) { + return $createStreamingCall( + _$queryStreamed, + $async.Stream.fromIterable([request]), + options: options, + ); + } +} + +abstract class TransactionsQueryServiceBase extends $grpc.Service { + $core.String get $name => 'co.topl.genus.services.TransactionsQuery'; + + TransactionsQueryServiceBase() { + $addMethod( + $grpc.ServiceMethod<$0.QueryTxsReq, $0.QueryTxsRes>( + 'Query', + query_Pre, + false, + false, + ($core.List<$core.int> value) => $0.QueryTxsReq.fromBuffer(value), + ($0.QueryTxsRes value) => value.writeToBuffer(), + ), + ); + $addMethod( + $grpc.ServiceMethod<$0.TxsQueryStreamReq, $0.TxsQueryStreamRes>( + 'QueryStreamed', + queryStreamed_Pre, + false, + true, + ($core.List<$core.int> value) => $0.TxsQueryStreamReq.fromBuffer(value), + ($0.TxsQueryStreamRes value) => value.writeToBuffer(), + ), + ); + } + + $async.Future<$0.QueryTxsRes> query_Pre( + $grpc.ServiceCall call, + $async.Future<$0.QueryTxsReq> request, + ) async { + return query(call, await request); + } + + $async.Stream<$0.TxsQueryStreamRes> queryStreamed_Pre( + $grpc.ServiceCall call, + $async.Future<$0.TxsQueryStreamReq> request, + ) async* { + yield* queryStreamed(call, await request); + } + + $async.Future<$0.QueryTxsRes> query( + $grpc.ServiceCall call, + $0.QueryTxsReq request, + ); + $async.Stream<$0.TxsQueryStreamRes> queryStreamed( + $grpc.ServiceCall call, + $0.TxsQueryStreamReq request, + ); +} diff --git a/lib/genus/generated/transactions_query.pbjson.dart b/lib/genus/generated/transactions_query.pbjson.dart new file mode 100644 index 00000000..82be5b98 --- /dev/null +++ b/lib/genus/generated/transactions_query.pbjson.dart @@ -0,0 +1,138 @@ +/// +// Generated code. Do not modify. +// source: transactions_query.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use transactionSortingDescriptor instead') +const TransactionSorting$json = const { + '1': 'TransactionSorting', + '2': const [ + const {'1': 'height', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.services.TransactionSorting.Height', '9': 0, '10': 'height'}, + const {'1': 'fee', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.TransactionSorting.Fee', '9': 0, '10': 'fee'}, + const {'1': 'timestamp', '3': 3, '4': 1, '5': 11, '6': '.co.topl.genus.services.TransactionSorting.Timestamp', '9': 0, '10': 'timestamp'}, + ], + '3': const [TransactionSorting_Height$json, TransactionSorting_Fee$json, TransactionSorting_Timestamp$json], + '8': const [ + const {'1': 'sort_by'}, + ], +}; + +@$core.Deprecated('Use transactionSortingDescriptor instead') +const TransactionSorting_Height$json = const { + '1': 'Height', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +@$core.Deprecated('Use transactionSortingDescriptor instead') +const TransactionSorting_Fee$json = const { + '1': 'Fee', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +@$core.Deprecated('Use transactionSortingDescriptor instead') +const TransactionSorting_Timestamp$json = const { + '1': 'Timestamp', + '2': const [ + const {'1': 'descending', '3': 1, '4': 1, '5': 8, '10': 'descending'}, + ], +}; + +/// Descriptor for `TransactionSorting`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List transactionSortingDescriptor = $convert.base64Decode('ChJUcmFuc2FjdGlvblNvcnRpbmcSSwoGaGVpZ2h0GAEgASgLMjEuY28udG9wbC5nZW51cy5zZXJ2aWNlcy5UcmFuc2FjdGlvblNvcnRpbmcuSGVpZ2h0SABSBmhlaWdodBJCCgNmZWUYAiABKAsyLi5jby50b3BsLmdlbnVzLnNlcnZpY2VzLlRyYW5zYWN0aW9uU29ydGluZy5GZWVIAFIDZmVlElQKCXRpbWVzdGFtcBgDIAEoCzI0LmNvLnRvcGwuZ2VudXMuc2VydmljZXMuVHJhbnNhY3Rpb25Tb3J0aW5nLlRpbWVzdGFtcEgAUgl0aW1lc3RhbXAaKAoGSGVpZ2h0Eh4KCmRlc2NlbmRpbmcYASABKAhSCmRlc2NlbmRpbmcaJQoDRmVlEh4KCmRlc2NlbmRpbmcYASABKAhSCmRlc2NlbmRpbmcaKwoJVGltZXN0YW1wEh4KCmRlc2NlbmRpbmcYASABKAhSCmRlc2NlbmRpbmdCCQoHc29ydF9ieQ=='); +@$core.Deprecated('Use queryTxsReqDescriptor instead') +const QueryTxsReq$json = const { + '1': 'QueryTxsReq', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter', '10': 'filter'}, + const {'1': 'sorting', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.TransactionSorting', '10': 'sorting'}, + const {'1': 'confirmation_depth', '3': 3, '4': 1, '5': 13, '10': 'confirmationDepth'}, + const {'1': 'paging_options', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.services.Paging', '10': 'pagingOptions'}, + ], +}; + +/// Descriptor for `QueryTxsReq`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List queryTxsReqDescriptor = $convert.base64Decode('CgtRdWVyeVR4c1JlcRI4CgZmaWx0ZXIYASABKAsyIC5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyUgZmaWx0ZXISRAoHc29ydGluZxgCIAEoCzIqLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuVHJhbnNhY3Rpb25Tb3J0aW5nUgdzb3J0aW5nEi0KEmNvbmZpcm1hdGlvbl9kZXB0aBgDIAEoDVIRY29uZmlybWF0aW9uRGVwdGgSRQoOcGFnaW5nX29wdGlvbnMYBCABKAsyHi5jby50b3BsLmdlbnVzLnNlcnZpY2VzLlBhZ2luZ1INcGFnaW5nT3B0aW9ucw=='); +@$core.Deprecated('Use queryTxsResDescriptor instead') +const QueryTxsRes$json = const { + '1': 'QueryTxsRes', + '2': const [ + const {'1': 'success', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.services.QueryTxsRes.Success', '9': 0, '10': 'success'}, + const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.QueryTxsRes.Failure', '9': 0, '10': 'failure'}, + ], + '3': const [QueryTxsRes_Success$json, QueryTxsRes_Failure$json], + '8': const [ + const {'1': 'result'}, + ], +}; + +@$core.Deprecated('Use queryTxsResDescriptor instead') +const QueryTxsRes_Success$json = const { + '1': 'Success', + '2': const [ + const {'1': 'transactions', '3': 1, '4': 3, '5': 11, '6': '.co.topl.genus.Transaction', '10': 'transactions'}, + ], +}; + +@$core.Deprecated('Use queryTxsResDescriptor instead') +const QueryTxsRes_Failure$json = const { + '1': 'Failure', + '2': const [ + const {'1': 'data_store_connection_error', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'dataStoreConnectionError'}, + const {'1': 'query_timeout', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'queryTimeout'}, + const {'1': 'invalid_query', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'invalidQuery'}, + ], + '8': const [ + const {'1': 'reason'}, + ], +}; + +/// Descriptor for `QueryTxsRes`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List queryTxsResDescriptor = $convert.base64Decode('CgtRdWVyeVR4c1JlcxJHCgdzdWNjZXNzGAEgASgLMisuY28udG9wbC5nZW51cy5zZXJ2aWNlcy5RdWVyeVR4c1Jlcy5TdWNjZXNzSABSB3N1Y2Nlc3MSRwoHZmFpbHVyZRgCIAEoCzIrLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuUXVlcnlUeHNSZXMuRmFpbHVyZUgAUgdmYWlsdXJlGkkKB1N1Y2Nlc3MSPgoMdHJhbnNhY3Rpb25zGAEgAygLMhouY28udG9wbC5nZW51cy5UcmFuc2FjdGlvblIMdHJhbnNhY3Rpb25zGqIBCgdGYWlsdXJlEj8KG2RhdGFfc3RvcmVfY29ubmVjdGlvbl9lcnJvchgBIAEoCUgAUhhkYXRhU3RvcmVDb25uZWN0aW9uRXJyb3ISJQoNcXVlcnlfdGltZW91dBgCIAEoCUgAUgxxdWVyeVRpbWVvdXQSJQoNaW52YWxpZF9xdWVyeRgDIAEoCUgAUgxpbnZhbGlkUXVlcnlCCAoGcmVhc29uQggKBnJlc3VsdA=='); +@$core.Deprecated('Use txsQueryStreamReqDescriptor instead') +const TxsQueryStreamReq$json = const { + '1': 'TxsQueryStreamReq', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter', '10': 'filter'}, + const {'1': 'sorting', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.services.TransactionSorting', '10': 'sorting'}, + const {'1': 'confirmation_depth', '3': 2, '4': 1, '5': 13, '10': 'confirmationDepth'}, + ], +}; + +/// Descriptor for `TxsQueryStreamReq`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List txsQueryStreamReqDescriptor = $convert.base64Decode('ChFUeHNRdWVyeVN0cmVhbVJlcRI4CgZmaWx0ZXIYASABKAsyIC5jby50b3BsLmdlbnVzLlRyYW5zYWN0aW9uRmlsdGVyUgZmaWx0ZXISRAoHc29ydGluZxgEIAEoCzIqLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuVHJhbnNhY3Rpb25Tb3J0aW5nUgdzb3J0aW5nEi0KEmNvbmZpcm1hdGlvbl9kZXB0aBgCIAEoDVIRY29uZmlybWF0aW9uRGVwdGg='); +@$core.Deprecated('Use txsQueryStreamResDescriptor instead') +const TxsQueryStreamRes$json = const { + '1': 'TxsQueryStreamRes', + '2': const [ + const {'1': 'tx', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.Transaction', '9': 0, '10': 'tx'}, + const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.TxsQueryStreamRes.Failure', '9': 0, '10': 'failure'}, + ], + '3': const [TxsQueryStreamRes_Failure$json], + '8': const [ + const {'1': 'result'}, + ], +}; + +@$core.Deprecated('Use txsQueryStreamResDescriptor instead') +const TxsQueryStreamRes_Failure$json = const { + '1': 'Failure', + '2': const [ + const {'1': 'data_store_connection_error', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'dataStoreConnectionError'}, + const {'1': 'invalid_query', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'invalidQuery'}, + ], + '8': const [ + const {'1': 'reason'}, + ], +}; + +/// Descriptor for `TxsQueryStreamRes`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List txsQueryStreamResDescriptor = $convert.base64Decode('ChFUeHNRdWVyeVN0cmVhbVJlcxIsCgJ0eBgBIAEoCzIaLmNvLnRvcGwuZ2VudXMuVHJhbnNhY3Rpb25IAFICdHgSTQoHZmFpbHVyZRgCIAEoCzIxLmNvLnRvcGwuZ2VudXMuc2VydmljZXMuVHhzUXVlcnlTdHJlYW1SZXMuRmFpbHVyZUgAUgdmYWlsdXJlGnsKB0ZhaWx1cmUSPwobZGF0YV9zdG9yZV9jb25uZWN0aW9uX2Vycm9yGAEgASgJSABSGGRhdGFTdG9yZUNvbm5lY3Rpb25FcnJvchIlCg1pbnZhbGlkX3F1ZXJ5GAIgASgJSABSDGludmFsaWRRdWVyeUIICgZyZWFzb25CCAoGcmVzdWx0'); diff --git a/lib/genus/generated/transactions_subscription.pb.dart b/lib/genus/generated/transactions_subscription.pb.dart new file mode 100644 index 00000000..b377aeb2 --- /dev/null +++ b/lib/genus/generated/transactions_subscription.pb.dart @@ -0,0 +1,329 @@ +/// +// Generated code. Do not modify. +// source: transactions_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'filters.pb.dart' as $4; +import 'types.pb.dart' as $6; + +class CreateTxsSubscriptionReq extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateTxsSubscriptionReq', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..aOM<$4.TransactionFilter>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'filter', + subBuilder: $4.TransactionFilter.create, + ) + ..a<$fixnum.Int64>( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'startHeight', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..a<$core.int>( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'confirmationDepth', + $pb.PbFieldType.OU3, + ) + ..hasRequiredFields = false; + + CreateTxsSubscriptionReq._() : super(); + factory CreateTxsSubscriptionReq({ + $4.TransactionFilter? filter, + $fixnum.Int64? startHeight, + $core.int? confirmationDepth, + }) { + final _result = create(); + if (filter != null) { + _result.filter = filter; + } + if (startHeight != null) { + _result.startHeight = startHeight; + } + if (confirmationDepth != null) { + _result.confirmationDepth = confirmationDepth; + } + return _result; + } + factory CreateTxsSubscriptionReq.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory CreateTxsSubscriptionReq.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + CreateTxsSubscriptionReq clone() => CreateTxsSubscriptionReq()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + CreateTxsSubscriptionReq copyWith(void Function(CreateTxsSubscriptionReq) updates) => + super.copyWith((message) => updates(message as CreateTxsSubscriptionReq)) + as CreateTxsSubscriptionReq; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static CreateTxsSubscriptionReq create() => CreateTxsSubscriptionReq._(); + CreateTxsSubscriptionReq createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static CreateTxsSubscriptionReq getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static CreateTxsSubscriptionReq? _defaultInstance; + + @$pb.TagNumber(1) + $4.TransactionFilter get filter => $_getN(0); + @$pb.TagNumber(1) + set filter($4.TransactionFilter v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasFilter() => $_has(0); + @$pb.TagNumber(1) + void clearFilter() => clearField(1); + @$pb.TagNumber(1) + $4.TransactionFilter ensureFilter() => $_ensure(0); + + @$pb.TagNumber(2) + $fixnum.Int64 get startHeight => $_getI64(1); + @$pb.TagNumber(2) + set startHeight($fixnum.Int64 v) { + $_setInt64(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasStartHeight() => $_has(1); + @$pb.TagNumber(2) + void clearStartHeight() => clearField(2); + + @$pb.TagNumber(3) + $core.int get confirmationDepth => $_getIZ(2); + @$pb.TagNumber(3) + set confirmationDepth($core.int v) { + $_setUnsignedInt32(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasConfirmationDepth() => $_has(2); + @$pb.TagNumber(3) + void clearConfirmationDepth() => clearField(3); +} + +enum TxsSubscriptionRes_Failure_Reason { invalidRequest, dataConnectionError, notSet } + +class TxsSubscriptionRes_Failure extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TxsSubscriptionRes_Failure_Reason> _TxsSubscriptionRes_Failure_ReasonByTag = { + 1: TxsSubscriptionRes_Failure_Reason.invalidRequest, + 2: TxsSubscriptionRes_Failure_Reason.dataConnectionError, + 0: TxsSubscriptionRes_Failure_Reason.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TxsSubscriptionRes.Failure', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'invalidRequest') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'dataConnectionError') + ..hasRequiredFields = false; + + TxsSubscriptionRes_Failure._() : super(); + factory TxsSubscriptionRes_Failure({ + $core.String? invalidRequest, + $core.String? dataConnectionError, + }) { + final _result = create(); + if (invalidRequest != null) { + _result.invalidRequest = invalidRequest; + } + if (dataConnectionError != null) { + _result.dataConnectionError = dataConnectionError; + } + return _result; + } + factory TxsSubscriptionRes_Failure.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TxsSubscriptionRes_Failure.fromJson( + $core.String i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TxsSubscriptionRes_Failure clone() => TxsSubscriptionRes_Failure()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TxsSubscriptionRes_Failure copyWith(void Function(TxsSubscriptionRes_Failure) updates) => + super.copyWith((message) => updates(message as TxsSubscriptionRes_Failure)) + as TxsSubscriptionRes_Failure; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TxsSubscriptionRes_Failure create() => TxsSubscriptionRes_Failure._(); + TxsSubscriptionRes_Failure createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TxsSubscriptionRes_Failure getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TxsSubscriptionRes_Failure? _defaultInstance; + + TxsSubscriptionRes_Failure_Reason whichReason() => _TxsSubscriptionRes_Failure_ReasonByTag[$_whichOneof(0)]!; + void clearReason() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $core.String get invalidRequest => $_getSZ(0); + @$pb.TagNumber(1) + set invalidRequest($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasInvalidRequest() => $_has(0); + @$pb.TagNumber(1) + void clearInvalidRequest() => clearField(1); + + @$pb.TagNumber(2) + $core.String get dataConnectionError => $_getSZ(1); + @$pb.TagNumber(2) + set dataConnectionError($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasDataConnectionError() => $_has(1); + @$pb.TagNumber(2) + void clearDataConnectionError() => clearField(2); +} + +enum TxsSubscriptionRes_Result { success, failure, notSet } + +class TxsSubscriptionRes extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TxsSubscriptionRes_Result> _TxsSubscriptionRes_ResultByTag = { + 1: TxsSubscriptionRes_Result.success, + 2: TxsSubscriptionRes_Result.failure, + 0: TxsSubscriptionRes_Result.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TxsSubscriptionRes', + package: const $pb.PackageName( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus.services', + ), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM<$6.Transaction>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'success', + subBuilder: $6.Transaction.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', + subBuilder: TxsSubscriptionRes_Failure.create, + ) + ..hasRequiredFields = false; + + TxsSubscriptionRes._() : super(); + factory TxsSubscriptionRes({ + $6.Transaction? success, + TxsSubscriptionRes_Failure? failure, + }) { + final _result = create(); + if (success != null) { + _result.success = success; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory TxsSubscriptionRes.fromBuffer( + $core.List<$core.int> i, [ + $pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY, + ]) => + create()..mergeFromBuffer(i, r); + factory TxsSubscriptionRes.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TxsSubscriptionRes clone() => TxsSubscriptionRes()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TxsSubscriptionRes copyWith(void Function(TxsSubscriptionRes) updates) => + super.copyWith((message) => updates(message as TxsSubscriptionRes)) + as TxsSubscriptionRes; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TxsSubscriptionRes create() => TxsSubscriptionRes._(); + TxsSubscriptionRes createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TxsSubscriptionRes getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TxsSubscriptionRes? _defaultInstance; + + TxsSubscriptionRes_Result whichResult() => _TxsSubscriptionRes_ResultByTag[$_whichOneof(0)]!; + void clearResult() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + $6.Transaction get success => $_getN(0); + @$pb.TagNumber(1) + set success($6.Transaction v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasSuccess() => $_has(0); + @$pb.TagNumber(1) + void clearSuccess() => clearField(1); + @$pb.TagNumber(1) + $6.Transaction ensureSuccess() => $_ensure(0); + + @$pb.TagNumber(2) + TxsSubscriptionRes_Failure get failure => $_getN(1); + @$pb.TagNumber(2) + set failure(TxsSubscriptionRes_Failure v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasFailure() => $_has(1); + @$pb.TagNumber(2) + void clearFailure() => clearField(2); + @$pb.TagNumber(2) + TxsSubscriptionRes_Failure ensureFailure() => $_ensure(1); +} diff --git a/lib/genus/generated/transactions_subscription.pbenum.dart b/lib/genus/generated/transactions_subscription.pbenum.dart new file mode 100644 index 00000000..1805fd92 --- /dev/null +++ b/lib/genus/generated/transactions_subscription.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: transactions_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/transactions_subscription.pbgrpc.dart b/lib/genus/generated/transactions_subscription.pbgrpc.dart new file mode 100644 index 00000000..bef8b66e --- /dev/null +++ b/lib/genus/generated/transactions_subscription.pbgrpc.dart @@ -0,0 +1,68 @@ +/// +// Generated code. Do not modify. +// source: transactions_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:async' as $async; + +import 'dart:core' as $core; + +import 'package:grpc/service_api.dart' as $grpc; +import 'transactions_subscription.pb.dart' as $2; +export 'transactions_subscription.pb.dart'; + +class TransactionsSubscriptionClient extends $grpc.Client { + static final _$create = $grpc.ClientMethod<$2.CreateTxsSubscriptionReq, $2.TxsSubscriptionRes>( + '/co.topl.genus.services.TransactionsSubscription/Create', + ($2.CreateTxsSubscriptionReq value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $2.TxsSubscriptionRes.fromBuffer(value), + ); + + TransactionsSubscriptionClient( + $grpc.ClientChannel channel, { + $grpc.CallOptions? options, + $core.Iterable<$grpc.ClientInterceptor>? interceptors, + }) : super(channel, options: options, interceptors: interceptors); + + $grpc.ResponseStream<$2.TxsSubscriptionRes> create( + $2.CreateTxsSubscriptionReq request, { + $grpc.CallOptions? options, + }) { + return $createStreamingCall( + _$create, + $async.Stream.fromIterable([request]), + options: options, + ); + } +} + +abstract class TransactionsSubscriptionServiceBase extends $grpc.Service { + $core.String get $name => 'co.topl.genus.services.TransactionsSubscription'; + + TransactionsSubscriptionServiceBase() { + $addMethod( + $grpc.ServiceMethod<$2.CreateTxsSubscriptionReq, $2.TxsSubscriptionRes>( + 'Create', + create_Pre, + false, + true, + ($core.List<$core.int> value) => $2.CreateTxsSubscriptionReq.fromBuffer(value), + ($2.TxsSubscriptionRes value) => value.writeToBuffer(), + ), + ); + } + + $async.Stream<$2.TxsSubscriptionRes> create_Pre( + $grpc.ServiceCall call, + $async.Future<$2.CreateTxsSubscriptionReq> request, + ) async* { + yield* create(call, await request); + } + + $async.Stream<$2.TxsSubscriptionRes> create( + $grpc.ServiceCall call, + $2.CreateTxsSubscriptionReq request, + ); +} diff --git a/lib/genus/generated/transactions_subscription.pbjson.dart b/lib/genus/generated/transactions_subscription.pbjson.dart new file mode 100644 index 00000000..f1e1afcb --- /dev/null +++ b/lib/genus/generated/transactions_subscription.pbjson.dart @@ -0,0 +1,49 @@ +/// +// Generated code. Do not modify. +// source: transactions_subscription.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use createTxsSubscriptionReqDescriptor instead') +const CreateTxsSubscriptionReq$json = const { + '1': 'CreateTxsSubscriptionReq', + '2': const [ + const {'1': 'filter', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.TransactionFilter', '10': 'filter'}, + const {'1': 'start_height', '3': 2, '4': 1, '5': 4, '10': 'startHeight'}, + const {'1': 'confirmation_depth', '3': 3, '4': 1, '5': 13, '10': 'confirmationDepth'}, + ], +}; + +/// Descriptor for `CreateTxsSubscriptionReq`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List createTxsSubscriptionReqDescriptor = $convert.base64Decode('ChhDcmVhdGVUeHNTdWJzY3JpcHRpb25SZXESOAoGZmlsdGVyGAEgASgLMiAuY28udG9wbC5nZW51cy5UcmFuc2FjdGlvbkZpbHRlclIGZmlsdGVyEiEKDHN0YXJ0X2hlaWdodBgCIAEoBFILc3RhcnRIZWlnaHQSLQoSY29uZmlybWF0aW9uX2RlcHRoGAMgASgNUhFjb25maXJtYXRpb25EZXB0aA=='); +@$core.Deprecated('Use txsSubscriptionResDescriptor instead') +const TxsSubscriptionRes$json = const { + '1': 'TxsSubscriptionRes', + '2': const [ + const {'1': 'success', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.Transaction', '9': 0, '10': 'success'}, + const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.services.TxsSubscriptionRes.Failure', '9': 0, '10': 'failure'}, + ], + '3': const [TxsSubscriptionRes_Failure$json], + '8': const [ + const {'1': 'result'}, + ], +}; + +@$core.Deprecated('Use txsSubscriptionResDescriptor instead') +const TxsSubscriptionRes_Failure$json = const { + '1': 'Failure', + '2': const [ + const {'1': 'invalid_request', '3': 1, '4': 1, '5': 9, '9': 0, '10': 'invalidRequest'}, + const {'1': 'data_connection_error', '3': 2, '4': 1, '5': 9, '9': 0, '10': 'dataConnectionError'}, + ], + '8': const [ + const {'1': 'reason'}, + ], +}; + +/// Descriptor for `TxsSubscriptionRes`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List txsSubscriptionResDescriptor = $convert.base64Decode('ChJUeHNTdWJzY3JpcHRpb25SZXMSNgoHc3VjY2VzcxgBIAEoCzIaLmNvLnRvcGwuZ2VudXMuVHJhbnNhY3Rpb25IAFIHc3VjY2VzcxJOCgdmYWlsdXJlGAIgASgLMjIuY28udG9wbC5nZW51cy5zZXJ2aWNlcy5UeHNTdWJzY3JpcHRpb25SZXMuRmFpbHVyZUgAUgdmYWlsdXJlGnQKB0ZhaWx1cmUSKQoPaW52YWxpZF9yZXF1ZXN0GAEgASgJSABSDmludmFsaWRSZXF1ZXN0EjQKFWRhdGFfY29ubmVjdGlvbl9lcnJvchgCIAEoCUgAUhNkYXRhQ29ubmVjdGlvbkVycm9yQggKBnJlYXNvbkIICgZyZXN1bHQ='); diff --git a/lib/genus/generated/types.pb.dart b/lib/genus/generated/types.pb.dart new file mode 100644 index 00000000..f0d2fb10 --- /dev/null +++ b/lib/genus/generated/types.pb.dart @@ -0,0 +1,1235 @@ +/// +// Generated code. Do not modify. +// source: types.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +class Attestation extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Attestation', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'publicKey') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'signature') + ..hasRequiredFields = false; + + Attestation._() : super(); + factory Attestation({ + $core.String? publicKey, + $core.String? signature, + }) { + final _result = create(); + if (publicKey != null) { + _result.publicKey = publicKey; + } + if (signature != null) { + _result.signature = signature; + } + return _result; + } + factory Attestation.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory Attestation.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + Attestation clone() => Attestation()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + Attestation copyWith(void Function(Attestation) updates) => + super.copyWith((message) => updates(message as Attestation)) as Attestation; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static Attestation create() => Attestation._(); + Attestation createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static Attestation getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Attestation? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get publicKey => $_getSZ(0); + @$pb.TagNumber(1) + set publicKey($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasPublicKey() => $_has(0); + @$pb.TagNumber(1) + void clearPublicKey() => clearField(1); + + @$pb.TagNumber(2) + $core.String get signature => $_getSZ(1); + @$pb.TagNumber(2) + set signature($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasSignature() => $_has(1); + @$pb.TagNumber(2) + void clearSignature() => clearField(2); +} + +class SimpleValue extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'SimpleValue', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'quantity') + ..hasRequiredFields = false; + + SimpleValue._() : super(); + factory SimpleValue({ + $core.String? quantity, + }) { + final _result = create(); + if (quantity != null) { + _result.quantity = quantity; + } + return _result; + } + factory SimpleValue.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory SimpleValue.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + SimpleValue clone() => SimpleValue()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + SimpleValue copyWith(void Function(SimpleValue) updates) => + super.copyWith((message) => updates(message as SimpleValue)) as SimpleValue; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static SimpleValue create() => SimpleValue._(); + SimpleValue createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static SimpleValue getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static SimpleValue? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get quantity => $_getSZ(0); + @$pb.TagNumber(1) + set quantity($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasQuantity() => $_has(0); + @$pb.TagNumber(1) + void clearQuantity() => clearField(1); +} + +class AssetValue extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'AssetValue', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'code') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'quantity') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'securityRoot') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'metadata') + ..hasRequiredFields = false; + + AssetValue._() : super(); + factory AssetValue({ + $core.String? code, + $core.String? quantity, + $core.String? securityRoot, + $core.String? metadata, + }) { + final _result = create(); + if (code != null) { + _result.code = code; + } + if (quantity != null) { + _result.quantity = quantity; + } + if (securityRoot != null) { + _result.securityRoot = securityRoot; + } + if (metadata != null) { + _result.metadata = metadata; + } + return _result; + } + factory AssetValue.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory AssetValue.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + AssetValue clone() => AssetValue()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + AssetValue copyWith(void Function(AssetValue) updates) => + super.copyWith((message) => updates(message as AssetValue)) as AssetValue; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static AssetValue create() => AssetValue._(); + AssetValue createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static AssetValue getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static AssetValue? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get code => $_getSZ(0); + @$pb.TagNumber(1) + set code($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasCode() => $_has(0); + @$pb.TagNumber(1) + void clearCode() => clearField(1); + + @$pb.TagNumber(2) + $core.String get quantity => $_getSZ(1); + @$pb.TagNumber(2) + set quantity($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasQuantity() => $_has(1); + @$pb.TagNumber(2) + void clearQuantity() => clearField(2); + + @$pb.TagNumber(3) + $core.String get securityRoot => $_getSZ(2); + @$pb.TagNumber(3) + set securityRoot($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasSecurityRoot() => $_has(2); + @$pb.TagNumber(3) + void clearSecurityRoot() => clearField(3); + + @$pb.TagNumber(4) + $core.String get metadata => $_getSZ(3); + @$pb.TagNumber(4) + set metadata($core.String v) { + $_setString(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasMetadata() => $_has(3); + @$pb.TagNumber(4) + void clearMetadata() => clearField(4); +} + +enum TokenValue_Value { simple, asset, notSet } + +class TokenValue extends $pb.GeneratedMessage { + static const $core.Map<$core.int, TokenValue_Value> _TokenValue_ValueByTag = { + 1: TokenValue_Value.simple, + 2: TokenValue_Value.asset, + 0: TokenValue_Value.notSet + }; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TokenValue', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..oo(0, [1, 2]) + ..aOM( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'simple', + subBuilder: SimpleValue.create, + ) + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'asset', + subBuilder: AssetValue.create, + ) + ..hasRequiredFields = false; + + TokenValue._() : super(); + factory TokenValue({ + SimpleValue? simple, + AssetValue? asset, + }) { + final _result = create(); + if (simple != null) { + _result.simple = simple; + } + if (asset != null) { + _result.asset = asset; + } + return _result; + } + factory TokenValue.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory TokenValue.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TokenValue clone() => TokenValue()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TokenValue copyWith(void Function(TokenValue) updates) => + super.copyWith((message) => updates(message as TokenValue)) as TokenValue; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TokenValue create() => TokenValue._(); + TokenValue createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TokenValue getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TokenValue? _defaultInstance; + + TokenValue_Value whichValue() => _TokenValue_ValueByTag[$_whichOneof(0)]!; + void clearValue() => clearField($_whichOneof(0)); + + @$pb.TagNumber(1) + SimpleValue get simple => $_getN(0); + @$pb.TagNumber(1) + set simple(SimpleValue v) { + setField(1, v); + } + + @$pb.TagNumber(1) + $core.bool hasSimple() => $_has(0); + @$pb.TagNumber(1) + void clearSimple() => clearField(1); + @$pb.TagNumber(1) + SimpleValue ensureSimple() => $_ensure(0); + + @$pb.TagNumber(2) + AssetValue get asset => $_getN(1); + @$pb.TagNumber(2) + set asset(AssetValue v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasAsset() => $_has(1); + @$pb.TagNumber(2) + void clearAsset() => clearField(2); + @$pb.TagNumber(2) + AssetValue ensureAsset() => $_ensure(1); +} + +class TokenBox extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'TokenBox', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'boxType') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'nonce') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'evidence') + ..aOM( + 5, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', + subBuilder: TokenValue.create, + ) + ..hasRequiredFields = false; + + TokenBox._() : super(); + factory TokenBox({ + $core.String? boxType, + $core.String? id, + $core.String? nonce, + $core.String? evidence, + TokenValue? value, + }) { + final _result = create(); + if (boxType != null) { + _result.boxType = boxType; + } + if (id != null) { + _result.id = id; + } + if (nonce != null) { + _result.nonce = nonce; + } + if (evidence != null) { + _result.evidence = evidence; + } + if (value != null) { + _result.value = value; + } + return _result; + } + factory TokenBox.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory TokenBox.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + TokenBox clone() => TokenBox()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + TokenBox copyWith(void Function(TokenBox) updates) => + super.copyWith((message) => updates(message as TokenBox)) as TokenBox; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static TokenBox create() => TokenBox._(); + TokenBox createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static TokenBox getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static TokenBox? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get boxType => $_getSZ(0); + @$pb.TagNumber(1) + set boxType($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasBoxType() => $_has(0); + @$pb.TagNumber(1) + void clearBoxType() => clearField(1); + + @$pb.TagNumber(2) + $core.String get id => $_getSZ(1); + @$pb.TagNumber(2) + set id($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasId() => $_has(1); + @$pb.TagNumber(2) + void clearId() => clearField(2); + + @$pb.TagNumber(3) + $core.String get nonce => $_getSZ(2); + @$pb.TagNumber(3) + set nonce($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasNonce() => $_has(2); + @$pb.TagNumber(3) + void clearNonce() => clearField(3); + + @$pb.TagNumber(4) + $core.String get evidence => $_getSZ(3); + @$pb.TagNumber(4) + set evidence($core.String v) { + $_setString(3, v); + } + + @$pb.TagNumber(4) + $core.bool hasEvidence() => $_has(3); + @$pb.TagNumber(4) + void clearEvidence() => clearField(4); + + @$pb.TagNumber(5) + TokenValue get value => $_getN(4); + @$pb.TagNumber(5) + set value(TokenValue v) { + setField(5, v); + } + + @$pb.TagNumber(5) + $core.bool hasValue() => $_has(4); + @$pb.TagNumber(5) + void clearValue() => clearField(5); + @$pb.TagNumber(5) + TokenValue ensureValue() => $_ensure(4); +} + +class InputBox extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'InputBox', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'nonce') + ..hasRequiredFields = false; + + InputBox._() : super(); + factory InputBox({ + $core.String? address, + $core.String? nonce, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (nonce != null) { + _result.nonce = nonce; + } + return _result; + } + factory InputBox.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory InputBox.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + InputBox clone() => InputBox()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + InputBox copyWith(void Function(InputBox) updates) => + super.copyWith((message) => updates(message as InputBox)) as InputBox; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static InputBox create() => InputBox._(); + InputBox createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static InputBox getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static InputBox? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.String get nonce => $_getSZ(1); + @$pb.TagNumber(2) + set nonce($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasNonce() => $_has(1); + @$pb.TagNumber(2) + void clearNonce() => clearField(2); +} + +class OutputBox extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'OutputBox', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOM( + 2, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', + subBuilder: TokenValue.create, + ) + ..hasRequiredFields = false; + + OutputBox._() : super(); + factory OutputBox({ + $core.String? address, + TokenValue? value, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (value != null) { + _result.value = value; + } + return _result; + } + factory OutputBox.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory OutputBox.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + OutputBox clone() => OutputBox()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + OutputBox copyWith(void Function(OutputBox) updates) => + super.copyWith((message) => updates(message as OutputBox)) as OutputBox; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static OutputBox create() => OutputBox._(); + OutputBox createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static OutputBox getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static OutputBox? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + TokenValue get value => $_getN(1); + @$pb.TagNumber(2) + set value(TokenValue v) { + setField(2, v); + } + + @$pb.TagNumber(2) + $core.bool hasValue() => $_has(1); + @$pb.TagNumber(2) + void clearValue() => clearField(2); + @$pb.TagNumber(2) + TokenValue ensureValue() => $_ensure(1); +} + +class BlockHeight extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BlockHeight', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..a<$fixnum.Int64>( + 1, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..hasRequiredFields = false; + + BlockHeight._() : super(); + factory BlockHeight({ + $fixnum.Int64? value, + }) { + final _result = create(); + if (value != null) { + _result.value = value; + } + return _result; + } + factory BlockHeight.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory BlockHeight.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + BlockHeight clone() => BlockHeight()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + BlockHeight copyWith(void Function(BlockHeight) updates) => + super.copyWith((message) => updates(message as BlockHeight)) as BlockHeight; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static BlockHeight create() => BlockHeight._(); + BlockHeight createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static BlockHeight getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BlockHeight? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get value => $_getI64(0); + @$pb.TagNumber(1) + set value($fixnum.Int64 v) { + $_setInt64(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasValue() => $_has(0); + @$pb.TagNumber(1) + void clearValue() => clearField(1); +} + +class Transaction extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Transaction', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'txType') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timestamp') + ..pc( + 3, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'signatures', + $pb.PbFieldType.PM, + subBuilder: Attestation.create, + ) + ..pc( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'newBoxes', + $pb.PbFieldType.PM, + subBuilder: TokenBox.create, + ) + ..aOS(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data') + ..pc( + 6, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'inputs', + $pb.PbFieldType.PM, + subBuilder: InputBox.create, + ) + ..aOB(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'minting') + ..aOS(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'txId') + ..pPS(9, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'boxesToRemove') + ..aOS(10, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'fee') + ..pc( + 11, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'outputs', + $pb.PbFieldType.PM, + subBuilder: OutputBox.create, + ) + ..aOS(12, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'propositionType') + ..aOS(13, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'blockId') + ..a<$fixnum.Int64>( + 14, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'blockHeight', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..hasRequiredFields = false; + + Transaction._() : super(); + factory Transaction({ + $core.String? txType, + $core.String? timestamp, + $core.Iterable? signatures, + $core.Iterable? newBoxes, + $core.String? data, + $core.Iterable? inputs, + $core.bool? minting, + $core.String? txId, + $core.Iterable<$core.String>? boxesToRemove, + $core.String? fee, + $core.Iterable? outputs, + $core.String? propositionType, + $core.String? blockId, + $fixnum.Int64? blockHeight, + }) { + final _result = create(); + if (txType != null) { + _result.txType = txType; + } + if (timestamp != null) { + _result.timestamp = timestamp; + } + if (signatures != null) { + _result.signatures.addAll(signatures); + } + if (newBoxes != null) { + _result.newBoxes.addAll(newBoxes); + } + if (data != null) { + _result.data = data; + } + if (inputs != null) { + _result.inputs.addAll(inputs); + } + if (minting != null) { + _result.minting = minting; + } + if (txId != null) { + _result.txId = txId; + } + if (boxesToRemove != null) { + _result.boxesToRemove.addAll(boxesToRemove); + } + if (fee != null) { + _result.fee = fee; + } + if (outputs != null) { + _result.outputs.addAll(outputs); + } + if (propositionType != null) { + _result.propositionType = propositionType; + } + if (blockId != null) { + _result.blockId = blockId; + } + if (blockHeight != null) { + _result.blockHeight = blockHeight; + } + return _result; + } + factory Transaction.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory Transaction.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + Transaction clone() => Transaction()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + Transaction copyWith(void Function(Transaction) updates) => + super.copyWith((message) => updates(message as Transaction)) as Transaction; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static Transaction create() => Transaction._(); + Transaction createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static Transaction getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Transaction? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get txType => $_getSZ(0); + @$pb.TagNumber(1) + set txType($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasTxType() => $_has(0); + @$pb.TagNumber(1) + void clearTxType() => clearField(1); + + @$pb.TagNumber(2) + $core.String get timestamp => $_getSZ(1); + @$pb.TagNumber(2) + set timestamp($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasTimestamp() => $_has(1); + @$pb.TagNumber(2) + void clearTimestamp() => clearField(2); + + @$pb.TagNumber(3) + $core.List get signatures => $_getList(2); + + @$pb.TagNumber(4) + $core.List get newBoxes => $_getList(3); + + @$pb.TagNumber(5) + $core.String get data => $_getSZ(4); + @$pb.TagNumber(5) + set data($core.String v) { + $_setString(4, v); + } + + @$pb.TagNumber(5) + $core.bool hasData() => $_has(4); + @$pb.TagNumber(5) + void clearData() => clearField(5); + + @$pb.TagNumber(6) + $core.List get inputs => $_getList(5); + + @$pb.TagNumber(7) + $core.bool get minting => $_getBF(6); + @$pb.TagNumber(7) + set minting($core.bool v) { + $_setBool(6, v); + } + + @$pb.TagNumber(7) + $core.bool hasMinting() => $_has(6); + @$pb.TagNumber(7) + void clearMinting() => clearField(7); + + @$pb.TagNumber(8) + $core.String get txId => $_getSZ(7); + @$pb.TagNumber(8) + set txId($core.String v) { + $_setString(7, v); + } + + @$pb.TagNumber(8) + $core.bool hasTxId() => $_has(7); + @$pb.TagNumber(8) + void clearTxId() => clearField(8); + + @$pb.TagNumber(9) + $core.List<$core.String> get boxesToRemove => $_getList(8); + + @$pb.TagNumber(10) + $core.String get fee => $_getSZ(9); + @$pb.TagNumber(10) + set fee($core.String v) { + $_setString(9, v); + } + + @$pb.TagNumber(10) + $core.bool hasFee() => $_has(9); + @$pb.TagNumber(10) + void clearFee() => clearField(10); + + @$pb.TagNumber(11) + $core.List get outputs => $_getList(10); + + @$pb.TagNumber(12) + $core.String get propositionType => $_getSZ(11); + @$pb.TagNumber(12) + set propositionType($core.String v) { + $_setString(11, v); + } + + @$pb.TagNumber(12) + $core.bool hasPropositionType() => $_has(11); + @$pb.TagNumber(12) + void clearPropositionType() => clearField(12); + + @$pb.TagNumber(13) + $core.String get blockId => $_getSZ(12); + @$pb.TagNumber(13) + set blockId($core.String v) { + $_setString(12, v); + } + + @$pb.TagNumber(13) + $core.bool hasBlockId() => $_has(12); + @$pb.TagNumber(13) + void clearBlockId() => clearField(13); + + @$pb.TagNumber(14) + $fixnum.Int64 get blockHeight => $_getI64(13); + @$pb.TagNumber(14) + set blockHeight($fixnum.Int64 v) { + $_setInt64(13, v); + } + + @$pb.TagNumber(14) + $core.bool hasBlockHeight() => $_has(13); + @$pb.TagNumber(14) + void clearBlockHeight() => clearField(14); +} + +class Block extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Block', + package: + const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'co.topl.genus'), + createEmptyInstance: create, + ) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'parentId') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timestamp') + ..aOM( + 4, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'generator', + subBuilder: TokenBox.create, + ) + ..aOS(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'publicKey') + ..aOS(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'signature') + ..a<$fixnum.Int64>( + 7, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'height', + $pb.PbFieldType.OU6, + defaultOrMaker: $fixnum.Int64.ZERO, + ) + ..aOS(8, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'difficulty') + ..aOS(9, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'txRoot') + ..aOS(10, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'bloomFilter') + ..a<$core.int>( + 11, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'version', + $pb.PbFieldType.OU3, + ) + ..a<$core.int>( + 12, + const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'numTransactions', + $pb.PbFieldType.OU3, + ) + ..hasRequiredFields = false; + + Block._() : super(); + factory Block({ + $core.String? id, + $core.String? parentId, + $core.String? timestamp, + TokenBox? generator, + $core.String? publicKey, + $core.String? signature, + $fixnum.Int64? height, + $core.String? difficulty, + $core.String? txRoot, + $core.String? bloomFilter, + $core.int? version, + $core.int? numTransactions, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (parentId != null) { + _result.parentId = parentId; + } + if (timestamp != null) { + _result.timestamp = timestamp; + } + if (generator != null) { + _result.generator = generator; + } + if (publicKey != null) { + _result.publicKey = publicKey; + } + if (signature != null) { + _result.signature = signature; + } + if (height != null) { + _result.height = height; + } + if (difficulty != null) { + _result.difficulty = difficulty; + } + if (txRoot != null) { + _result.txRoot = txRoot; + } + if (bloomFilter != null) { + _result.bloomFilter = bloomFilter; + } + if (version != null) { + _result.version = version; + } + if (numTransactions != null) { + _result.numTransactions = numTransactions; + } + return _result; + } + factory Block.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory Block.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version', + ) + Block clone() => Block()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version', + ) + Block copyWith(void Function(Block) updates) => + super.copyWith((message) => updates(message as Block)) as Block; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static Block create() => Block._(); + Block createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static Block getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Block? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String v) { + $_setString(0, v); + } + + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get parentId => $_getSZ(1); + @$pb.TagNumber(2) + set parentId($core.String v) { + $_setString(1, v); + } + + @$pb.TagNumber(2) + $core.bool hasParentId() => $_has(1); + @$pb.TagNumber(2) + void clearParentId() => clearField(2); + + @$pb.TagNumber(3) + $core.String get timestamp => $_getSZ(2); + @$pb.TagNumber(3) + set timestamp($core.String v) { + $_setString(2, v); + } + + @$pb.TagNumber(3) + $core.bool hasTimestamp() => $_has(2); + @$pb.TagNumber(3) + void clearTimestamp() => clearField(3); + + @$pb.TagNumber(4) + TokenBox get generator => $_getN(3); + @$pb.TagNumber(4) + set generator(TokenBox v) { + setField(4, v); + } + + @$pb.TagNumber(4) + $core.bool hasGenerator() => $_has(3); + @$pb.TagNumber(4) + void clearGenerator() => clearField(4); + @$pb.TagNumber(4) + TokenBox ensureGenerator() => $_ensure(3); + + @$pb.TagNumber(5) + $core.String get publicKey => $_getSZ(4); + @$pb.TagNumber(5) + set publicKey($core.String v) { + $_setString(4, v); + } + + @$pb.TagNumber(5) + $core.bool hasPublicKey() => $_has(4); + @$pb.TagNumber(5) + void clearPublicKey() => clearField(5); + + @$pb.TagNumber(6) + $core.String get signature => $_getSZ(5); + @$pb.TagNumber(6) + set signature($core.String v) { + $_setString(5, v); + } + + @$pb.TagNumber(6) + $core.bool hasSignature() => $_has(5); + @$pb.TagNumber(6) + void clearSignature() => clearField(6); + + @$pb.TagNumber(7) + $fixnum.Int64 get height => $_getI64(6); + @$pb.TagNumber(7) + set height($fixnum.Int64 v) { + $_setInt64(6, v); + } + + @$pb.TagNumber(7) + $core.bool hasHeight() => $_has(6); + @$pb.TagNumber(7) + void clearHeight() => clearField(7); + + @$pb.TagNumber(8) + $core.String get difficulty => $_getSZ(7); + @$pb.TagNumber(8) + set difficulty($core.String v) { + $_setString(7, v); + } + + @$pb.TagNumber(8) + $core.bool hasDifficulty() => $_has(7); + @$pb.TagNumber(8) + void clearDifficulty() => clearField(8); + + @$pb.TagNumber(9) + $core.String get txRoot => $_getSZ(8); + @$pb.TagNumber(9) + set txRoot($core.String v) { + $_setString(8, v); + } + + @$pb.TagNumber(9) + $core.bool hasTxRoot() => $_has(8); + @$pb.TagNumber(9) + void clearTxRoot() => clearField(9); + + @$pb.TagNumber(10) + $core.String get bloomFilter => $_getSZ(9); + @$pb.TagNumber(10) + set bloomFilter($core.String v) { + $_setString(9, v); + } + + @$pb.TagNumber(10) + $core.bool hasBloomFilter() => $_has(9); + @$pb.TagNumber(10) + void clearBloomFilter() => clearField(10); + + @$pb.TagNumber(11) + $core.int get version => $_getIZ(10); + @$pb.TagNumber(11) + set version($core.int v) { + $_setUnsignedInt32(10, v); + } + + @$pb.TagNumber(11) + $core.bool hasVersion() => $_has(10); + @$pb.TagNumber(11) + void clearVersion() => clearField(11); + + @$pb.TagNumber(12) + $core.int get numTransactions => $_getIZ(11); + @$pb.TagNumber(12) + set numTransactions($core.int v) { + $_setUnsignedInt32(11, v); + } + + @$pb.TagNumber(12) + $core.bool hasNumTransactions() => $_has(11); + @$pb.TagNumber(12) + void clearNumTransactions() => clearField(12); +} diff --git a/lib/genus/generated/types.pbenum.dart b/lib/genus/generated/types.pbenum.dart new file mode 100644 index 00000000..8ed9e20b --- /dev/null +++ b/lib/genus/generated/types.pbenum.dart @@ -0,0 +1,7 @@ +/// +// Generated code. Do not modify. +// source: types.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + diff --git a/lib/genus/generated/types.pbjson.dart b/lib/genus/generated/types.pbjson.dart new file mode 100644 index 00000000..970a3c71 --- /dev/null +++ b/lib/genus/generated/types.pbjson.dart @@ -0,0 +1,148 @@ +/// +// Generated code. Do not modify. +// source: types.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,deprecated_member_use_from_same_package,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; +import 'dart:convert' as $convert; +import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use attestationDescriptor instead') +const Attestation$json = const { + '1': 'Attestation', + '2': const [ + const {'1': 'public_key', '3': 1, '4': 1, '5': 9, '10': 'publicKey'}, + const {'1': 'signature', '3': 2, '4': 1, '5': 9, '10': 'signature'}, + ], +}; + +/// Descriptor for `Attestation`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List attestationDescriptor = $convert.base64Decode('CgtBdHRlc3RhdGlvbhIdCgpwdWJsaWNfa2V5GAEgASgJUglwdWJsaWNLZXkSHAoJc2lnbmF0dXJlGAIgASgJUglzaWduYXR1cmU='); +@$core.Deprecated('Use simpleValueDescriptor instead') +const SimpleValue$json = const { + '1': 'SimpleValue', + '2': const [ + const {'1': 'quantity', '3': 1, '4': 1, '5': 9, '10': 'quantity'}, + ], +}; + +/// Descriptor for `SimpleValue`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List simpleValueDescriptor = $convert.base64Decode('CgtTaW1wbGVWYWx1ZRIaCghxdWFudGl0eRgBIAEoCVIIcXVhbnRpdHk='); +@$core.Deprecated('Use assetValueDescriptor instead') +const AssetValue$json = const { + '1': 'AssetValue', + '2': const [ + const {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'}, + const {'1': 'quantity', '3': 2, '4': 1, '5': 9, '10': 'quantity'}, + const {'1': 'security_root', '3': 3, '4': 1, '5': 9, '10': 'securityRoot'}, + const {'1': 'metadata', '3': 4, '4': 1, '5': 9, '10': 'metadata'}, + ], +}; + +/// Descriptor for `AssetValue`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List assetValueDescriptor = $convert.base64Decode('CgpBc3NldFZhbHVlEhIKBGNvZGUYASABKAlSBGNvZGUSGgoIcXVhbnRpdHkYAiABKAlSCHF1YW50aXR5EiMKDXNlY3VyaXR5X3Jvb3QYAyABKAlSDHNlY3VyaXR5Um9vdBIaCghtZXRhZGF0YRgEIAEoCVIIbWV0YWRhdGE='); +@$core.Deprecated('Use tokenValueDescriptor instead') +const TokenValue$json = const { + '1': 'TokenValue', + '2': const [ + const {'1': 'simple', '3': 1, '4': 1, '5': 11, '6': '.co.topl.genus.SimpleValue', '9': 0, '10': 'simple'}, + const {'1': 'asset', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.AssetValue', '9': 0, '10': 'asset'}, + ], + '8': const [ + const {'1': 'value'}, + ], +}; + +/// Descriptor for `TokenValue`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List tokenValueDescriptor = $convert.base64Decode('CgpUb2tlblZhbHVlEjQKBnNpbXBsZRgBIAEoCzIaLmNvLnRvcGwuZ2VudXMuU2ltcGxlVmFsdWVIAFIGc2ltcGxlEjEKBWFzc2V0GAIgASgLMhkuY28udG9wbC5nZW51cy5Bc3NldFZhbHVlSABSBWFzc2V0QgcKBXZhbHVl'); +@$core.Deprecated('Use tokenBoxDescriptor instead') +const TokenBox$json = const { + '1': 'TokenBox', + '2': const [ + const {'1': 'box_type', '3': 1, '4': 1, '5': 9, '10': 'boxType'}, + const {'1': 'id', '3': 2, '4': 1, '5': 9, '10': 'id'}, + const {'1': 'nonce', '3': 3, '4': 1, '5': 9, '10': 'nonce'}, + const {'1': 'evidence', '3': 4, '4': 1, '5': 9, '10': 'evidence'}, + const {'1': 'value', '3': 5, '4': 1, '5': 11, '6': '.co.topl.genus.TokenValue', '10': 'value'}, + ], +}; + +/// Descriptor for `TokenBox`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List tokenBoxDescriptor = $convert.base64Decode('CghUb2tlbkJveBIZCghib3hfdHlwZRgBIAEoCVIHYm94VHlwZRIOCgJpZBgCIAEoCVICaWQSFAoFbm9uY2UYAyABKAlSBW5vbmNlEhoKCGV2aWRlbmNlGAQgASgJUghldmlkZW5jZRIvCgV2YWx1ZRgFIAEoCzIZLmNvLnRvcGwuZ2VudXMuVG9rZW5WYWx1ZVIFdmFsdWU='); +@$core.Deprecated('Use inputBoxDescriptor instead') +const InputBox$json = const { + '1': 'InputBox', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'nonce', '3': 2, '4': 1, '5': 9, '10': 'nonce'}, + ], +}; + +/// Descriptor for `InputBox`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List inputBoxDescriptor = $convert.base64Decode('CghJbnB1dEJveBIYCgdhZGRyZXNzGAEgASgJUgdhZGRyZXNzEhQKBW5vbmNlGAIgASgJUgVub25jZQ=='); +@$core.Deprecated('Use outputBoxDescriptor instead') +const OutputBox$json = const { + '1': 'OutputBox', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'value', '3': 2, '4': 1, '5': 11, '6': '.co.topl.genus.TokenValue', '10': 'value'}, + ], +}; + +/// Descriptor for `OutputBox`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List outputBoxDescriptor = $convert.base64Decode('CglPdXRwdXRCb3gSGAoHYWRkcmVzcxgBIAEoCVIHYWRkcmVzcxIvCgV2YWx1ZRgCIAEoCzIZLmNvLnRvcGwuZ2VudXMuVG9rZW5WYWx1ZVIFdmFsdWU='); +@$core.Deprecated('Use blockHeightDescriptor instead') +const BlockHeight$json = const { + '1': 'BlockHeight', + '2': const [ + const {'1': 'value', '3': 1, '4': 1, '5': 4, '10': 'value'}, + ], +}; + +/// Descriptor for `BlockHeight`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blockHeightDescriptor = $convert.base64Decode('CgtCbG9ja0hlaWdodBIUCgV2YWx1ZRgBIAEoBFIFdmFsdWU='); +@$core.Deprecated('Use transactionDescriptor instead') +const Transaction$json = const { + '1': 'Transaction', + '2': const [ + const {'1': 'tx_type', '3': 1, '4': 1, '5': 9, '10': 'txType'}, + const {'1': 'timestamp', '3': 2, '4': 1, '5': 9, '10': 'timestamp'}, + const {'1': 'signatures', '3': 3, '4': 3, '5': 11, '6': '.co.topl.genus.Attestation', '10': 'signatures'}, + const {'1': 'new_boxes', '3': 4, '4': 3, '5': 11, '6': '.co.topl.genus.TokenBox', '10': 'newBoxes'}, + const {'1': 'data', '3': 5, '4': 1, '5': 9, '10': 'data'}, + const {'1': 'inputs', '3': 6, '4': 3, '5': 11, '6': '.co.topl.genus.InputBox', '10': 'inputs'}, + const {'1': 'minting', '3': 7, '4': 1, '5': 8, '10': 'minting'}, + const {'1': 'tx_id', '3': 8, '4': 1, '5': 9, '10': 'txId'}, + const {'1': 'boxes_to_remove', '3': 9, '4': 3, '5': 9, '10': 'boxesToRemove'}, + const {'1': 'fee', '3': 10, '4': 1, '5': 9, '10': 'fee'}, + const {'1': 'outputs', '3': 11, '4': 3, '5': 11, '6': '.co.topl.genus.OutputBox', '10': 'outputs'}, + const {'1': 'proposition_type', '3': 12, '4': 1, '5': 9, '10': 'propositionType'}, + const {'1': 'block_id', '3': 13, '4': 1, '5': 9, '10': 'blockId'}, + const {'1': 'block_height', '3': 14, '4': 1, '5': 4, '10': 'blockHeight'}, + ], +}; + +/// Descriptor for `Transaction`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List transactionDescriptor = $convert.base64Decode('CgtUcmFuc2FjdGlvbhIXCgd0eF90eXBlGAEgASgJUgZ0eFR5cGUSHAoJdGltZXN0YW1wGAIgASgJUgl0aW1lc3RhbXASOgoKc2lnbmF0dXJlcxgDIAMoCzIaLmNvLnRvcGwuZ2VudXMuQXR0ZXN0YXRpb25SCnNpZ25hdHVyZXMSNAoJbmV3X2JveGVzGAQgAygLMhcuY28udG9wbC5nZW51cy5Ub2tlbkJveFIIbmV3Qm94ZXMSEgoEZGF0YRgFIAEoCVIEZGF0YRIvCgZpbnB1dHMYBiADKAsyFy5jby50b3BsLmdlbnVzLklucHV0Qm94UgZpbnB1dHMSGAoHbWludGluZxgHIAEoCFIHbWludGluZxITCgV0eF9pZBgIIAEoCVIEdHhJZBImCg9ib3hlc190b19yZW1vdmUYCSADKAlSDWJveGVzVG9SZW1vdmUSEAoDZmVlGAogASgJUgNmZWUSMgoHb3V0cHV0cxgLIAMoCzIYLmNvLnRvcGwuZ2VudXMuT3V0cHV0Qm94UgdvdXRwdXRzEikKEHByb3Bvc2l0aW9uX3R5cGUYDCABKAlSD3Byb3Bvc2l0aW9uVHlwZRIZCghibG9ja19pZBgNIAEoCVIHYmxvY2tJZBIhCgxibG9ja19oZWlnaHQYDiABKARSC2Jsb2NrSGVpZ2h0'); +@$core.Deprecated('Use blockDescriptor instead') +const Block$json = const { + '1': 'Block', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, + const {'1': 'parent_id', '3': 2, '4': 1, '5': 9, '10': 'parentId'}, + const {'1': 'timestamp', '3': 3, '4': 1, '5': 9, '10': 'timestamp'}, + const {'1': 'generator', '3': 4, '4': 1, '5': 11, '6': '.co.topl.genus.TokenBox', '10': 'generator'}, + const {'1': 'public_key', '3': 5, '4': 1, '5': 9, '10': 'publicKey'}, + const {'1': 'signature', '3': 6, '4': 1, '5': 9, '10': 'signature'}, + const {'1': 'height', '3': 7, '4': 1, '5': 4, '10': 'height'}, + const {'1': 'difficulty', '3': 8, '4': 1, '5': 9, '10': 'difficulty'}, + const {'1': 'tx_root', '3': 9, '4': 1, '5': 9, '10': 'txRoot'}, + const {'1': 'bloom_filter', '3': 10, '4': 1, '5': 9, '10': 'bloomFilter'}, + const {'1': 'version', '3': 11, '4': 1, '5': 13, '10': 'version'}, + const {'1': 'num_transactions', '3': 12, '4': 1, '5': 13, '10': 'numTransactions'}, + ], +}; + +/// Descriptor for `Block`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List blockDescriptor = $convert.base64Decode('CgVCbG9jaxIOCgJpZBgBIAEoCVICaWQSGwoJcGFyZW50X2lkGAIgASgJUghwYXJlbnRJZBIcCgl0aW1lc3RhbXAYAyABKAlSCXRpbWVzdGFtcBI1CglnZW5lcmF0b3IYBCABKAsyFy5jby50b3BsLmdlbnVzLlRva2VuQm94UglnZW5lcmF0b3ISHQoKcHVibGljX2tleRgFIAEoCVIJcHVibGljS2V5EhwKCXNpZ25hdHVyZRgGIAEoCVIJc2lnbmF0dXJlEhYKBmhlaWdodBgHIAEoBFIGaGVpZ2h0Eh4KCmRpZmZpY3VsdHkYCCABKAlSCmRpZmZpY3VsdHkSFwoHdHhfcm9vdBgJIAEoCVIGdHhSb290EiEKDGJsb29tX2ZpbHRlchgKIAEoCVILYmxvb21GaWx0ZXISGAoHdmVyc2lvbhgLIAEoDVIHdmVyc2lvbhIpChBudW1fdHJhbnNhY3Rpb25zGAwgASgNUg9udW1UcmFuc2FjdGlvbnM='); diff --git a/lib/genus/protobuf/blocks_query.proto b/lib/genus/protobuf/blocks_query.proto new file mode 100644 index 00000000..ea30b0f5 --- /dev/null +++ b/lib/genus/protobuf/blocks_query.proto @@ -0,0 +1,84 @@ +syntax = "proto3"; + +import "filters.proto"; +import "types.proto"; +import "services_types.proto"; + +package co.topl.genus.services; + +service BlocksQuery { + rpc Query (QueryBlocksReq) returns (QueryBlocksRes); + + rpc QueryStream (BlocksQueryStreamReq) returns (stream BlocksQueryStreamRes); +} + +message BlockSorting { + message Height { + bool descending = 1; + } + + message Timestamp { + bool descending = 1; + } + + message Difficulty { + bool descending = 1; + } + + message NumberOfTransactions { + bool descending = 1; + } + + oneof sort_by { + Height height = 1; + Timestamp timestamp = 2; + Difficulty difficulty = 3; + NumberOfTransactions number_of_transactions = 4; + } +} + +message QueryBlocksReq { + BlockFilter filter = 1; + BlockSorting sorting = 2; + uint32 confirmation_depth = 3; + Paging paging_options = 4; +} + +message QueryBlocksRes { + message Success { + repeated Block blocks = 1; + } + + message Failure { + oneof reason { + string data_store_connection_error = 1; + string query_timeout = 2; + string invalid_query = 3; + } + } + + oneof result { + Success success = 1; + Failure failure = 2; + } +} + +message BlocksQueryStreamReq { + BlockFilter filter = 1; + BlockSorting sorting = 2; + uint32 confirmation_depth = 3; +} + +message BlocksQueryStreamRes { + message Failure { + oneof reason { + string data_store_connection_error = 1; + string invalid_query = 2; + } + } + + oneof result { + Block block = 1; + Failure failure = 2; + } +} diff --git a/lib/genus/protobuf/blocks_subscription.proto b/lib/genus/protobuf/blocks_subscription.proto new file mode 100644 index 00000000..640fdccb --- /dev/null +++ b/lib/genus/protobuf/blocks_subscription.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +import "filters.proto"; +import "types.proto"; + +package co.topl.genus.services; + +service BlocksSubscription { + rpc Create (CreateBlocksSubscriptionReq) returns (stream BlocksSubscriptionRes); +} + +message CreateBlocksSubscriptionReq { + BlockFilter filter = 1; + uint32 confirmation_depth = 2; + uint64 start_height = 3; +} + +message BlocksSubscriptionRes { + message Failure { + oneof reason { + string invalid_request = 1; + string data_connection_error = 2; + } + } + + oneof result { + Block success = 1; + Failure failure = 2; + } +} diff --git a/lib/genus/protobuf/filters.proto b/lib/genus/protobuf/filters.proto new file mode 100644 index 00000000..bc8798dc --- /dev/null +++ b/lib/genus/protobuf/filters.proto @@ -0,0 +1,102 @@ +syntax = "proto3"; + +package co.topl.genus; + +message StringSelection { + repeated string values = 1; +} + +message NumberRange { + oneof filter_type { + uint64 min = 1; + uint64 max = 2; + } +} + +message NumberSelection { + repeated uint64 values = 1; +} + +message BooleanSelection { + bool value = 1; +} + +message TokenValueFilter { + oneof filter_type { + StringSelection asset_code_selection = 1; + NumberRange quantity_range = 2; + StringSelection token_value_type_selection = 3; + } +} + +message TransactionFilter { + + message AndFilter { + repeated TransactionFilter filters = 1; + } + + message OrFilter { + repeated TransactionFilter filters = 1; + } + + message NotFilter { + TransactionFilter filter = 1; + } + + message AllFilter {} + + oneof filter_type { + StringSelection tx_type_selection = 1; + NumberRange timestamp_range = 2; + StringSelection input_address_selection = 3; + NumberSelection input_nonce_selection = 4; + StringSelection output_token_box_type_selection = 5; + TokenValueFilter output_token_value_filter = 6; + StringSelection output_address_selection = 7; + BooleanSelection minting_selection = 8; + StringSelection tx_id_selection = 9; + StringSelection boxes_to_remove_selection = 10; + NumberRange fee_range = 11; + StringSelection proposition_selection = 12; + StringSelection block_id_selection = 13; + NumberRange block_height_range = 14; + AndFilter and = 15; + OrFilter or = 16; + NotFilter not = 17; + AllFilter all = 18; + } +} + +message BlockFilter { + + message AndFilter { + repeated BlockFilter filters = 1; + } + + message OrFilter { + repeated BlockFilter filters = 1; + } + + message NotFilter { + BlockFilter filter = 1; + } + + message AllFilter {} + + oneof filter_type { + StringSelection id_selection = 1; + StringSelection parent_id_selection = 2; + NumberRange timestamp_range = 3; + TokenValueFilter generator_box_token_value_filter = 4; + StringSelection public_key_selection = 5; + NumberRange height_range = 6; + NumberSelection height_selection = 7; + NumberRange difficulty_range = 8; + NumberSelection version_selection = 9; + NumberRange num_transaction_range = 10; + AndFilter and = 15; + OrFilter or = 16; + NotFilter not = 17; + AllFilter all = 18; + } +} diff --git a/lib/genus/protobuf/package.proto b/lib/genus/protobuf/package.proto new file mode 100644 index 00000000..aeb852ae --- /dev/null +++ b/lib/genus/protobuf/package.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; + +import "scalapb/scalapb.proto"; + +package co.topl.genus; + +option (scalapb.options) = { + scope: PACKAGE + flat_package: false +}; diff --git a/lib/genus/protobuf/services_types.proto b/lib/genus/protobuf/services_types.proto new file mode 100644 index 00000000..566f3f7f --- /dev/null +++ b/lib/genus/protobuf/services_types.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; + +package co.topl.genus.services; + +message Paging { + uint32 page_number = 1; + uint32 page_size = 2; +} diff --git a/lib/genus/protobuf/transactions_query.proto b/lib/genus/protobuf/transactions_query.proto new file mode 100644 index 00000000..b3a8c257 --- /dev/null +++ b/lib/genus/protobuf/transactions_query.proto @@ -0,0 +1,79 @@ +syntax = "proto3"; + +import "filters.proto"; +import "types.proto"; +import "services_types.proto"; + +package co.topl.genus.services; + +service TransactionsQuery { + rpc Query (QueryTxsReq) returns (QueryTxsRes); + + rpc QueryStreamed (TxsQueryStreamReq) returns (stream TxsQueryStreamRes); +} + +message TransactionSorting { + message Height { + bool descending = 1; + } + + message Fee { + bool descending = 1; + } + + message Timestamp { + bool descending = 1; + } + + oneof sort_by { + Height height = 1; + Fee fee = 2; + Timestamp timestamp = 3; + } +} + +message QueryTxsReq { + TransactionFilter filter = 1; + TransactionSorting sorting = 2; + uint32 confirmation_depth = 3; + Paging paging_options = 4; +} + +message QueryTxsRes { + message Success { + repeated Transaction transactions = 1; + } + + message Failure { + oneof reason { + string data_store_connection_error = 1; + string query_timeout = 2; + string invalid_query = 3; + } + } + + oneof result { + Success success = 1; + Failure failure = 2; + } +} + +message TxsQueryStreamReq { + TransactionFilter filter = 1; + TransactionSorting sorting = 4; + uint32 confirmation_depth = 2; +} + +message TxsQueryStreamRes { + message Failure { + oneof reason { + string data_store_connection_error = 1; + string invalid_query = 2; + } + } + + oneof result { + Transaction tx = 1; + Failure failure = 2; + } +} diff --git a/lib/genus/protobuf/transactions_subscription.proto b/lib/genus/protobuf/transactions_subscription.proto new file mode 100644 index 00000000..aaf4cc1b --- /dev/null +++ b/lib/genus/protobuf/transactions_subscription.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +import "filters.proto"; +import "types.proto"; + +package co.topl.genus.services; + +service TransactionsSubscription { + rpc Create (CreateTxsSubscriptionReq) returns (stream TxsSubscriptionRes); +} + +message CreateTxsSubscriptionReq { + TransactionFilter filter = 1; + uint64 start_height = 2; + uint32 confirmation_depth = 3; +} + + +message TxsSubscriptionRes { + message Failure { + oneof reason { + string invalid_request = 1; + string data_connection_error = 2; + } + } + + oneof result { + Transaction success = 1; + Failure failure = 2; + } +} diff --git a/lib/genus/protobuf/types.proto b/lib/genus/protobuf/types.proto new file mode 100644 index 00000000..aebcfe75 --- /dev/null +++ b/lib/genus/protobuf/types.proto @@ -0,0 +1,80 @@ +syntax = "proto3"; + +package co.topl.genus; + +message Attestation { + string public_key = 1; + string signature = 2; +} + +message SimpleValue { + string quantity = 1; +} + +message AssetValue { + string code = 1; + string quantity = 2; + string security_root = 3; + string metadata = 4; +} + +message TokenValue { + oneof value { + SimpleValue simple = 1; + AssetValue asset = 2; + } +} + +message TokenBox { + string box_type = 1; + string id = 2; + string nonce = 3; + string evidence = 4; + TokenValue value = 5; +} + +message InputBox { + string address = 1; + string nonce = 2; +} + +message OutputBox { + string address = 1; + TokenValue value = 2; +} + +message BlockHeight { + uint64 value = 1; +} + +message Transaction { + string tx_type = 1; + string timestamp = 2; + repeated Attestation signatures = 3; + repeated TokenBox new_boxes = 4; + string data = 5; + repeated InputBox inputs = 6; + bool minting = 7; + string tx_id = 8; + repeated string boxes_to_remove = 9; + string fee = 10; + repeated OutputBox outputs = 11; + string proposition_type = 12; + string block_id = 13; + uint64 block_height = 14; +} + +message Block { + string id = 1; + string parent_id = 2; + string timestamp = 3; + TokenBox generator = 4; + string public_key = 5; + string signature = 6; + uint64 height = 7; + string difficulty = 8; + string tx_root = 9; + string bloom_filter = 10; + uint32 version = 11; + uint32 num_transactions = 12; +} diff --git a/lib/helpers/helper_functions.dart b/lib/helpers/helper_functions.dart new file mode 100644 index 00000000..7dbe08b9 --- /dev/null +++ b/lib/helpers/helper_functions.dart @@ -0,0 +1,62 @@ +import 'package:brambldart/credentials.dart'; +import 'package:brambldart/model.dart'; +import 'package:flutter/cupertino.dart'; +import '../containers/transaction_history_container.dart'; + +/// @dev Function fetches all transactions +/// @param context The current context which called the function within a widget +/// @parm toplAddress The address with which we are to fetch transactions for +/// @param networkId The network id which to fetch transactions from +/// @param transactionHistoryViewmodel The current instance of the TransactionHistoryViewmodel +/// @param currentPage The current page for which to fetch transactions for +/// @param filterSelectedItem The current filtered transaction type +/// @param filteredTransactions The list of existing filtered transactions +/// @returns List +Future> fetchTransactionHistory( + BuildContext context, + ToplAddress toplAddress, + int networkId, + TransactionHistoryViewmodel transactionHistoryViewmodel, + int currentPage, + String filterSelectedItem, + List filteredTransactions, +) async { + final List response = + await transactionHistoryViewmodel.getTransactions(pageNum: currentPage); + // Filters transactions by sent or received + if (filterSelectedItem != 'Transaction types') { + final List transactions = response; + for (var transaction in transactions) { + final String transactionReceiverAddress = + transaction.to.first.toJson()[0].toString(); + final Sender transactionSenderAddress = transaction.from![0]; + final myRibnAddress = toplAddress.toBase58(); + final wasMinted = transaction.minting == true; + if (filterSelectedItem == 'All') { + filteredTransactions.add(transaction); + } + if (filterSelectedItem == 'Received' && + transactionReceiverAddress == myRibnAddress && + !wasMinted) { + filteredTransactions.add(transaction); + } + if (filterSelectedItem == 'Sent' && + transactionSenderAddress.toString() == myRibnAddress.toString() && + !wasMinted && + transactionReceiverAddress != myRibnAddress) { + filteredTransactions.add(transaction); + } + } + return filteredTransactions; + } + return response; +} + +extension Unique on List { + List unique([Id Function(E element)? id, bool inplace = true]) { + final ids = {}; + final list = inplace ? this : List.from(this); + list.retainWhere((x) => ids.add(id != null ? id(x) : x as Id)); + return list; + } +} diff --git a/lib/main.dart b/lib/main.dart index 7d706114..5ff882ef 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,18 +11,23 @@ import 'package:ribn/constants/rules.dart'; import 'package:ribn/models/app_state.dart'; import 'package:ribn/models/internal_message.dart'; import 'package:ribn/platform/platform.dart'; +// import 'package:ribn/platform/web/wallet.dart'; +import 'package:ribn/presentation/authorize_and_sign/connect_dapp.dart'; +import 'package:ribn/presentation/authorize_and_sign/review_and_sign.dart'; import 'package:ribn/presentation/enable_page.dart'; import 'package:ribn/presentation/external_signing_page.dart'; import 'package:ribn/presentation/home/home_page.dart'; import 'package:ribn/presentation/login/login_page.dart'; import 'package:ribn/presentation/onboarding/create_wallet/welcome_page.dart'; +import 'package:ribn/presentation/transaction_history/service_locator/locator.dart'; import 'package:ribn/redux.dart'; import 'package:ribn/router/root_router.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Redux.initStore(initTestStore: false); - final AppViews currentAppView = await PlatformUtils.instance.getCurrentAppView(); + final AppViews currentAppView = + await PlatformUtils.instance.getCurrentAppView(); final bool needsOnboarding = Redux.store!.state.needsOnboarding(); // Open app in new tab if user needs onboarding if (currentAppView == AppViews.extension && needsOnboarding) { @@ -30,13 +35,19 @@ void main() async { // Initiate background connection if new window/tab opens up for dApp interaction. } else if (currentAppView == AppViews.extensionTab && !needsOnboarding) { await initBgConnection(Redux.store!); + // Wallet().setJSCallbackFunction(_test()); + // initialize(); } + setupLocator( + Redux.store!, + ); //@dev call this function to setup any singletons required by app runApp(RibnApp(Redux.store!)); } class RibnApp extends StatelessWidget { final RootRouter rootRouter = RootRouter(); final Store store; + RibnApp(this.store, {Key? key}) : super(key: key); @override @@ -49,7 +60,8 @@ class RibnApp extends StatelessWidget { title: 'Ribn', navigatorObservers: [Routes.routeObserver], onGenerateRoute: rootRouter.generateRoutes, - onGenerateInitialRoutes: (initialRoute) => onGenerateInitialRoute(initialRoute, store), + onGenerateInitialRoutes: (initialRoute) => + onGenerateInitialRoute(initialRoute, store), initialRoute: getInitialRoute(store), navigatorKey: Keys.navigatorKey, ), @@ -68,6 +80,19 @@ String getInitialRoute(Store store) { } else if (store.state.internalMessage?.method == InternalMethods.signTx) { return Routes.externalSigning; } + + //v2 + else if (store.state.internalMessage?.method == InternalMethods.authorize) { + return Routes.connectDApp; + } + else if (store.state.internalMessage?.method == InternalMethods.getBalance) { + return Routes.reviewAndSignDApp; + } + else if (store.state.internalMessage?.method == + InternalMethods.signTransaction) { + return Routes.reviewAndSignDApp; + } + return Routes.home; } @@ -101,10 +126,28 @@ List onGenerateInitialRoute(initialRoute, Store store) { case Routes.externalSigning: return [ MaterialPageRoute( - builder: (context) => ExternalSigningPage(store.state.internalMessage!), + builder: (context) => + ExternalSigningPage(store.state.internalMessage!), settings: const RouteSettings(name: Routes.externalSigning), ) ]; + + //v2 + case Routes.connectDApp: + return [ + MaterialPageRoute( + builder: (context) => ConnectDApp(store.state.internalMessage!), + settings: const RouteSettings(name: Routes.connectDApp), + ) + ]; + case Routes.reviewAndSignDApp: + return [ + MaterialPageRoute( + builder: (context) => ReviewAndSignDApp(store.state.internalMessage!), + settings: const RouteSettings(name: Routes.reviewAndSignDApp), + ) + ]; + case Routes.welcome: default: return [ @@ -125,11 +168,13 @@ Future initBgConnection(Store store) async { try { Messenger.instance.connect(); Messenger.instance.initMsgListener((String msgFromBgScript) { - final InternalMessage pendingRequest = InternalMessage.fromJson(msgFromBgScript); + final InternalMessage pendingRequest = + InternalMessage.fromJson(msgFromBgScript); store.dispatch(ReceivedInternalMsgAction(pendingRequest)); completer.complete(); }); - Messenger.instance.sendMsg(jsonEncode({'method': InternalMethods.checkPendingRequest})); + Messenger.instance + .sendMsg(jsonEncode({'method': InternalMethods.checkPendingRequest})); } catch (e) { completer.complete(); PlatformUtils.instance.closeWindow(); diff --git a/lib/middlewares/login_middleware.dart b/lib/middlewares/login_middleware.dart index b879ac09..b54af325 100644 --- a/lib/middlewares/login_middleware.dart +++ b/lib/middlewares/login_middleware.dart @@ -51,6 +51,10 @@ void Function(Store store, AttemptLoginAction action, NextDispatcher n } // initialize hd wallet on success next(InitializeHDWalletAction(toplExtendedPrivateKey: toplExtendedPrvKeyUint8List)); + + //Generate Initial addresses for every network + next(GenerateInitialAddressesAction()); + action.completer.complete(true); } catch (e) { action.completer.complete(false); diff --git a/lib/middlewares/transaction_middleware.dart b/lib/middlewares/transaction_middleware.dart index ed1c0ac4..46824963 100644 --- a/lib/middlewares/transaction_middleware.dart +++ b/lib/middlewares/transaction_middleware.dart @@ -124,14 +124,21 @@ void Function(Store store, SignExternalTxAction action, NextDispatcher ) { return (store, action, next) async { try { + final Map transferDetails = {}; + transferDetails['messageToSign'] = Base58Data.validated(action.pendingRequest.data!['messageToSign'] as String).value; + final TransactionReceipt transactionReceipt = TransactionReceipt.fromJson(action.pendingRequest.data!['rawTx']); + transferDetails['rawTx'] = transactionReceipt; + final List rawTxSenders = transactionReceipt.from!.map((e) => e.senderAddress.toBase58()).toList(); + final List sendersInWallet = List.from(store.state.keychainState.currentNetwork.addresses) ..retainWhere((addr) => rawTxSenders.contains(addr.toplAddress.toBase58())); + if (sendersInWallet.isEmpty) { final InternalMessage response = InternalMessage( method: InternalMethods.returnResponse, @@ -142,16 +149,19 @@ void Function(Store store, SignExternalTxAction action, NextDispatcher origin: action.pendingRequest.origin, ); next(SendInternalMsgAction(response)); + } else { final List credentials = keychainRepo.getCredentials( store.state.keychainState.hdWallet!, sendersInWallet, ); + final TransactionReceipt signedTx = await transactionRepo.signTx( store.state.keychainState.currentNetwork.client!, credentials, transferDetails, ); + final InternalMessage response = InternalMessage( method: InternalMethods.returnResponse, data: signedTx.toBroadcastJson(), @@ -160,6 +170,7 @@ void Function(Store store, SignExternalTxAction action, NextDispatcher id: action.pendingRequest.id, origin: action.pendingRequest.origin, ); + next(SendInternalMsgAction(response)); } } catch (e) { diff --git a/lib/models/app_state.dart b/lib/models/app_state.dart index 228b2764..654e9fde 100644 --- a/lib/models/app_state.dart +++ b/lib/models/app_state.dart @@ -123,7 +123,8 @@ class AppState { String toJson() => json.encode(toMap()); - factory AppState.fromJson(String source) => AppState.fromMap(json.decode(source)); + factory AppState.fromJson(String source) => + AppState.fromMap(json.decode(source)); @override String toString() { diff --git a/lib/models/internal_message.dart b/lib/models/internal_message.dart index 39251182..14b738d3 100644 --- a/lib/models/internal_message.dart +++ b/lib/models/internal_message.dart @@ -104,4 +104,16 @@ class InternalMethods { /// Used to sign tx through Ribn. static String get signTx => 'signTx'; + + /// Used to obtain wallet balance through Ribn. + static String get getBalance => 'getBalance'; + + /// Used to obtain wallet balance through Ribn. + static String get authorize => 'authorize'; + + /// Used to obtain wallet balance through Ribn. + static String get signTransaction => 'signTransaction'; + + /// Used to obtain wallet balance through Ribn. + static String get clearList => 'clearList'; } diff --git a/lib/models/raw_tx.dart b/lib/models/raw_tx.dart new file mode 100644 index 00000000..99f1df32 --- /dev/null +++ b/lib/models/raw_tx.dart @@ -0,0 +1,139 @@ +// To parse this JSON data, do +// +// final rawTx = rawTxFromJson(jsonString); + +import 'dart:convert'; + +RawTx rawTxFromJson(String str) => RawTx.fromJson(json.decode(str)); + +String rawTxToJson(RawTx data) => json.encode(data.toJson()); + +class RawTx { + RawTx({ + required this.txType, + required this.timestamp, + required this.newBoxes, + required this.data, + required this.from, + required this.minting, + required this.txId, + required this.boxesToRemove, + required this.fee, + required this.to, + required this.propositionType, + required this.messageToSign, + }); + + final String txType; + final int timestamp; + final List newBoxes; + final dynamic data; + final List> from; + final bool minting; + final String txId; + final List boxesToRemove; + final String fee; + final List> to; + final String propositionType; + final String messageToSign; + + factory RawTx.fromJson(Map json) => RawTx( + txType: json['txType'], + timestamp: json['timestamp'], + newBoxes: + List.from(json['newBoxes'].map((x) => NewBox.fromJson(x))), + data: json['data'], + from: List>.from( + json['from'].map((x) => List.from(x.map((x) => x))),), + minting: json['minting'], + txId: json['txId'], + boxesToRemove: List.from(json['boxesToRemove'].map((x) => x)), + fee: json['fee'], + to: List>.from( + json['to'].map((x) => List.from(x.map((x) => x))),), + propositionType: json['propositionType'], + messageToSign: json['messageToSign'], + ); + + Map toJson() => { + 'txType': txType, + 'timestamp': timestamp, + 'newBoxes': List.from(newBoxes.map((x) => x.toJson())), + 'data': data, + 'from': List.from( + from.map((x) => List.from(x.map((x) => x))),), + 'minting': minting, + 'txId': txId, + 'boxesToRemove': List.from(boxesToRemove.map((x) => x)), + 'fee': fee, + 'to': List.from( + to.map((x) => List.from(x.map((x) => x))),), + 'propositionType': propositionType, + 'messageToSign': messageToSign, + }; +} + +class NewBox { + NewBox({ + required this.nonce, + required this.id, + required this.evidence, + required this.type, + required this.value, + }); + + final String nonce; + final String id; + final String evidence; + final String type; + final Value value; + + factory NewBox.fromJson(Map json) => NewBox( + nonce: json['nonce'], + id: json['id'], + evidence: json['evidence'], + type: json['type'], + value: Value.fromJson(json['value']), + ); + + Map toJson() => { + 'nonce': nonce, + 'id': id, + 'evidence': evidence, + 'type': type, + 'value': value.toJson(), + }; +} + +class Value { + Value({ + required this.type, + required this.quantity, + required this.assetCode, + required this.metadata, + required this.securityRoot, + }); + + final String type; + final String quantity; + final String assetCode; + final dynamic metadata; + final String securityRoot; + + factory Value.fromJson(Map json) => Value( + type: json['type'], + quantity: json['quantity'], + assetCode: json['assetCode'], + metadata: json['metadata'], + securityRoot: + json['securityRoot'], + ); + + Map toJson() => { + 'type': type, + 'quantity': quantity, + 'assetCode': assetCode, + 'metadata': metadata, + 'securityRoot': securityRoot, + }; +} diff --git a/lib/models/transaction_history_entry.dart b/lib/models/transaction_history_entry.dart new file mode 100644 index 00000000..f1720b57 --- /dev/null +++ b/lib/models/transaction_history_entry.dart @@ -0,0 +1,55 @@ +class TransactionHistoryEntry { + final List to; + final List from; + final List newBoxes; + final List boxesToRemove; + final String id; + final String txType; + final String timestamp; + final Map signatures; + final dynamic data; + final bool minting; + final String txId; + final String fee; + final String propositionType; + final Map block; + final int v; + + const TransactionHistoryEntry({ + required this.to, + required this.from, + required this.newBoxes, + required this.boxesToRemove, + required this.id, + required this.txType, + required this.timestamp, + required this.signatures, + required this.data, + required this.minting, + required this.txId, + required this.fee, + required this.propositionType, + required this.block, + required this.v, + }); + + factory TransactionHistoryEntry.fromJson(Map json) { + return TransactionHistoryEntry( + to: json['to'], + from: json['from'], + newBoxes: json['newBoxes'], + boxesToRemove: json['boxesToRemove'], + id: json['_id'], + txType: json['txType'], + timestamp: json['timestamp'], + signatures: json['signatures'], + data: json['data'], + minting: json['minting'], + txId: json['txId'], + fee: json['fee'], + propositionType: json['propositionType'], + block: json['block'], + v: json['__v'], + ); + } +} diff --git a/lib/models/transfer_details.dart b/lib/models/transfer_details.dart index a95c75b7..9c44f1b3 100644 --- a/lib/models/transfer_details.dart +++ b/lib/models/transfer_details.dart @@ -1,12 +1,12 @@ -import 'dart:typed_data'; +import 'dart:typed_data'; import 'package:brambldart/brambldart.dart'; import 'package:flutter/foundation.dart'; - import 'package:ribn/constants/rules.dart'; import 'package:ribn/models/asset_details.dart'; import 'package:ribn/models/ribn_address.dart'; + /// A helper class to hold all the details for a transfer being initiated inside Ribn. class TransferDetails { final TransferType transferType; diff --git a/lib/platform/interfaces.dart b/lib/platform/interfaces.dart index 52733560..28874674 100644 --- a/lib/platform/interfaces.dart +++ b/lib/platform/interfaces.dart @@ -20,8 +20,29 @@ abstract class IPlatformUtils { void closeWindow(); void createLoginSessionAlarm(); + + /// Web only + Future clearDAppList(); + + /// Web only + Future getDAppList(); + + /// Web only + Future consoleLog(dynamic item); + + /// Web only + Future convertToFuture(Object jsPromise); } +abstract class IWallet { + /// Returns wallet balance + String getBalance(); + + /// Returns wallet address + String getAddress(); +} + + abstract class IMessenger { /// Send [msg] to the background script. void sendMsg(String msg); @@ -47,6 +68,7 @@ abstract class IPlatformLocalStorage { /// [key] should be the Base58Encoded Topl Main Key. Future saveKeyInSessionStorage(String key); + /// Mobile-only /// /// Save [key] in seucre storage for future retrievals. diff --git a/lib/platform/mobile/genus_config.dart b/lib/platform/mobile/genus_config.dart new file mode 100644 index 00000000..4ef180a8 --- /dev/null +++ b/lib/platform/mobile/genus_config.dart @@ -0,0 +1,12 @@ +import 'package:grpc/grpc.dart'; +import 'package:ribn/constants/network_utils.dart'; + +class PlatformGenusConfig { + static ClientChannel channel = ClientChannel( + NetworkUtils.privateIP, + port: 8089, + options: const ChannelOptions( + credentials: ChannelCredentials.insecure(), + ), + ); +} diff --git a/lib/platform/mobile/platform_mobile.dart b/lib/platform/mobile/platform_mobile.dart index 1bdee013..5690c124 100644 --- a/lib/platform/mobile/platform_mobile.dart +++ b/lib/platform/mobile/platform_mobile.dart @@ -1,3 +1,4 @@ +export 'package:ribn/platform/mobile/genus_config.dart'; export 'package:ribn/platform/mobile/messenger.dart'; export 'package:ribn/platform/mobile/storage.dart'; export 'package:ribn/platform/mobile/utils.dart'; diff --git a/lib/platform/mobile/utils.dart b/lib/platform/mobile/utils.dart index 8857b92c..50aac62d 100644 --- a/lib/platform/mobile/utils.dart +++ b/lib/platform/mobile/utils.dart @@ -40,4 +40,24 @@ class PlatformUtils implements IPlatformUtils { @override void createLoginSessionAlarm() => throw UnimplementedError(); + + @override + Future clearDAppList() { + throw UnimplementedError(); + } + + @override + Future getDAppList() { + throw UnimplementedError(); + } + @override + Future consoleLog(dynamic item) { + throw UnimplementedError(); + } + + @override + Future convertToFuture(Object jsPromise) { + throw UnimplementedError(); + } + } diff --git a/lib/platform/web/genus_config.dart b/lib/platform/web/genus_config.dart new file mode 100644 index 00000000..712e5346 --- /dev/null +++ b/lib/platform/web/genus_config.dart @@ -0,0 +1,7 @@ +import 'package:grpc/grpc_web.dart'; +import 'package:ribn/constants/network_utils.dart'; + + +class PlatformGenusConfig { + static GrpcWebClientChannel channel = GrpcWebClientChannel.xhr(Uri.parse('http://${NetworkUtils.privateIP}:8099')); +} diff --git a/lib/platform/web/platform_web.dart b/lib/platform/web/platform_web.dart index 5b9792bf..ee1bdfce 100644 --- a/lib/platform/web/platform_web.dart +++ b/lib/platform/web/platform_web.dart @@ -1,4 +1,6 @@ +export 'package:ribn/platform/web/genus_config.dart'; export 'package:ribn/platform/web/messenger.dart'; export 'package:ribn/platform/web/storage.dart'; export 'package:ribn/platform/web/utils.dart'; -export 'package:ribn/platform/web/worker_runner.dart'; +export 'package:ribn/platform/web/wallet.dart'; +export 'package:ribn/platform/web/worker_runner.dart'; \ No newline at end of file diff --git a/lib/platform/web/storage.dart b/lib/platform/web/storage.dart index 32b805d5..3a8c8d60 100644 --- a/lib/platform/web/storage.dart +++ b/lib/platform/web/storage.dart @@ -26,7 +26,8 @@ class PlatformLocalStorage implements IPlatformLocalStorage { static PlatformLocalStorage get instance => PlatformLocalStorage(); @override - Future saveState(String data) => promiseToFuture(persistToLocalStorage(data)); + Future saveState(String data) => + promiseToFuture(persistToLocalStorage(data)); @override Future getState() => promiseToFuture(getFromLocalStorage()); @@ -48,7 +49,8 @@ class PlatformLocalStorage implements IPlatformLocalStorage { @override Future getKeyFromSessionStorage() async { try { - final Map sessionStorage = jsonDecode(await promiseToFuture(getFromSessionStorage())); + final Map sessionStorage = + jsonDecode(await promiseToFuture(getFromSessionStorage())); return sessionStorage['toplKey']; } catch (e) { if (!Keys.isTestingEnvironment) { diff --git a/lib/platform/web/utils.dart b/lib/platform/web/utils.dart index d4195c30..acd73196 100644 --- a/lib/platform/web/utils.dart +++ b/lib/platform/web/utils.dart @@ -4,9 +4,9 @@ library ext_utils; import 'dart:html'; +import 'dart:js_util'; import 'package:js/js.dart'; -import 'package:js/js_util.dart'; import 'package:ribn/constants/rules.dart'; import 'package:ribn/platform/interfaces.dart'; @@ -17,6 +17,9 @@ external void downloadAsFile(String fileName, String text); external Future openAppInNewTab(); external Future getCurrentView(); external void createSessionAlarm(); +external Future deleteAllowList(); +external Future> retrieveAllowList(); +external Future logToConsole(dynamic item); class PlatformUtils implements IPlatformUtils { PlatformUtils._internal(); @@ -31,7 +34,8 @@ class PlatformUtils implements IPlatformUtils { String getCurrentAppVersion() => getAppVersion(); @override - void downloadFile(String fileName, String text) => downloadAsFile(fileName, text); + void downloadFile(String fileName, String text) => + downloadAsFile(fileName, text); @override void deleteActiveWallet() => deleteWallet(); @@ -57,4 +61,18 @@ class PlatformUtils implements IPlatformUtils { @override void createLoginSessionAlarm() => createSessionAlarm(); + + @override + Future clearDAppList() => deleteAllowList(); + + @override + Future> getDAppList() => retrieveAllowList(); + + @override + Future consoleLog(dynamic item) => logToConsole(item); + + @override + Future convertToFuture(Object jsPromise) { + return promiseToFuture(jsPromise); + } } diff --git a/lib/platform/web/wallet.dart b/lib/platform/web/wallet.dart new file mode 100644 index 00000000..825901e6 --- /dev/null +++ b/lib/platform/web/wallet.dart @@ -0,0 +1,48 @@ +@JS() +library ribn_wallet; + +import 'package:flutter_redux/flutter_redux.dart'; +import 'package:js/js.dart'; +import 'package:ribn/models/app_state.dart'; + +import '../../constants/keys.dart'; + +/// Allows assigning a function to be callable from `window.functionName()` +@JS() +external set getWalletBalance(String Function() f); + +@JS() +external set getWalletAddress(String Function() f); + +@JS() +external String getBalance(void Function() f); + +@JS() +external String getAddress(void Function() f); + + +void initialize() { + getWalletBalance = allowInterop(_getBalance); + getWalletAddress = allowInterop(_getAddress); + // JavaScript code may now call `functionName()` or `window.functionName()`. +} + + +String _getBalance() => + StoreProvider.of(Keys.navigatorKey.currentContext!) + .state + .keychainState + .currentNetwork + .getPolysInWallet() + .toString(); + +String _getAddress() => + StoreProvider.of(Keys.navigatorKey.currentContext!) + .state + .keychainState + .currentNetwork + .addresses + .first + .toplAddress + .toBase58(); + diff --git a/lib/presentation/asset_details/asset_detail_items/asset_code_details.dart b/lib/presentation/asset_details/asset_detail_items/asset_code_details.dart index b6819d63..052487c1 100644 --- a/lib/presentation/asset_details/asset_detail_items/asset_code_details.dart +++ b/lib/presentation/asset_details/asset_detail_items/asset_code_details.dart @@ -28,6 +28,7 @@ class AssetCodeDetails extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 4.0), child: CustomToolTip( + borderColor: Border.all(color: const Color(0xffE9E9E9)), toolTipIcon: Image.asset( RibnAssets.greyHelpBubble, width: 18, diff --git a/lib/presentation/asset_details/asset_detail_items/asset_code_short_details.dart b/lib/presentation/asset_details/asset_detail_items/asset_code_short_details.dart index 6bd599f3..84d3f914 100644 --- a/lib/presentation/asset_details/asset_detail_items/asset_code_short_details.dart +++ b/lib/presentation/asset_details/asset_detail_items/asset_code_short_details.dart @@ -27,6 +27,7 @@ class AssetCodeShortDetails extends StatelessWidget { padding: const EdgeInsets.only(left: 4.0), child: CustomToolTip( offsetPositionLeftValue: 120, + borderColor: Border.all(color: const Color(0xffE9E9E9)), toolTipIcon: Image.asset( RibnAssets.greyHelpBubble, width: 18, diff --git a/lib/presentation/asset_details/asset_detail_items/issuer_address_details.dart b/lib/presentation/asset_details/asset_detail_items/issuer_address_details.dart index 83fb6518..931284d9 100644 --- a/lib/presentation/asset_details/asset_detail_items/issuer_address_details.dart +++ b/lib/presentation/asset_details/asset_detail_items/issuer_address_details.dart @@ -25,6 +25,7 @@ class IssuerAddressDetails extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 4.0), child: CustomToolTip( + borderColor: Border.all(color: const Color(0xffE9E9E9)), toolTipIcon: Image.asset( RibnAssets.greyHelpBubble, width: 18, diff --git a/lib/presentation/asset_details/asset_details_page.dart b/lib/presentation/asset_details/asset_details_page.dart index 3417a351..7f6d40fd 100644 --- a/lib/presentation/asset_details/asset_details_page.dart +++ b/lib/presentation/asset_details/asset_details_page.dart @@ -17,7 +17,7 @@ import 'package:ribn/presentation/asset_details/asset_detail_items/asset_unit_de import 'package:ribn/presentation/asset_details/asset_detail_items/issuer_address_details.dart'; import 'package:ribn/widgets/custom_divider.dart'; import 'package:ribn_toolkit/constants/colors.dart'; -import 'package:ribn_toolkit/widgets/atoms/custom_page_title.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title.dart'; /// This page presents all details associated with an asset. /// @@ -112,7 +112,7 @@ class _AssetDetailsPageState extends State with RouteAware { body: SingleChildScrollView( child: Column( children: [ - const CustomPageTitle( + const CustomPageTextTitle( title: Strings.assetDetails, hideBackArrow: true, ), @@ -121,9 +121,17 @@ class _AssetDetailsPageState extends State with RouteAware { padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), width: 309, decoration: BoxDecoration( - borderRadius: const BorderRadius.all(Radius.circular(4.7)), + borderRadius: const BorderRadius.all(Radius.circular(11.6)), color: RibnColors.whiteBackground, border: Border.all(color: RibnColors.lightGrey, width: 1), + boxShadow: const [ + BoxShadow( + color: RibnColors.greyShadow, + spreadRadius: 0, + blurRadius: 37.5, + offset: Offset(0, -6), + ), + ], ), child: Column( children: [ diff --git a/lib/presentation/authorize_and_sign/connect_dapp.dart b/lib/presentation/authorize_and_sign/connect_dapp.dart new file mode 100644 index 00000000..fdf62786 --- /dev/null +++ b/lib/presentation/authorize_and_sign/connect_dapp.dart @@ -0,0 +1,283 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_redux/flutter_redux.dart'; +import 'package:ribn/actions/internal_message_actions.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn/models/app_state.dart'; +import 'package:ribn/presentation/authorize_and_sign/input_dropdown_wrapper.dart'; +import 'package:ribn/presentation/transfers/bottom_review_action.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; +import 'package:ribn_toolkit/widgets/atoms/large_button.dart'; +import 'package:ribn_toolkit/widgets/molecules/checkbox_wrappable_text.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title_with_leading_child.dart'; + +import '../../models/internal_message.dart'; + +class ConnectDApp extends StatefulWidget { + final InternalMessage request; + + const ConnectDApp( + this.request, { + Key? key, + }) : super(key: key); + + @override + _ConnectDAppState createState() => _ConnectDAppState(); +} + +class _ConnectDAppState extends State { + // final Map mockDAppDetails = { + // 'logo': RibnAssets.connectDApp, + // 'name': 'GreenSwap', + // 'link': 'https://greenswap.com', + // }; + + bool authChecked = false; + + String mockFaviconUrl = ''; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: RibnColors.background, + body: SingleChildScrollView( + child: Column( + children: [ + const CustomPageTextTitleWithLeadingChild( + title: Strings.connect, + child: InputDropdownWrapper(), + ), + const SizedBox(height: 20), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 13), + child: Container( + padding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + width: 360, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(11.6)), + color: RibnColors.whiteBackground, + border: Border.all(color: RibnColors.lightGrey, width: 1), + boxShadow: const [ + BoxShadow( + color: RibnColors.greyShadow, + spreadRadius: 0, + blurRadius: 37.5, + offset: Offset(0, -6), + ), + ], + ), + child: Column( + children: [ + Row( + children: [ + const Text( + 'Allow', + style: TextStyle( + fontFamily: 'DM Sans', + fontSize: 11, + height: 3, + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB( + 8, + 8, + 8, + 8, + ), + child: mockFaviconUrl == '' + ? Image.asset( + RibnAssets.undefinedIcon, + width: 25, + ) + : Image.network( + mockFaviconUrl, + width: 25, + ), + ), + Text( + '${widget.request.data!["name"] ?? widget.request.origin} to access the following:', + style: const TextStyle( + fontFamily: 'DM Sans', + fontSize: 11, + height: 3, + ), + ), + ], + ), + const SizedBox( + height: 12, + ), + Container( + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(11.6)), + color: RibnColors.mediumGrey, + ), + padding: const EdgeInsets.fromLTRB(20, 15, 20, 15), + child: CheckboxWrappableText( + fillColor: Colors.transparent, + checkColor: RibnColors.darkGreen, + borderColor: RibnColors.darkGreen, + value: authChecked, + onChanged: (bool? val) { + setState(() { + authChecked = val!; + }); + }, + label: RichText( + key: GlobalKey(), + text: TextSpan( + children: [ + TextSpan( + text: 'I trust ', + style: RibnToolkitTextStyles.h3.copyWith( + color: RibnColors.defaultText, + fontSize: 11, + height: 2, + ), + ), + TextSpan( + text: widget.request.origin, + style: RibnToolkitTextStyles.h3.copyWith( + color: RibnColors.defaultText, + fontSize: 11, + fontWeight: FontWeight.w500, + height: 2, + ), + ), + TextSpan( + text: ' and am', + style: RibnToolkitTextStyles.h3.copyWith( + color: RibnColors.defaultText, + fontSize: 11, + height: 2, + ), + ), + TextSpan( + text: Strings.connectDApp, + style: RibnToolkitTextStyles.h3.copyWith( + color: RibnColors.defaultText, + fontSize: 11, + height: 2, + ), + ), + ], + ), + ), + ), + ), + const SizedBox( + height: 12, + ), + ], + ), + ), + ), + ], + ), + ), + bottomNavigationBar: BottomReviewAction( + maxHeight: 174, + children: kIsWeb + ? Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + renderCancelButton(144), + const SizedBox( + width: 20, + ), + renderConfirmButton(144), + ], + ) + : Column( + children: [ + const SizedBox( + height: 15, + ), + renderConfirmButton(double.infinity), + const SizedBox( + height: 15, + ), + renderCancelButton(double.infinity), + ], + ), + ), + ); + } + + LargeButton renderCancelButton(buttonWidth) { + return LargeButton( + buttonWidth: buttonWidth, + buttonHeight: 43, + buttonChild: Text( + Strings.cancel, + style: RibnToolkitTextStyles.btnLarge.copyWith( + color: RibnColors.ghostButtonText, + ), + ), + backgroundColor: Colors.transparent, + hoverColor: Colors.transparent, + dropShadowColor: Colors.transparent, + borderColor: RibnColors.ghostButtonText, + onPressed: () { + // Redirect to TBC to go here + sendResponse(context, false); + }, + ); + } + + LargeButton renderConfirmButton(buttonWidth) { + return LargeButton( + buttonWidth: buttonWidth, + buttonHeight: 43, + buttonChild: Text( + Strings.confirm, + style: RibnToolkitTextStyles.btnLarge.copyWith( + color: RibnColors.lightGreyTitle, + ), + ), + onPressed: () { + // Confirm auth action will go here + sendResponse(context, true); + }, + backgroundColor: RibnColors.primary, + dropShadowColor: RibnColors.whiteButtonShadow, + disabled: !authChecked, + ); + } + + void sendResponse(BuildContext context, bool accept) { + late final InternalMessage response; + + if (!accept) { + response = widget.request.copyWith( + method: InternalMethods.returnResponse, + sender: InternalMessage.defaultSender, + data: { + 'enabled': accept, + }, + ); + } else { + response = widget.request.copyWith( + method: InternalMethods.returnResponse, + sender: InternalMessage.defaultSender, + data: { + 'enabled': accept, + 'walletAddress': StoreProvider.of(context) + .state + .keychainState + .currentNetwork + .addresses + .first + .toplAddress + .toBase58() + }, + ); + } + StoreProvider.of(context) + .dispatch(SendInternalMsgAction(response)); + } +} diff --git a/lib/presentation/authorize_and_sign/input_dropdown_wrapper.dart b/lib/presentation/authorize_and_sign/input_dropdown_wrapper.dart new file mode 100644 index 00000000..6e9515f1 --- /dev/null +++ b/lib/presentation/authorize_and_sign/input_dropdown_wrapper.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/containers/ribn_app_bar_container.dart'; +import 'package:ribn_toolkit/widgets/molecules/input_dropdown.dart'; +// import 'package:ribn_toolkit/widgets/organisms/ribn_app_bar.dart'; + +/// Builds a wrapper around the AppBar from ToplToolkit to provide ViewModel & AppBarContainer +class InputDropdownWrapper extends StatefulWidget implements PreferredSizeWidget { + const InputDropdownWrapper({ + Key? key, + }) : preferredSize = const Size.fromHeight(40), + super(key: key); + + @override + final Size preferredSize; + + @override + State createState() => _InputDropdownWrapperState(); +} + +class _InputDropdownWrapperState extends State { + @override + Widget build(BuildContext context) { + return RibnAppBarContainer( + builder: (BuildContext context, RibnAppBarViewModel vm) => InputDropdown( + selectedItem: vm.currentNetworkName, + items: vm.networks, + onChange: (string) {}, + chevronIconLink: RibnAssets.chevronDown, + enabled: false, + ), + ); + } +} diff --git a/lib/presentation/authorize_and_sign/loading_dapp.dart b/lib/presentation/authorize_and_sign/loading_dapp.dart new file mode 100644 index 00000000..b34671ae --- /dev/null +++ b/lib/presentation/authorize_and_sign/loading_dapp.dart @@ -0,0 +1,132 @@ + +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter_redux/flutter_redux.dart'; +import 'package:ribn/actions/transaction_actions.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn/models/app_state.dart'; +import 'package:ribn/models/internal_message.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/widgets/molecules/animated_circle_step_loader.dart'; + +class LoadingDApp extends StatefulWidget { + const LoadingDApp({Key? key, required this.response}) : super(key: key); + + final InternalMessage response; + + @override + State createState() => _LoadingDAppState(); +} + +class _LoadingDAppState extends State { + + + @override + void initState() { + super.initState(); + Timer(const Duration(seconds: 10), () { + StoreProvider.of(context) + .dispatch(SignExternalTxAction(widget.response)); + Navigator.of(context).pop(); + }); + + } + + + @override + Widget build(BuildContext context) { + const String mockFaviconUrl = ''; + + return Scaffold( + body: Container( + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [RibnColors.tertiary, RibnColors.primaryOffColor], + ), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + Strings.connecting, + style: TextStyle( + height: 2, + fontFamily: 'DM Sans', + color: Colors.white, + fontSize: 19, + fontWeight: FontWeight.w500, + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB( + 8, + 8, + 8, + 8, + ), + child: Container( + height: 61, + width: 61, + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(50)), + color: RibnColors.transparentGrey, + ), + child: mockFaviconUrl == '' + ? Image.asset( + RibnAssets.undefinedIcon, + width: 25, + ) + : Image.network( + mockFaviconUrl, + width: 25, + ), + ), + ), + AnimatedCircleStepLoader( + stepLabels: const { + 0: '', + 1: '', + 2: '', + 3: '', + 4: '', + 5: '', + }, + showStepLoader: () {}, + activeCircleColor: RibnColors.vibrantGreen, + inactiveCircleColor: RibnColors.transparentGrey, + activeCircleRadius: 4, + inactiveCircleRadius: 2, + dotPadding: 6, + hideTitle: true, + renderCenterIcon: true, + ), + Padding( + padding: const EdgeInsets.fromLTRB( + 8, + 8, + 8, + 8, + ), + child: SizedBox( + height: 61, + width: 61, + child: Image.asset(RibnAssets.newCircleRibnLogo), + ), + ), + ], + ), + ], + ), + ), + ); + } + +} diff --git a/lib/presentation/authorize_and_sign/review_and_sign.dart b/lib/presentation/authorize_and_sign/review_and_sign.dart new file mode 100644 index 00000000..b382b250 --- /dev/null +++ b/lib/presentation/authorize_and_sign/review_and_sign.dart @@ -0,0 +1,318 @@ +import 'dart:convert'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_redux/flutter_redux.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn/models/raw_tx.dart'; +import 'package:ribn/presentation/authorize_and_sign/input_dropdown_wrapper.dart'; +import 'package:ribn/presentation/authorize_and_sign/transaction_row_details.dart'; +import 'package:ribn/presentation/transfers/bottom_review_action.dart'; +import 'package:ribn/widgets/fee_info.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; +import 'package:ribn_toolkit/widgets/atoms/animated_expand_button.dart'; +import 'package:ribn_toolkit/widgets/atoms/custom_copy_button.dart'; +import 'package:ribn_toolkit/widgets/atoms/large_button.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title_with_leading_child.dart'; + +import '../../actions/internal_message_actions.dart'; +import '../../constants/routes.dart'; +import '../../models/app_state.dart'; +import '../../models/internal_message.dart'; + +class ReviewAndSignDApp extends StatefulWidget { + final InternalMessage request; + + const ReviewAndSignDApp( + this.request, { + Key? key, + }) : super(key: key); + + @override + _ReviewAndSignDAppState createState() => _ReviewAndSignDAppState(); +} + +class _ReviewAndSignDAppState extends State { + late final Map transactionDetails; + late final String walletAddress; + late final RawTx transaction; + bool isExpanded = false; + + final TextStyle defaultTextStyle = const TextStyle( + fontFamily: 'DM Sans', + fontSize: 11, + color: RibnColors.defaultText, + ); + + @override + void initState() { + transactionDetails = widget.request.data!['rawTx']; + transaction = RawTx.fromJson(widget.request.data!['rawTx']); + + walletAddress = StoreProvider.of(context) + .state + .keychainState + .currentNetwork + .addresses + .first + .toplAddress + .toBase58(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: RibnColors.background, + body: SingleChildScrollView( + child: Column( + children: [ + const CustomPageTextTitleWithLeadingChild( + title: Strings.review, + child: InputDropdownWrapper(), + ), + const SizedBox(height: 20), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 13), + child: AnimatedContainer( + curve: Curves.easeInOut, + duration: const Duration(seconds: 1), + clipBehavior: Clip.hardEdge, + padding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + width: 360, + height: isExpanded ? 388 : 228, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(11.6)), + color: RibnColors.whiteBackground, + border: Border.all(color: RibnColors.lightGrey, width: 1), + boxShadow: const [ + BoxShadow( + color: RibnColors.greyShadow, + spreadRadius: 0, + blurRadius: 37.5, + offset: Offset(0, -6), + ), + ], + ), + child: Wrap( + children: [ + Wrap( + children: [ + Text( + Strings.executeTransaction, + style: defaultTextStyle.copyWith(height: 3), + ), + Text( + // '${mockDAppDetails['link']}', + widget.request.origin, + style: defaultTextStyle.copyWith( + fontWeight: FontWeight.w500, + ), + ), + ], + ), + ListView.builder( + padding: const EdgeInsets.only(top: 12), + reverse: true, + physics: const NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + itemCount: transactionDetails['to'].length, + shrinkWrap: true, + itemBuilder: (context, index) { + return TransactionRowDetails( + quantity: transactionDetails['to'][index][1] + ['quantity'], + wasReceivedToMyWallet: transactionDetails['to'][index] + [0] == + walletAddress, + isPolyTransfer: transactionDetails['to'][index][1] + ['type'] == + 'Simple', + ); + }, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + AnimatedExpandButton( + backgroundColor: Colors.transparent, + title: 'View txn details', + onPressed: () { + setState(() { + isExpanded = !isExpanded; + }); + }, + height: 24, + width: 139, + ), + ], + ), + const SizedBox( + height: 10, + width: 20, + ), + Container( + height: 137, + width: double.infinity, + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(11.6)), + color: RibnColors.mediumGrey, + ), + child: Stack( + children: [ + MediaQuery.removePadding( + context: context, + removeTop: true, + removeBottom: true, + child: RawScrollbar( + shape: const StadiumBorder(), + mainAxisMargin: 10, + crossAxisMargin: 8, + thumbVisibility: true, + thumbColor: RibnColors.primary, + thickness: 10, + child: ScrollConfiguration( + behavior: ScrollConfiguration.of(context) + .copyWith(scrollbars: false), + child: ListView.builder( + shrinkWrap: true, + primary: false, + padding: const EdgeInsets.all(10), + itemCount: 1, + itemBuilder: (buildContext, index) { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: SelectableText( + // mockDAppTransactionJson, + getPrettyJson(widget.request.data), + ), + ); + }, + ), + ), + ), + ), + Positioned( + right: 10, + bottom: 10, + child: Container( + alignment: Alignment.center, + width: 27.0, + height: 27.0, + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: + BorderRadius.all(Radius.circular(20)), + ), + child: CustomCopyButton( + textToBeCopied: + getPrettyJson(widget.request.data), + bubbleText: 'Copied!', + icon: Image.asset( + RibnAssets.copyIconAlternate, + width: 12, + ), + ), + ), + ), + ], + ), + ), + ], + ), + ), + ), + const SizedBox(height: 20) + ], + ), + ), + bottomNavigationBar: BottomReviewAction( + maxHeight: kIsWeb ? 127 : 202, + children: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + FeeInfo(fee: int.parse(transactionDetails['fee'])), + const SizedBox(height: 15), + kIsWeb + ? Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + renderCancelButton(144), + const SizedBox(width: 20), + renderConfirmButton(144), + ], + ) + : Column( + children: [ + renderConfirmButton(double.infinity), + const SizedBox(height: 15), + ], + ), + ], + ), + ), + ); + } + + LargeButton renderCancelButton(buttonWidth) { + return LargeButton( + buttonWidth: buttonWidth, + buttonHeight: 43, + buttonChild: Text( + Strings.cancel, + style: RibnToolkitTextStyles.btnLarge.copyWith( + color: RibnColors.ghostButtonText, + ), + ), + backgroundColor: Colors.transparent, + hoverColor: Colors.transparent, + dropShadowColor: Colors.transparent, + borderColor: RibnColors.ghostButtonText, + onPressed: () { + final InternalMessage response = widget.request.copyWith( + method: InternalMethods.returnResponse, + sender: InternalMessage.defaultSender, + data: { + 'message': 'Request denied', + }, + ); + + StoreProvider.of(context) + .dispatch(SendInternalMsgAction(response)); + }, + ); + } + + LargeButton renderConfirmButton(buttonWidth) { + return LargeButton( + buttonWidth: buttonWidth, + buttonHeight: 43, + buttonChild: Text( + Strings.confirm, + style: RibnToolkitTextStyles.btnLarge.copyWith( + color: Colors.white, + ), + ), + onPressed: () { + Navigator.pushNamed( + context, + Routes.loadingDApp, + arguments: widget.request, + ); + }, + backgroundColor: RibnColors.primary, + dropShadowColor: RibnColors.whiteButtonShadow, + ); + } + + String getPrettyJson(dynamic json) { + final spaces = ' ' * 4; + final encoder = JsonEncoder.withIndent(spaces); + return encoder.convert(json); + } +} diff --git a/lib/presentation/authorize_and_sign/transaction_row_details.dart b/lib/presentation/authorize_and_sign/transaction_row_details.dart new file mode 100644 index 00000000..01cb73fe --- /dev/null +++ b/lib/presentation/authorize_and_sign/transaction_row_details.dart @@ -0,0 +1,78 @@ +import 'package:flutter/material.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; + +class TransactionRowDetails extends StatelessWidget { + const TransactionRowDetails({ + required this.quantity, + required this.wasReceivedToMyWallet, + required this.isPolyTransfer, + Key? key, + }) : super(key: key); + + final String quantity; + final bool wasReceivedToMyWallet; + final bool isPolyTransfer; + + @override + Widget build(BuildContext context) { + const TextStyle defaultTextStyle = TextStyle( + fontFamily: 'DM Sans', + fontSize: 11, + color: RibnColors.defaultText, + ); + + Widget _buildReviewItem({required String itemLabel, required Widget item}) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + itemLabel, + style: RibnToolkitTextStyles.h4, + ), + const SizedBox(height: 6), + item, + const Center( + child: Padding( + padding: EdgeInsets.symmetric(vertical: 8.0), + ), + ) + ], + ); + } + + Widget buildSendDetails() { + return _buildReviewItem( + itemLabel: wasReceivedToMyWallet ? Strings.receive : Strings.send, + item: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + constraints: const BoxConstraints(maxWidth: 60), + child: Text( + quantity, + style: defaultTextStyle, + overflow: TextOverflow.ellipsis, + ), + ), + const SizedBox(width: 5), + Row( + children: [ + Image.asset( + isPolyTransfer ? RibnAssets.polyIconCircle : RibnAssets.undefinedIcon, + width: 23, + ), + const SizedBox(width: 5), + Text(isPolyTransfer ? 'POLY' : 'OTHER ASSET', style: defaultTextStyle), + ], + ) + ], + ), + ); + } + + return buildSendDetails(); + } +} diff --git a/lib/presentation/empty_state_screen.dart b/lib/presentation/empty_state_screen.dart index 75e56406..aad9f08c 100644 --- a/lib/presentation/empty_state_screen.dart +++ b/lib/presentation/empty_state_screen.dart @@ -12,6 +12,8 @@ class EmptyStateScreen extends StatelessWidget { final void Function() buttonOneAction; final String buttonTwoText; final void Function() buttonTwoAction; + final dynamic mobileHeight; + final dynamic desktopHeight; const EmptyStateScreen({ required this.icon, @@ -21,6 +23,8 @@ class EmptyStateScreen extends StatelessWidget { required this.buttonOneAction, required this.buttonTwoText, required this.buttonTwoAction, + required this.mobileHeight, + required this.desktopHeight, Key? key, }) : super(key: key); @@ -30,8 +34,6 @@ class EmptyStateScreen extends StatelessWidget { @override Widget build(BuildContext context) { final double width = MediaQuery.of(context).size.width; - final double height = MediaQuery.of(context).size.height; - const int dynamicWidthValue = kIsWeb ? 300 : 380; return Padding( padding: const EdgeInsets.only(top: 18, left: 24, right: 24), @@ -42,16 +44,16 @@ class EmptyStateScreen extends StatelessWidget { boxShadow: [BoxShadow(color: RibnColors.paleGreen.withOpacity(1), blurRadius: 8, spreadRadius: 8)], ), width: width - 20, - height: height - dynamicWidthValue, + height: kIsWeb ? desktopHeight : mobileHeight, child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - const SizedBox(height: 15), + const SizedBox(height: 8), Image.asset( icon, width: kIsWeb ? 53 : 63, ), - const SizedBox(height: 15), + const SizedBox(height: 8), SizedBox( width: 275, height: 64, @@ -67,7 +69,7 @@ class EmptyStateScreen extends StatelessWidget { ), SizedBox( width: 275, - height: 73, + height: 60, child: body, ), Wrap( @@ -103,7 +105,7 @@ class EmptyStateScreen extends StatelessWidget { ), ], ), - const SizedBox(height: 15), + const SizedBox(height: 8), ], ), ), diff --git a/lib/presentation/enable_page.dart b/lib/presentation/enable_page.dart index cb435933..7b0d9808 100644 --- a/lib/presentation/enable_page.dart +++ b/lib/presentation/enable_page.dart @@ -33,13 +33,26 @@ class EnablePage extends StatelessWidget { } void sendResponse(BuildContext context, bool accept) { - final InternalMessage response = pendingRequest.copyWith( - method: InternalMethods.returnResponse, - sender: InternalMessage.defaultSender, - data: { - 'enabled': accept, - }, - ); + late final InternalMessage response; + + if (!accept) { + response = pendingRequest.copyWith( + method: InternalMethods.returnResponse, + sender: InternalMessage.defaultSender, + data: { + 'enabled': accept, + }, + ); + } else { + response = pendingRequest.copyWith( + method: InternalMethods.returnResponse, + sender: InternalMessage.defaultSender, + data: { + 'enabled': accept, + 'walletAddress': StoreProvider.of(context).state.keychainState.currentNetwork.addresses.first.toplAddress.toBase58() + }, + ); + } StoreProvider.of(context).dispatch(SendInternalMsgAction(response)); } } diff --git a/lib/presentation/external_signing_page.dart b/lib/presentation/external_signing_page.dart index 9ebee001..bd2f4aaf 100644 --- a/lib/presentation/external_signing_page.dart +++ b/lib/presentation/external_signing_page.dart @@ -24,6 +24,12 @@ class _ExternalSigningPageState extends State { return Scaffold( body: Column( children: [ + Text(widget.request.id), + Text(widget.request.method), + Text(widget.request.origin), + Text(widget.request.sender), + Text(widget.request.target), + Text(widget.request.data.toString()), Text(widget.request.method), Text(widget.request.data.toString()), MaterialButton( diff --git a/lib/presentation/home/home_page.dart b/lib/presentation/home/home_page.dart index 010e5c62..920e1939 100644 --- a/lib/presentation/home/home_page.dart +++ b/lib/presentation/home/home_page.dart @@ -3,6 +3,7 @@ import 'package:ribn/constants/assets.dart'; import 'package:ribn/constants/keys.dart'; import 'package:ribn/constants/routes.dart'; import 'package:ribn/presentation/home/wallet_balance_page.dart'; +import 'package:ribn/presentation/transaction_history/transaction_history_page.dart'; import 'package:ribn/presentation/transfers/mint_input_page.dart'; import 'package:ribn/widgets/ribn_app_bar_wapper.dart'; import 'package:ribn_toolkit/constants/colors.dart'; @@ -22,14 +23,17 @@ class _HomePageState extends State with TickerProviderStateMixin { final List _pages = [ const WalletBalancePage(), const MintInputPage(), + const TxHistoryPage(), ]; final List _pageIcons = [ Image.asset(RibnAssets.walletGrey), - Image.asset(RibnAssets.plusGrey), + Image.asset(RibnAssets.circlePlus), + Image.asset(RibnAssets.clockGrey) ]; final List _activePageIcons = [ Image.asset(RibnAssets.walletBlue), - Image.asset(RibnAssets.plusBlue), + Image.asset(RibnAssets.circlePlus), + Image.asset(RibnAssets.clockBlue) ]; int _currPage = 0; diff --git a/lib/presentation/home/wallet_balance_page.dart b/lib/presentation/home/wallet_balance_page.dart index 4e1ce99d..5d6b23d2 100644 --- a/lib/presentation/home/wallet_balance_page.dart +++ b/lib/presentation/home/wallet_balance_page.dart @@ -16,7 +16,7 @@ import 'package:ribn_toolkit/widgets/atoms/large_button.dart'; import 'package:ribn_toolkit/widgets/molecules/asset_card.dart'; import 'package:ribn_toolkit/widgets/molecules/custom_tooltip.dart'; import 'package:ribn_toolkit/widgets/molecules/wave_container.dart'; -import 'package:url_launcher/url_launcher.dart'; +// import 'package:url_launcher/url_launcher.dart'; /// One of the 3 main pages on the home screen. /// @@ -107,11 +107,12 @@ class _WalletBalancePageState extends State { /// Builds the top-half container on the balance page. /// Displays the balance in Polys and send/receive buttons. Widget _buildPolyContainer(WalletBalanceViewModel vm) { - final Uri url = Uri.parse(tooltipUrl); + // final Uri url = Uri.parse(tooltipUrl); CustomToolTip renderTooltip() { final bool hasPolys = vm.polyBalance > 0; return CustomToolTip( + borderColor: Border.all(color: const Color(0xffE9E9E9)), offsetPositionLeftValue: 180, toolTipIcon: Image.asset( RibnAssets.circleInfo, @@ -126,7 +127,11 @@ class _WalletBalancePageState extends State { ), WidgetSpan( child: GestureDetector( - onTap: () async => await launchUrl(url), + // onTap: () async => await launchUrl(url), + // Temporary add redirect to DApp flow + onTap: () => Keys.navigatorKey.currentState?.pushNamed( + Routes.loadingDApp, + ), child: Row( children: [ Text( @@ -224,6 +229,8 @@ class _WalletBalancePageState extends State { ), buttonTwoText: 'Share', buttonTwoAction: () async => await showReceivingAddress(), + mobileHeight: MediaQuery.of(context).size.height * 0.5, + desktopHeight: 258, ); } @@ -246,6 +253,7 @@ class _WalletBalancePageState extends State { physics: const NeverScrollableScrollPhysics(), itemCount: vm.assets.length, itemBuilder: (context, idx) { + // Here's how we get each individual asset final AssetAmount asset = vm.assets[idx]; return Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), diff --git a/lib/presentation/login/login_page.dart b/lib/presentation/login/login_page.dart index 143f0d77..a2d7f12e 100644 --- a/lib/presentation/login/login_page.dart +++ b/lib/presentation/login/login_page.dart @@ -137,15 +137,15 @@ class _LoginPageState extends State { const SizedBox(height: 5), Center( child: SizedBox( - width: kIsWeb ? _baseWidth - 110 : _baseWidth, + width: kIsWeb ? _baseWidth - 70 : _baseWidth, child: Center( child: Text( Strings.intro, style: RibnToolkitTextStyles.h3.copyWith( color: Colors.white, fontWeight: FontWeight.w300, - height: 2, - fontSize: kIsWeb ? 12 : 16, + height: 1.7, + fontSize: kIsWeb ? 13 : 14, ), textAlign: TextAlign.center, ), @@ -174,8 +174,6 @@ class _LoginPageState extends State { Strings.unlock, style: RibnToolkitTextStyles.btnLarge.copyWith( color: Colors.white, - fontWeight: FontWeight.w400, - fontSize: kIsWeb ? 15 : 19.6, ), ), onPressed: attemptLogin, @@ -197,7 +195,7 @@ class _LoginPageState extends State { color: Colors.red, ).copyWith( fontWeight: FontWeight.bold, - fontSize: kIsWeb ? 12 : 16, + fontSize: kIsWeb ? 13 : 14, ), ) : const SizedBox(), @@ -208,7 +206,7 @@ class _LoginPageState extends State { color: Colors.red, ).copyWith( fontWeight: FontWeight.bold, - fontSize: kIsWeb ? 12 : 16, + fontSize: kIsWeb ? 13 : 14, ), ) : const SizedBox() @@ -235,13 +233,14 @@ class _LoginPageState extends State { Strings.enterWalletPassword, style: RibnToolkitTextStyles.h3.copyWith( color: Colors.white, - fontSize: kIsWeb ? 12 : 16, + fontSize: kIsWeb ? 13 : 14, ), ), // ignore: prefer_const_constructors Padding( padding: const EdgeInsets.symmetric(horizontal: 4.0), child: CustomToolTip( + borderColor: Border.all(color: const Color(0xffE9E9E9)), offsetPositionLeftValue: 160, toolTipIcon: Image.asset( RibnAssets.greyHelpBubble, @@ -268,7 +267,7 @@ class _LoginPageState extends State { text: TextSpan( style: RibnToolkitTextStyles.h3.copyWith( color: RibnColors.secondary, - fontSize: kIsWeb ? 12 : 16, + fontSize: kIsWeb ? 13 : 14, ), children: [ TextSpan( @@ -291,7 +290,7 @@ class _LoginPageState extends State { text: TextSpan( style: RibnToolkitTextStyles.h3.copyWith( color: Colors.white, - fontSize: kIsWeb ? 12 : 16, + fontSize: kIsWeb ? 13 : 14, ), children: [ const TextSpan( @@ -301,7 +300,7 @@ class _LoginPageState extends State { text: Strings.ribnSupport, style: RibnToolkitTextStyles.h3.copyWith( color: RibnColors.secondary, - fontSize: kIsWeb ? 12 : 16, + fontSize: kIsWeb ? 13 : 14, ), recognizer: TapGestureRecognizer() ..onTap = () async { diff --git a/lib/presentation/onboarding/create_wallet/enable_biometrics_page.dart b/lib/presentation/onboarding/create_wallet/enable_biometrics_page.dart index 15709ee7..943a86bf 100644 --- a/lib/presentation/onboarding/create_wallet/enable_biometrics_page.dart +++ b/lib/presentation/onboarding/create_wallet/enable_biometrics_page.dart @@ -134,7 +134,7 @@ class _EnableBiometricsState extends State { ), ), bottomNavigationBar: BottomReviewAction( - maxHeight: 176, + maxHeight: 174, transparentBackground: true, children: Column( children: [ diff --git a/lib/presentation/onboarding/create_wallet/seed_phrase_generating_page.dart b/lib/presentation/onboarding/create_wallet/seed_phrase_generating_page.dart index 813be34e..cfa86c02 100644 --- a/lib/presentation/onboarding/create_wallet/seed_phrase_generating_page.dart +++ b/lib/presentation/onboarding/create_wallet/seed_phrase_generating_page.dart @@ -12,6 +12,7 @@ import 'package:ribn/presentation/onboarding/widgets/confirmation_button.dart'; import 'package:ribn/presentation/onboarding/widgets/onboarding_container.dart'; import 'package:ribn/presentation/onboarding/widgets/web_onboarding_app_bar.dart'; import 'package:ribn/utils.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; import 'package:ribn_toolkit/constants/styles.dart'; import 'package:ribn_toolkit/widgets/molecules/animated_circle_step_loader.dart'; @@ -67,6 +68,11 @@ class _SeedPhraseGeneratingPageState extends State { seedPhraseGenerating = false; }); }, + activeCircleColor: RibnColors.primary, + inactiveCircleColor: RibnColors.inactive, + activeCircleRadius: 8, + inactiveCircleRadius: 4.5, + dotPadding: 8, ), SizedBox( width: descriptionBoxWidth, diff --git a/lib/presentation/onboarding/create_wallet/wallet_created_page.dart b/lib/presentation/onboarding/create_wallet/wallet_created_page.dart index 5f15d7b5..625bb151 100644 --- a/lib/presentation/onboarding/create_wallet/wallet_created_page.dart +++ b/lib/presentation/onboarding/create_wallet/wallet_created_page.dart @@ -53,6 +53,8 @@ class _WalletCreatedPageState extends State { SizedBox( width: 730, child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ const Align( alignment: Alignment.centerLeft, @@ -90,7 +92,7 @@ class _WalletCreatedPageState extends State { fontSize: 18, ), ), - width: double.infinity, + width: 648, backgroundColor: RibnColors.primary, collapsedBackgroundColor: RibnColors.primary, iconColor: Colors.white, diff --git a/lib/presentation/settings/sections/delete_wallet_section.dart b/lib/presentation/settings/sections/delete_wallet_section.dart index 5b9d6d34..8a84e0fe 100644 --- a/lib/presentation/settings/sections/delete_wallet_section.dart +++ b/lib/presentation/settings/sections/delete_wallet_section.dart @@ -9,8 +9,14 @@ class DeleteWalletSection extends StatelessWidget { /// Handler for when user confirms wallet deletion. final Function(BuildContext context) onDeletePressed; + final Function(BuildContext context) onDisconnectPressed; + + final bool canDisconnect; + const DeleteWalletSection({ required this.onDeletePressed, + required this.onDisconnectPressed, + required this.canDisconnect, Key? key, }) : super(key: key); @@ -29,6 +35,53 @@ class DeleteWalletSection extends StatelessWidget { ), ), const SizedBox(height: 10), + const Text( + Strings.actionNotReversible, + style: RibnToolkitTextStyles.settingsSmallText, + ), + const SizedBox(height: 10), + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + color: RibnColors.paleGrey, + ), + width: 291, + height: 67, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + Strings.disconnectDApps, + style: RibnToolkitTextStyles.settingsSmallText, + ), + const SizedBox(height: 10), + SizedBox( + width: 107, + height: 22, + child: LargeButton( + buttonChild: Text( + Strings.disconnect, + style: RibnToolkitTextStyles.btnLarge.copyWith( + color: RibnColors.primary.withOpacity(canDisconnect == true ? 1.0 : 0.3), + fontSize: 10, + ), + ), + backgroundColor: Colors.transparent, + hoverColor: Colors.transparent, + dropShadowColor: Colors.transparent, + borderColor: RibnColors.primary.withOpacity(canDisconnect == true ? 1.0 : 0.3), + onPressed: () => canDisconnect ? + onDisconnectPressed(context) : null,), + ), + ], + ), + ), + ), + const SizedBox( + height: 5, + ), Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), @@ -42,7 +95,7 @@ class DeleteWalletSection extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( - Strings.actionNotReversible, + Strings.removeWallet, style: RibnToolkitTextStyles.settingsSmallText, ), const SizedBox(height: 10), @@ -51,7 +104,7 @@ class DeleteWalletSection extends StatelessWidget { height: 22, child: LargeButton( buttonChild: Text( - Strings.deleteWallet, + Strings.delete, style: RibnToolkitTextStyles.btnLarge.copyWith( color: RibnColors.primary, fontSize: 10, @@ -61,7 +114,9 @@ class DeleteWalletSection extends StatelessWidget { hoverColor: Colors.transparent, dropShadowColor: Colors.transparent, borderColor: RibnColors.primary, - onPressed: () => onDeletePressed(context), + onPressed: () { + onDeletePressed(context); + }, ), ), ], diff --git a/lib/presentation/settings/sections/disconnect_wallet_confirmation_dialog.dart b/lib/presentation/settings/sections/disconnect_wallet_confirmation_dialog.dart new file mode 100644 index 00000000..385e1cef --- /dev/null +++ b/lib/presentation/settings/sections/disconnect_wallet_confirmation_dialog.dart @@ -0,0 +1,124 @@ +import 'package:flutter/material.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn/platform/platform.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; +import 'package:ribn_toolkit/widgets/atoms/large_button.dart'; +import 'package:ribn_toolkit/widgets/molecules/custom_modal.dart'; + +/// The confirmation dialog that is displayed before disconnecting the wallet. +class DisconnectWalletConfirmationDialog extends StatefulWidget { + const DisconnectWalletConfirmationDialog({Key? key, required this.dApps}) + : super(key: key); + + final List dApps; + + @override + _DisconnectWalletConfirmationDialogState createState() => + _DisconnectWalletConfirmationDialogState(); +} + +class _DisconnectWalletConfirmationDialogState + extends State { + @override + Widget build(BuildContext context) { + return CustomModal.renderCustomModal( + title: const Text( + Strings.disconnectRibnWalletDApps, + style: RibnToolkitTextStyles.extH2, + textAlign: TextAlign.center, + ), + context: context, + body: Column( + children: [ + Text( + Strings.disconnectRibnWalletDAppsDesc, + style: RibnToolkitTextStyles.smallBody.copyWith(fontSize: 15), + ), + const SizedBox( + height: 20, + ), + Container( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + width: 360, + height: 105, + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(11.6)), + color: RibnColors.mediumGrey, + ), + child: RawScrollbar( + shape: const StadiumBorder(), + mainAxisMargin: 0, + crossAxisMargin: 0, + thumbVisibility: true, + thumbColor: RibnColors.primary, + thickness: 10, + child: ScrollConfiguration( + behavior: + ScrollConfiguration.of(context).copyWith(scrollbars: false), + child: ListView.builder( + shrinkWrap: true, + primary: false, + itemCount: widget.dApps.length, + itemBuilder: (buildContext, index) { + return Text( + widget.dApps[index], + style: const TextStyle( + fontFamily: 'DM Sans', + fontSize: 11, + height: 2.5, + ), + ); + }, + ), + ), + ), + ), + const SizedBox(height: 30), + ], + ), + actionsAlignment: MainAxisAlignment.center, + actions: [ + Column( + children: [ + // confirm disconnect + LargeButton( + buttonChild: Text( + Strings.yesIWantToDisconnect, + style: RibnToolkitTextStyles.btnMedium.copyWith( + color: Colors.white, + ), + ), + onPressed: () async { + // Disconnect action to go here + await PlatformUtils.instance + .convertToFuture(PlatformUtils.instance.clearDAppList()); + Navigator.of(context, rootNavigator: true).pop(true); + }, + buttonWidth: 285, + ), + const SizedBox(height: 20), + // cancel disconnect + LargeButton( + buttonChild: Text( + Strings.noIChangedMyMind, + style: RibnToolkitTextStyles.btnMedium.copyWith( + color: RibnColors.ghostButtonText, + ), + ), + backgroundColor: Colors.transparent, + hoverColor: Colors.transparent, + dropShadowColor: Colors.transparent, + borderColor: RibnColors.ghostButtonText, + onPressed: () { + // Cancel action to go here + Navigator.of(context, rootNavigator: true).pop(false); + }, + buttonWidth: 285, + ), + ], + ) + ], + ); + } +} diff --git a/lib/presentation/settings/settings_page.dart b/lib/presentation/settings/settings_page.dart index 5affb318..c5dfb0bc 100644 --- a/lib/presentation/settings/settings_page.dart +++ b/lib/presentation/settings/settings_page.dart @@ -1,8 +1,11 @@ + + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; import 'package:ribn/constants/strings.dart'; import 'package:ribn/containers/settings_container.dart'; +import 'package:ribn/platform/platform.dart'; import 'package:ribn/presentation/settings/sections/biometrics_section.dart'; import 'package:ribn/presentation/settings/sections/delete_wallet_section.dart'; import 'package:ribn/presentation/settings/sections/export_topl_main_key_section.dart'; @@ -10,7 +13,7 @@ import 'package:ribn/presentation/settings/sections/links_section.dart'; import 'package:ribn/presentation/settings/sections/ribn_version_section.dart'; import 'package:ribn/utils.dart'; import 'package:ribn_toolkit/constants/colors.dart'; -import 'package:ribn_toolkit/widgets/atoms/custom_page_title.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title.dart'; /// The settings page of the application. class SettingsPage extends StatefulWidget { @@ -23,17 +26,29 @@ class SettingsPage extends StatefulWidget { class _SettingsPageState extends State { bool isBioSupported = false; + bool canDisconnect = false; + + late VoidCallback onUpdated; + @override - void initState() { - if (!kIsWeb) runBiometrics(); + initState() async { + if (!kIsWeb) { + runBiometrics(); + } else { + final List dApps = await PlatformUtils.instance.convertToFuture(PlatformUtils.instance.getDAppList()); + setState(() async { + canDisconnect = dApps.isNotEmpty; + }); + } super.initState(); } - Future runBiometrics() async { + runBiometrics() async { final LocalAuthentication _localAuthentication = LocalAuthentication(); - final bool isBioAuthenticationSupported = await isBiometricsAuthenticationSupported(_localAuthentication); + final bool isBioAuthenticationSupported = + await isBiometricsAuthenticationSupported(_localAuthentication); setState(() { isBioSupported = isBioAuthenticationSupported ? true : false; @@ -42,12 +57,15 @@ class _SettingsPageState extends State { @override Widget build(BuildContext context) { + return SettingsContainer( - builder: (BuildContext context, SettingsViewModel vm) => Scaffold( + builder: (BuildContext context, SettingsViewModel vm) { + vm.canDisconnect = canDisconnect; + return Scaffold( body: SingleChildScrollView( child: Column( children: [ - const CustomPageTitle( + const CustomPageTextTitle( title: Strings.settings, hideBackArrow: true, ), @@ -55,7 +73,8 @@ class _SettingsPageState extends State { ], ), ), - ), + ); + }, ); } @@ -81,11 +100,21 @@ class _SettingsPageState extends State { _buildDivider(), const LinksSection(), kIsWeb ? _buildDivider() : const SizedBox(), - kIsWeb ? ExportToplMainKeySection(onExportPressed: vm.exportToplMainKey) : const SizedBox(), + kIsWeb + ? ExportToplMainKeySection( + onExportPressed: vm.exportToplMainKey, + ) + : const SizedBox(), isBioSupported ? _buildDivider() : const SizedBox(), - isBioSupported ? BiometricsSection(isBiometricsEnabled: vm.isBiometricsEnabled) : const SizedBox(), + isBioSupported + ? BiometricsSection(isBiometricsEnabled: vm.isBiometricsEnabled) + : const SizedBox(), _buildDivider(), - DeleteWalletSection(onDeletePressed: vm.onDeletePressed), + DeleteWalletSection( + onDeletePressed: vm.onDeletePressed, + onDisconnectPressed: vm.onDisconnectPressed, + canDisconnect: canDisconnect, + ), const SizedBox(height: 20), ], ), diff --git a/lib/presentation/transaction_history/dashed_list_separator/dashed_list_separator.dart b/lib/presentation/transaction_history/dashed_list_separator/dashed_list_separator.dart new file mode 100644 index 00000000..94ef67fd --- /dev/null +++ b/lib/presentation/transaction_history/dashed_list_separator/dashed_list_separator.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +class DashedListSeparator extends StatelessWidget { + const DashedListSeparator({Key? key, this.height = 1, this.color = Colors.black}) : super(key: key); + final double height; + final Color color; + + @override + Widget build(BuildContext context) { + return LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { + final boxWidth = constraints.constrainWidth(); + const dashWidth = 2.0; + final dashHeight = height; + final dashCount = (boxWidth / (2 * dashWidth)).floor(); + return Flex( + children: List.generate(dashCount, (_) { + return SizedBox( + width: dashWidth, + height: dashHeight, + child: DecoratedBox( + decoration: BoxDecoration(color: color), + ), + ); + }), + mainAxisAlignment: MainAxisAlignment.spaceBetween, + direction: Axis.horizontal, + ); + }, + ); + } +} diff --git a/lib/presentation/transaction_history/helpers/tx_history_helper_functions.dart b/lib/presentation/transaction_history/helpers/tx_history_helper_functions.dart new file mode 100644 index 00000000..6869451c --- /dev/null +++ b/lib/presentation/transaction_history/helpers/tx_history_helper_functions.dart @@ -0,0 +1,33 @@ +import 'package:brambldart/model.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; + +import '../../../containers/transaction_history_container.dart'; +import '../dashed_list_separator/dashed_list_separator.dart'; +import '../transaction_data_row/transaction_data_row.dart'; + +Widget loadScrollView( + TransactionHistoryViewmodel transactionHistoryViewmodel, + List transactions, +) { + return ListView.separated( + reverse: true, + physics: const NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + itemCount: transactions.length, + shrinkWrap: true, + itemBuilder: (context, index) { + final TransactionReceipt transaction = transactions[index]; + return TransactionDataRow( + transactionReceipt: transaction, + assets: transactionHistoryViewmodel.assets, + myRibnWalletAddress: transactionHistoryViewmodel.toplAddress.toBase58(), + blockHeight: transactionHistoryViewmodel.blockHeight, + networkId: transactionHistoryViewmodel.networkId, + ); + }, + separatorBuilder: (context, index) { + return const DashedListSeparator(color: RibnColors.lightGreyDivider); + }, + ); +} diff --git a/lib/presentation/transaction_history/service_locator/locator.dart b/lib/presentation/transaction_history/service_locator/locator.dart new file mode 100644 index 00000000..0cf9957d --- /dev/null +++ b/lib/presentation/transaction_history/service_locator/locator.dart @@ -0,0 +1,11 @@ +/// @dev File contains function that setups any singletons required within the app + +import 'package:get_it/get_it.dart'; +import 'package:redux/redux.dart'; + +import '../../../models/app_state.dart'; + +final locator = GetIt.instance; +void setupLocator(Store store) { + locator.registerSingleton>(store, signalsReady: true); +} diff --git a/lib/presentation/transaction_history/transaction_data_row/transaction_data_row.dart b/lib/presentation/transaction_history/transaction_data_row/transaction_data_row.dart new file mode 100644 index 00000000..22854a22 --- /dev/null +++ b/lib/presentation/transaction_history/transaction_data_row/transaction_data_row.dart @@ -0,0 +1,329 @@ +import 'package:brambldart/model.dart'; +import 'package:brambldart/utils.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_redux/flutter_redux.dart'; +import 'package:intl/intl.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/keys.dart'; +import 'package:ribn/constants/routes.dart'; +import 'package:ribn/models/app_state.dart'; +import 'package:ribn/models/asset_details.dart'; +import 'package:ribn/utils.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; +import 'package:ribn_toolkit/widgets/atoms/status_chip.dart'; + +class TransactionDataRow extends StatefulWidget { + final List assets; + final TransactionReceipt transactionReceipt; + final String myRibnWalletAddress; + final Future? blockHeight; + final int networkId; + + const TransactionDataRow({ + required this.transactionReceipt, + required this.assets, + required this.myRibnWalletAddress, + required this.blockHeight, + required this.networkId, + Key? key, + }) : super(key: key); + + @override + State createState() => _TransactionDataRowState(); +} + +class _TransactionDataRowState extends State { + String transactionStatus = 'unconfirmed'; + + @override + initState() { + getBlockHeight(); + super.initState(); + } + + getBlockHeight() async { + final transactionBlockHeightNum = + int.parse('${widget.transactionReceipt.blockNumber}'); + final blockHeightString = await widget.blockHeight; + final blockHeightNum = int.parse(blockHeightString!); + final heightDifference = blockHeightNum - transactionBlockHeightNum; + if (heightDifference > 30) { + setState(() { + transactionStatus = 'confirmed'; + }); + } + } + + @override + Widget build(BuildContext context) { + final bool isPolyTransaction = widget.transactionReceipt.txType == + 'PolyTransfer' || + widget.transactionReceipt.to.first.toJson()[1].runtimeType == String; + final int timestampInt = widget.transactionReceipt.timestamp; + final DateTime date = DateTime.fromMillisecondsSinceEpoch(timestampInt); + final DateFormat dateFormat = DateFormat('MMM d'); + final DateFormat dateFormatAlternate = DateFormat('MM-dd-yyyy'); + final String formattedDate = dateFormat.format(date); + final String formattedDateAlternate = dateFormatAlternate.format(date); + final String transactionReceiverAddress = + widget.transactionReceipt.to.first.toJson()[0].toString(); + final String transactionQuantity = isPolyTransaction + ? widget.transactionReceipt.to.first.toJson()[1] + : widget.transactionReceipt.to.first.toJson()[1]['quantity']; + final Sender transactionSenderAddress = widget.transactionReceipt.from![0]; + final String? fee = '${widget.transactionReceipt.fee!.quantity} nanoPOLYs'; + final Latin1Data? note = widget.transactionReceipt.data; + final String securityRoot = isPolyTransaction + ? '' + : widget.transactionReceipt.to.first.toJson()[1]['securityRoot']; + final String assetCode = isPolyTransaction + ? '' + : widget.transactionReceipt.to.first + .toJson()[1]['assetCode'] + .toString(); + final ModifierId? blockId = widget.transactionReceipt.blockId; + final BlockNum? blockNumber = widget.transactionReceipt.blockNumber; + final ModifierId transactionId = widget.transactionReceipt.id; + final String renderPlusOrMinusPolyTransfer = + transactionReceiverAddress == widget.myRibnWalletAddress && + isPolyTransaction + ? '+' + : '-'; + final String transactionAmountForPolyTransfer = + '$renderPlusOrMinusPolyTransfer$transactionQuantity'; + + String? transactionAmountForAssetTransfer() { + if (transactionReceiverAddress == widget.myRibnWalletAddress && + !transactionQuantity.contains('-')) { + return '+$transactionQuantity'; + } else if (transactionReceiverAddress == widget.myRibnWalletAddress && + transactionQuantity.contains('-')) { + return transactionQuantity; + } else if (transactionReceiverAddress != widget.myRibnWalletAddress && + transactionQuantity.contains('-')) { + return transactionQuantity; + } else if (transactionReceiverAddress != widget.myRibnWalletAddress && + widget.transactionReceipt.minting == true) { + return '+$transactionQuantity'; + } + return '-$transactionQuantity'; + } + + String? renderSentReceivedMintedText() { + if (transactionReceiverAddress == widget.myRibnWalletAddress && + !transactionQuantity.contains('-')) { + return 'Received'; + } + return 'Sent'; + } + + // Render poly specific section if poly transfer + if (isPolyTransaction) { + return GestureDetector( + onTap: () { + Keys.navigatorKey.currentState?.pushNamed( + Routes.txHistoryDetails, + arguments: { + 'isPolyTransaction': true, + 'transactionType': renderSentReceivedMintedText(), + 'timestamp': formattedDateAlternate, + 'assetDetails': {}, + 'icon': renderPolyIcon(), + 'shortName': 'POLY', + 'transactionStatus': transactionStatus, + 'transactionAmount': transactionAmountForPolyTransfer, + 'fee': fee, + 'myRibnWalletAddress': widget.myRibnWalletAddress, + 'transactionSenderAddress': transactionSenderAddress, + 'note': note, + 'blockId': blockId, + 'blockHeight': blockNumber, + 'transactionId': transactionId, + 'networkId': widget.networkId, + }, + ); + }, + child: Container( + color: Colors.transparent, + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 15, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + height: 40, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + SizedBox( + width: 25, + height: 25, + child: renderPolyIcon(), + ), + Padding( + padding: const EdgeInsets.only(left: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + transactionAmountForPolyTransfer, + style: RibnToolkitTextStyles.extH3 + .copyWith(fontSize: 14), + ), + Text( + 'POLY', + style: RibnToolkitTextStyles.assetLongNameStyle + .copyWith(fontSize: 11), + ), + ], + ), + ) + ], + ), + ), + SizedBox( + height: 40, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + StatusChip(status: transactionStatus), + Text( + '${renderSentReceivedMintedText()} on $formattedDate', + style: RibnToolkitTextStyles.assetLongNameStyle + .copyWith(fontSize: 11), + ), + ], + ), + ), + ], + ), + ], + ), + ), + ); + } + + return StoreConnector( + // Get access to AssetDetails for this asset from the store only if not poly transaction + converter: (store) => + store.state.userDetailsState.assetDetails[assetCode], + builder: (context, assetDetails) { + final List filteredAsset = widget.assets + .where( + (item) => item.assetCode.toString() == assetCode, + ) + .toList(); + + return GestureDetector( + onTap: () { + Keys.navigatorKey.currentState?.pushNamed( + Routes.txHistoryDetails, + arguments: { + 'isPolyTransaction': false, + 'transactionType': renderSentReceivedMintedText(), + 'timestamp': formattedDateAlternate, + 'assetDetails': assetDetails, + 'icon': renderAssetIcon(assetDetails?.icon), + 'shortName': filteredAsset.isNotEmpty ? filteredAsset[0].assetCode.shortName.show.replaceAll('\x00', '') : 'Unknown', + 'transactionStatus': transactionStatus, + 'transactionAmount': + '${transactionAmountForAssetTransfer()} ${formatAssetUnit(assetDetails?.unit ?? 'Unit')}', + 'fee': fee, + 'myRibnWalletAddress': widget.myRibnWalletAddress, + 'transactionSenderAddress': transactionSenderAddress, + 'note': note, + 'securityRoot': securityRoot, + 'blockId': blockId, + 'blockHeight': blockNumber, + 'transactionId': transactionId, + 'networkId': widget.networkId, + }, + ); + }, + child: Container( + color: Colors.white, + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 15, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + height: 40, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + SizedBox( + width: 25, + height: 25, + child: renderAssetIcon(assetDetails?.icon), + ), + Padding( + padding: const EdgeInsets.only(left: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + '${transactionAmountForAssetTransfer()} ${formatAssetUnit(assetDetails?.unit ?? 'Unit')}', + style: RibnToolkitTextStyles.extH3 + .copyWith(fontSize: 14), + ), + Text( + filteredAsset.isNotEmpty ? filteredAsset[0].assetCode.shortName.show.replaceAll('\x00', '') : 'Unknown', + style: RibnToolkitTextStyles.assetLongNameStyle.copyWith(fontSize: 11), + ), + ], + ), + ) + ], + ), + ), + SizedBox( + height: 40, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + StatusChip(status: transactionStatus), + Text( + '${renderSentReceivedMintedText()} on $formattedDate', + style: RibnToolkitTextStyles.assetLongNameStyle + .copyWith(fontSize: 11), + ), + ], + ), + ), + ], + ), + ], + ), + ), + ); + }, + ); + } + + Image renderAssetIcon(assetDetailsIcon) { + return assetDetailsIcon == null + ? Image.asset(RibnAssets.undefinedIcon) + : Image.asset( + assetDetailsIcon!, + ); + } + + Image renderPolyIcon() { + return Image.asset(RibnAssets.polyIconCircle); + } +} diff --git a/lib/presentation/transaction_history/transaction_history_details_page/transaction_history_data_tile.dart b/lib/presentation/transaction_history/transaction_history_details_page/transaction_history_data_tile.dart new file mode 100644 index 00000000..afe82a9d --- /dev/null +++ b/lib/presentation/transaction_history/transaction_history_details_page/transaction_history_data_tile.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; + +class TransactionHistoryDataTile extends StatelessWidget { + final bool reducedWidth; + final String tileTitle; + final Widget tileValue; + + const TransactionHistoryDataTile({ + this.reducedWidth = false, + required this.tileTitle, + required this.tileValue, + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: reducedWidth == true ? const BoxConstraints(minWidth: 70) : const BoxConstraints(minWidth: 163), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + tileTitle, + style: RibnToolkitTextStyles.hintStyle.copyWith( + fontWeight: FontWeight.w500, + ), + ), + const SizedBox( + height: 6, + ), + tileValue, + ], + ), + ); + } +} diff --git a/lib/presentation/transaction_history/transaction_history_details_page/transaction_history_details_page.dart b/lib/presentation/transaction_history/transaction_history_details_page/transaction_history_details_page.dart new file mode 100644 index 00000000..9f649937 --- /dev/null +++ b/lib/presentation/transaction_history/transaction_history_details_page/transaction_history_details_page.dart @@ -0,0 +1,466 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/rules.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn/presentation/transaction_history/dashed_list_separator/dashed_list_separator.dart'; +import 'package:ribn/presentation/transaction_history/transaction_history_details_page/transaction_history_data_tile.dart'; +import 'package:ribn/utils.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/constants/styles.dart'; +import 'package:ribn_toolkit/widgets/atoms/custom_copy_button.dart'; +import 'package:ribn_toolkit/widgets/atoms/status_chip.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class TxHistoryDetailsPage extends StatefulWidget { + final Map? transactionDetails; + + const TxHistoryDetailsPage({ + required this.transactionDetails, + Key? key, + }) : super(key: key); + + @override + State createState() => _TxHistoryPageDetailsState(); +} + +class _TxHistoryPageDetailsState extends State { + @override + Widget build(BuildContext context) { + final _scrollController = ScrollController(); + final dataTileTextStyle = RibnToolkitTextStyles.hintStyle.copyWith( + fontWeight: FontWeight.w400, + color: const Color(0xff727372), + ); + + return Scaffold( + backgroundColor: RibnColors.background, + body: Scrollbar( + thumbVisibility: true, + controller: _scrollController, + child: SingleChildScrollView( + controller: _scrollController, + child: Column( + children: [ + const CustomPageTextTitle( + title: Strings.transactionDetails, + hideCloseCross: true, + ), + Padding( + padding: const EdgeInsets.only(top: 20, bottom: 20), + child: Container( + width: MediaQuery.of(context).size.width - 40, + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 8, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(11.6), + color: RibnColors.whiteBackground, + border: Border.all(color: RibnColors.lightGrey, width: 1), + boxShadow: const [ + BoxShadow( + color: RibnColors.greyShadow, + spreadRadius: 0, + blurRadius: 37.5, + offset: Offset(0, -6), + ), + ], + ), + child: Container( + color: Colors.white, + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 15, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Transaction Type', + tileValue: Text( + widget.transactionDetails!['transactionType'], + style: dataTileTextStyle, + ), + ), + TransactionHistoryDataTile( + reducedWidth: true, + tileTitle: 'Timestamp', + tileValue: Text( + widget.transactionDetails!['timestamp'], + style: dataTileTextStyle, + ), + ), + ], + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + const SizedBox( + height: 16, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Asset Code', + tileValue: Row( + children: [ + SizedBox( + width: 24, + height: 24, + child: widget.transactionDetails?['icon'], + ), + Padding( + padding: const EdgeInsets.only(left: 12), + child: Text( + widget.transactionDetails?['shortName'], + style: dataTileTextStyle, + ), + ), + ], + ), + ), + TransactionHistoryDataTile( + reducedWidth: true, + tileTitle: 'Amount', + tileValue: Text( + widget.transactionDetails!['transactionAmount'], + style: dataTileTextStyle, + ), + ), + ], + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + const SizedBox( + height: 16, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Status', + tileValue: StatusChip( + status: widget.transactionDetails!['transactionStatus'], + ), + ), + TransactionHistoryDataTile( + reducedWidth: true, + tileTitle: 'Fee', + tileValue: Text( + widget.transactionDetails!['fee'].toString(), + style: dataTileTextStyle, + ), + ), + ], + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + const SizedBox( + height: 16, + ), + TransactionHistoryDataTile( + tileTitle: 'To', + tileValue: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox( + width: 26, + height: 26, + child: SvgPicture.asset(RibnAssets.myFingerprint), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Text( + Strings.yourRibnWalletAddress, + style: dataTileTextStyle, + ), + ), + CustomCopyButton( + textToBeCopied: widget.transactionDetails!['myRibnWalletAddress'], + icon: Image.asset( + RibnAssets.copyIcon, + width: 20, + ), + ), + ], + ), + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + const SizedBox( + height: 16, + ), + TransactionHistoryDataTile( + tileTitle: 'From', + tileValue: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + SizedBox( + width: 26, + height: 26, + child: SvgPicture.asset(RibnAssets.recipientFingerprint), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Text( + formatAddrString(widget.transactionDetails!['transactionSenderAddress'].toString()), + style: dataTileTextStyle, + ), + ), + CustomCopyButton( + textToBeCopied: widget.transactionDetails!['transactionSenderAddress'].toString(), + icon: Image.asset( + RibnAssets.copyIcon, + width: 20, + ), + ), + ], + ), + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + const SizedBox( + height: 16, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Note', + tileValue: Text( + widget.transactionDetails!['note'] ?? '', + style: dataTileTextStyle, + ), + ), + ], + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + widget.transactionDetails!['securityRoot'] == null + ? const SizedBox() + : Column( + children: [ + const SizedBox( + height: 16, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Security Root', + tileValue: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(right: 10), + child: Text( + formatAddrString( + widget.transactionDetails!['securityRoot'], + charsToDisplay: 4, + ), + style: dataTileTextStyle, + ), + ), + CustomCopyButton( + textToBeCopied: widget.transactionDetails!['securityRoot'], + icon: Image.asset( + RibnAssets.copyIcon, + width: 20, + ), + ), + ], + ), + ), + ], + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + ], + ), + const SizedBox( + height: 16, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Block ID', + tileValue: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(right: 10), + child: Text( + formatAddrString( + widget.transactionDetails!['blockId'].toString(), + charsToDisplay: 4, + ), + style: dataTileTextStyle, + ), + ), + CustomCopyButton( + textToBeCopied: widget.transactionDetails!['blockId'].toString(), + icon: Image.asset( + RibnAssets.copyIcon, + width: 20, + ), + ), + ], + ), + ), + TransactionHistoryDataTile( + reducedWidth: true, + tileTitle: 'Block height', + tileValue: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(right: 10), + child: Text( + widget.transactionDetails!['blockHeight'].toString(), + style: dataTileTextStyle, + ), + ), + CustomCopyButton( + textToBeCopied: widget.transactionDetails!['blockHeight'].toString(), + icon: Image.asset( + RibnAssets.copyIcon, + width: 20, + ), + ), + ], + ), + ), + ], + ), + const SizedBox( + height: 16, + ), + const DashedListSeparator(color: RibnColors.lightGreyDivider), + const SizedBox( + height: 16, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + TransactionHistoryDataTile( + tileTitle: 'Transaction ID', + tileValue: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(right: 10), + child: Text( + formatAddrString( + widget.transactionDetails!['transactionId'].toString(), + charsToDisplay: 4, + ), + style: dataTileTextStyle, + ), + ), + CustomCopyButton( + textToBeCopied: widget.transactionDetails!['transactionId'].toString(), + icon: Image.asset( + RibnAssets.copyIcon, + width: 20, + ), + ), + ], + ), + ), + TransactionHistoryDataTile( + reducedWidth: true, + tileTitle: 'View Topl Explorer', + tileValue: _buildToplExplorerLink(), + ), + ], + ), + ], + ), + ), + ), + ) + ], + ), + ), + ), + ); + } + + Image renderAssetIcon(assetDetailsIcon) { + return assetDetailsIcon == null + ? Image.asset(RibnAssets.undefinedIcon) + : Image.asset( + assetDetailsIcon!, + ); + } + + Image renderPolyIcon() { + return Image.asset(RibnAssets.polyIconCircle); + } + + /// Redirects user to the Topl Explorer + RichText _buildToplExplorerLink() { + final url = Uri.parse( + '${Rules.txDetailsRedirectUrls[widget.transactionDetails!['networkId']] ?? ''}${widget.transactionDetails!['transactionId']}', + ); + + return RichText( + text: TextSpan( + children: [ + WidgetSpan( + child: GestureDetector( + onTap: () async => await launchUrl(url), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + 'www.topl.explorer', + style: RibnToolkitTextStyles.h4.copyWith( + fontSize: 12, + fontWeight: FontWeight.w400, + color: RibnColors.tertiary, + decoration: TextDecoration.underline, + ), + ), + const SizedBox(width: 5), + Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(50), + color: const Color(0xFFF9F9F9), + ), + child: Image.asset( + RibnAssets.openInNewWindow, + width: 12, + ), + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/presentation/transaction_history/transaction_history_page.dart b/lib/presentation/transaction_history/transaction_history_page.dart new file mode 100644 index 00000000..bb10248e --- /dev/null +++ b/lib/presentation/transaction_history/transaction_history_page.dart @@ -0,0 +1,240 @@ +import 'package:brambldart/brambldart.dart'; +import 'package:flutter/material.dart'; +import 'package:loader_overlay/loader_overlay.dart'; +import 'package:ribn/constants/assets.dart'; +import 'package:ribn/constants/keys.dart'; +import 'package:ribn/constants/routes.dart'; +import 'package:ribn/constants/strings.dart'; +import 'package:ribn/containers/transaction_history_container.dart'; +import 'package:ribn/presentation/empty_state_screen.dart'; +import 'package:ribn/presentation/transaction_history/dashed_list_separator/dashed_list_separator.dart'; +import 'package:ribn/presentation/transaction_history/transaction_data_row/transaction_data_row.dart'; +import 'package:ribn/utils.dart'; +import 'package:ribn_toolkit/constants/colors.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_dropdown_title.dart'; + +class TxHistoryPage extends StatefulWidget { + final Future? blockHeight; + + const TxHistoryPage({this.blockHeight, Key? key}) : super(key: key); + + @override + State createState() => _TxHistoryPageState(); +} + +class _TxHistoryPageState extends State { + List itemsToSelectFrom = ['All', 'Sent', 'Received']; + + String filterSelectedItem = 'Transaction types'; + + List filteredTransactions = []; + + late bool hasTransactionData = false; + + void updateSelectedItem(string) { + setState(() { + filteredTransactions = []; + filterSelectedItem = string; + }); + } + + final _scrollController = ScrollController(); + + int pageNum = 0; + + String startingFilterValue = 'Transaction types'; + + @override + void initState() { + super.initState(); + + _scrollController.addListener(() { + if (_scrollController.position.atEdge) { + final bool isTop = _scrollController.position.pixels == 0; + if (!isTop) { + setState(() { + pageNum += 1; + }); + } + } + }); + } + + Future fetchTxHistory( + BuildContext context, + ToplAddress toplAddress, + int networkId, + TransactionHistoryViewmodel vm, + ) async { + final List response = + await vm.getTransactions(pageNum: pageNum); + + // Filters transactions by sent or received + if (filterSelectedItem != 'Transaction types') { + final List transactions = response; + + for (var transaction in transactions) { + final String transactionReceiverAddress = + transaction.to.first.toJson()[0].toString(); + final Sender transactionSenderAddress = transaction.from![0]; + final myRibnAddress = toplAddress.toBase58(); + final wasMinted = transaction.minting == true; + + if (filterSelectedItem == 'All') { + filteredTransactions.add(transaction); + } + + if (filterSelectedItem == 'Received' && + transactionReceiverAddress == myRibnAddress && + !wasMinted) { + filteredTransactions.add(transaction); + } + + if (filterSelectedItem == 'Sent' && + transactionSenderAddress.toString() == myRibnAddress.toString() && + !wasMinted && + transactionReceiverAddress != myRibnAddress) { + filteredTransactions.add(transaction); + } + } + + return filteredTransactions; + } + + return response; + } + + @override + Widget build(BuildContext context) { + return TransactionHistoryContainer( + builder: (BuildContext context, TransactionHistoryViewmodel vm) => + LoaderOverlay( + overlayColor: Colors.transparent, + child: Scaffold( + backgroundColor: RibnColors.background, + body: RefreshIndicator( + backgroundColor: RibnColors.primary, + color: RibnColors.secondaryDark, + onRefresh: () async { + setState(() {}); + }, + child: Scrollbar( + thumbVisibility: true, + controller: _scrollController, + child: SingleChildScrollView( + controller: _scrollController, + child: Column( + children: [ + CustomPageDropdownTitle( + title: Strings.recentActivity, + chevronIconLink: RibnAssets.chevronDown, + currentSelectedItem: filterSelectedItem, + itemsToSelectFrom: itemsToSelectFrom, + updateSelectedItem: updateSelectedItem, + ), + FutureBuilder( + future: fetchTxHistory( + context, vm.toplAddress, vm.networkId, vm,), + builder: (context, AsyncSnapshot snapshot) { + switch (snapshot.connectionState) { + case ConnectionState.done: + context.loaderOverlay.hide(); + + if (!snapshot.hasData || snapshot.data.isEmpty) { + return EmptyStateScreen( + icon: RibnAssets.clockWithBorder, + title: Strings.noActivityToReview, + body: emptyStateBody, + buttonOneText: 'Mint', + buttonOneAction: () => + Keys.navigatorKey.currentState?.pushNamed( + Routes.mintInput, + arguments: { + 'mintingNewAsset': true, + 'mintingToMyWallet': true, + }, + ), + buttonTwoText: 'Share', + buttonTwoAction: () async => + await showReceivingAddress(), + mobileHeight: + MediaQuery.of(context).size.height * 0.63, + desktopHeight: 360, + ); + } + + return Padding( + padding: + const EdgeInsets.only(top: 20, bottom: 20), + child: Container( + width: MediaQuery.of(context).size.width - 40, + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 8, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(11.6), + color: RibnColors.whiteBackground, + border: Border.all( + color: RibnColors.lightGrey, width: 1,), + boxShadow: const [ + BoxShadow( + color: RibnColors.greyShadow, + spreadRadius: 0, + blurRadius: 37.5, + offset: Offset(0, -6), + ), + ], + ), + child: SingleChildScrollView( + child: ListView.separated( + reverse: true, + physics: + const NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + itemCount: filterSelectedItem == + startingFilterValue + ? snapshot.data?.length + : filteredTransactions.length, + shrinkWrap: true, + itemBuilder: (context, index) { + final TransactionReceipt transaction = + filterSelectedItem == + startingFilterValue + ? snapshot.data[index] + : filteredTransactions[index]; + + return TransactionDataRow( + transactionReceipt: transaction, + assets: vm.assets, + myRibnWalletAddress: + vm.toplAddress.toBase58(), + blockHeight: vm.blockHeight, + networkId: vm.networkId, + ); + }, + separatorBuilder: (context, index) { + return const DashedListSeparator( + color: RibnColors.lightGreyDivider,); + }, + ), + ), + ), + ); + + default: + context.loaderOverlay.show(); + return const SizedBox(); + } + }, + ), + ], + ), + ), + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/transaction_history/widgets/listeners/scroll_listener.dart b/lib/presentation/transaction_history/widgets/listeners/scroll_listener.dart new file mode 100644 index 00000000..ede400c6 --- /dev/null +++ b/lib/presentation/transaction_history/widgets/listeners/scroll_listener.dart @@ -0,0 +1,42 @@ +import 'package:flutter/cupertino.dart'; + +class ScrollListener extends StatefulWidget { + final Widget Function(BuildContext, ScrollController) builder; + final VoidCallback loadNext; + final double threshold; + const ScrollListener({ + Key? key, + required this.threshold, + required this.builder, + required this.loadNext, + }) : super(key: key); + + @override + _ScrollListener createState() => _ScrollListener(); +} + +class _ScrollListener extends State { + final ScrollController _controller = ScrollController(); + + @override + void initState() { + super.initState(); + _controller.addListener(() { + final rate = _controller.offset / _controller.position.maxScrollExtent; + if (widget.threshold <= rate) { + widget.loadNext(); + } + }); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return widget.builder(context, _controller); + } +} diff --git a/lib/presentation/transaction_history/widgets/misc/keep_alive_future_builder.dart b/lib/presentation/transaction_history/widgets/misc/keep_alive_future_builder.dart new file mode 100644 index 00000000..26869269 --- /dev/null +++ b/lib/presentation/transaction_history/widgets/misc/keep_alive_future_builder.dart @@ -0,0 +1,26 @@ +import 'package:flutter/cupertino.dart'; + +class KeepAliveFutureBuilder extends StatefulWidget { + final Future future; + final AsyncWidgetBuilder builder; + const KeepAliveFutureBuilder( + {Key? key, required this.future, required this.builder,}) + : super(key: key); + @override + _KeepAliveFutureBuilderState createState() => _KeepAliveFutureBuilderState(); +} + +class _KeepAliveFutureBuilderState extends State + with AutomaticKeepAliveClientMixin { + @override + Widget build(BuildContext context) { + super.build(context); + return FutureBuilder( + future: widget.future, + builder: widget.builder, + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/presentation/transfers/asset_transfer_page.dart b/lib/presentation/transfers/asset_transfer_page.dart index 08298971..8f8ea689 100644 --- a/lib/presentation/transfers/asset_transfer_page.dart +++ b/lib/presentation/transfers/asset_transfer_page.dart @@ -8,26 +8,21 @@ import 'package:ribn/presentation/transfers/asset_transfer_section.dart'; import 'package:ribn/presentation/transfers/poly_transfer_section.dart'; import 'package:ribn_toolkit/constants/colors.dart'; import 'package:ribn_toolkit/constants/styles.dart'; -import 'package:ribn_toolkit/widgets/atoms/custom_page_title.dart'; import 'package:ribn_toolkit/widgets/molecules/sliding_segment_control.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title.dart'; /// The asset transfer input page that allows the initiation of an asset transfer. /// /// Prompts the user to select an asset, the recipient address, amount, and an optional note as transaction metadata. class AssetTransferPage extends StatefulWidget { const AssetTransferPage({Key? key}) : super(key: key); - @override State createState() => _AssetTransferPageState(); } class _AssetTransferPageState extends State { int currentTabIndex = 0; - dynamic bottomButton; - - set setBottomButton(Widget value) => setState(() => bottomButton = value); - bool isKeyboardVisible = false; @override @@ -40,6 +35,12 @@ class _AssetTransferPageState extends State { super.initState(); } + @override + void dispose() { + // TODO: implement dispose + super.dispose(); + } + @override Widget build(BuildContext context) { return LoaderOverlay( @@ -50,7 +51,7 @@ class _AssetTransferPageState extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ // page title - const CustomPageTitle( + const CustomPageTextTitle( title: Strings.send, hideBackArrow: true, ), @@ -69,14 +70,16 @@ class _AssetTransferPageState extends State { padding: const EdgeInsets.symmetric(horizontal: 10), child: Text( Strings.sendAssets, - style: RibnToolkitTextStyles.btnMedium.copyWith(color: RibnColors.defaultText), + style: RibnToolkitTextStyles.btnMedium + .copyWith(color: RibnColors.defaultText), ), ), 1: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: Text( Strings.sendNativeCoins, - style: RibnToolkitTextStyles.btnMedium.copyWith(color: RibnColors.defaultText), + style: RibnToolkitTextStyles.btnMedium + .copyWith(color: RibnColors.defaultText), ), ), }, @@ -87,13 +90,15 @@ class _AssetTransferPageState extends State { ? AssetTransferInputContainer( builder: (context, vm) => AssetTransferSection( vm: vm, - updateButton: (val) => setState(() => bottomButton = val), + updateButton: (val) => + setState(() => bottomButton = val), ), ) : PolyTransferInputContainer( builder: (context, vm) => PolyTransferSection( vm: vm, - updateButton: (val) => setState(() => bottomButton = val), + updateButton: (val) => + setState(() => bottomButton = val), ), ), const SizedBox(height: 18), diff --git a/lib/presentation/transfers/asset_transfer_section.dart b/lib/presentation/transfers/asset_transfer_section.dart index 5f8aa19e..ddd51c18 100644 --- a/lib/presentation/transfers/asset_transfer_section.dart +++ b/lib/presentation/transfers/asset_transfer_section.dart @@ -1,4 +1,5 @@ import 'package:brambldart/brambldart.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:loader_overlay/loader_overlay.dart'; @@ -88,9 +89,10 @@ class _AssetTransferSectionState extends State { return WidgetsBinding.instance.addPostFrameCallback((_) { widget.updateButton( BottomReviewAction( - maxHeight: 145, + maxHeight: kIsWeb ? 120 : 143, children: Column( crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, children: [ // fee info for the tx FeeInfo(fee: widget.vm.networkFee), @@ -119,6 +121,8 @@ class _AssetTransferSectionState extends State { ), buttonTwoText: 'Share', buttonTwoAction: () async => await showReceivingAddress(), + mobileHeight: MediaQuery.of(context).size.height * 0.63, + desktopHeight: 258, ); } @@ -257,7 +261,7 @@ class _AssetTransferSectionState extends State { _validRecipientAddress.isNotEmpty && _amountController.text.isNotEmpty && _validAmount; return Padding( - padding: const EdgeInsets.only(top: 15), + padding: const EdgeInsets.only(top: 10, bottom: 10), child: Center( child: LargeButton( buttonWidth: double.infinity, diff --git a/lib/presentation/transfers/bottom_review_action.dart b/lib/presentation/transfers/bottom_review_action.dart index fdeeeb5c..1979874a 100644 --- a/lib/presentation/transfers/bottom_review_action.dart +++ b/lib/presentation/transfers/bottom_review_action.dart @@ -9,7 +9,7 @@ class BottomReviewAction extends StatelessWidget { required this.maxHeight, }) : super(key: key); - final Column children; + final dynamic children; final bool transparentBackground; final double maxHeight; @@ -21,7 +21,7 @@ class BottomReviewAction extends StatelessWidget { topRight: Radius.circular(25), ), child: Container( - constraints: BoxConstraints(maxHeight: kIsWeb ? 120 : maxHeight), + constraints: BoxConstraints(maxHeight: maxHeight), decoration: transparentBackground ? null : const BoxDecoration( @@ -37,7 +37,7 @@ class BottomReviewAction extends StatelessWidget { child: BottomAppBar( color: transparentBackground ? Colors.transparent : Colors.white, child: Padding( - padding: const EdgeInsets.fromLTRB(20, 10, 20, 0), + padding: const EdgeInsets.fromLTRB(20, 16, 20, kIsWeb ? 16 : 0), child: children, ), elevation: 0, diff --git a/lib/presentation/transfers/mint_input_page.dart b/lib/presentation/transfers/mint_input_page.dart index 9a97d769..2666b224 100644 --- a/lib/presentation/transfers/mint_input_page.dart +++ b/lib/presentation/transfers/mint_input_page.dart @@ -1,4 +1,5 @@ import 'package:brambldart/brambldart.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -17,7 +18,6 @@ import 'package:ribn/widgets/address_display_container.dart'; import 'package:ribn/widgets/fee_info.dart'; import 'package:ribn_toolkit/constants/colors.dart'; import 'package:ribn_toolkit/constants/styles.dart'; -import 'package:ribn_toolkit/widgets/atoms/custom_page_title.dart'; import 'package:ribn_toolkit/widgets/atoms/large_button.dart'; import 'package:ribn_toolkit/widgets/molecules/asset_amount_field.dart'; import 'package:ribn_toolkit/widgets/molecules/asset_long_name_field.dart'; @@ -26,6 +26,7 @@ import 'package:ribn_toolkit/widgets/molecules/asset_short_name_field.dart'; import 'package:ribn_toolkit/widgets/molecules/note_field.dart'; import 'package:ribn_toolkit/widgets/molecules/recipient_field.dart'; import 'package:ribn_toolkit/widgets/molecules/sliding_segment_control.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title.dart'; /// The mint input page that allows the initiation of an mint asset transaction. class MintInputPage extends StatefulWidget { @@ -117,6 +118,8 @@ class _MintInputPageState extends State { }, buttonTwoText: 'Share', buttonTwoAction: () async => await showReceivingAddress(), + mobileHeight: MediaQuery.of(context).size.height * 0.63, + desktopHeight: 258, ); } @@ -220,7 +223,7 @@ class _MintInputPageState extends State { child: Column( children: [ /// Builds the title of the page. - const CustomPageTitle( + const CustomPageTextTitle( title: Strings.mint, hideBackArrow: true, ), @@ -263,7 +266,7 @@ class _MintInputPageState extends State { ), ), bottomNavigationBar: BottomReviewAction( - maxHeight: 145, + maxHeight: kIsWeb ? 120 : 143, children: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/presentation/transfers/poly_transfer_section.dart b/lib/presentation/transfers/poly_transfer_section.dart index 4addaf40..2a73b69a 100644 --- a/lib/presentation/transfers/poly_transfer_section.dart +++ b/lib/presentation/transfers/poly_transfer_section.dart @@ -1,3 +1,4 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -88,9 +89,10 @@ class _PolyTransferSectionState extends State { return WidgetsBinding.instance.addPostFrameCallback((_) { widget.updateButton( BottomReviewAction( - maxHeight: 145, + maxHeight: kIsWeb ? 120 : 143, children: Column( crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, children: [ // fee info for the tx FeeInfo(fee: widget.vm.networkFee), @@ -231,7 +233,7 @@ class _PolyTransferSectionState extends State { _validRecipientAddress.isNotEmpty && _amountController.text.isNotEmpty && _validAmount; return Padding( - padding: const EdgeInsets.only(top: 15), + padding: const EdgeInsets.only(top: 10, bottom: 10), child: Center( child: LargeButton( buttonWidth: double.infinity, diff --git a/lib/presentation/transfers/tx_review_page.dart b/lib/presentation/transfers/tx_review_page.dart index 64437e3a..66cc1148 100644 --- a/lib/presentation/transfers/tx_review_page.dart +++ b/lib/presentation/transfers/tx_review_page.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_svg/svg.dart'; @@ -21,8 +22,8 @@ import 'package:ribn_toolkit/constants/assets.dart'; import 'package:ribn_toolkit/constants/colors.dart'; import 'package:ribn_toolkit/constants/styles.dart'; import 'package:ribn_toolkit/widgets/atoms/custom_copy_button.dart'; -import 'package:ribn_toolkit/widgets/atoms/custom_page_title.dart'; import 'package:ribn_toolkit/widgets/atoms/large_button.dart'; +import 'package:ribn_toolkit/widgets/organisms/custom_page_text_title.dart'; /// The transaction review page. /// @@ -57,7 +58,7 @@ class TxReviewPage extends StatelessWidget { Column( children: [ // page title - const CustomPageTitle(title: Strings.review), + const CustomPageTextTitle(title: Strings.review), const SizedBox(height: 40), // review box Container( @@ -68,9 +69,17 @@ class TxReviewPage extends StatelessWidget { vertical: 15, ), decoration: BoxDecoration( - borderRadius: BorderRadius.circular(4.7), + borderRadius: BorderRadius.circular(11.6), color: RibnColors.whiteBackground, border: Border.all(color: RibnColors.lightGrey, width: 1), + boxShadow: const [ + BoxShadow( + color: RibnColors.greyShadow, + spreadRadius: 0, + blurRadius: 37.5, + offset: Offset(0, -6), + ), + ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -101,7 +110,7 @@ class TxReviewPage extends StatelessWidget { ), ), bottomNavigationBar: BottomReviewAction( - maxHeight: 173, + maxHeight: kIsWeb ? 148 : 174, children: Column( children: [ const SizedBox( diff --git a/lib/presentation/transfers/widgets/custom_input_field.dart b/lib/presentation/transfers/widgets/custom_input_field.dart index 67970dd9..78ebc7b1 100644 --- a/lib/presentation/transfers/widgets/custom_input_field.dart +++ b/lib/presentation/transfers/widgets/custom_input_field.dart @@ -46,6 +46,7 @@ class CustomInputField extends StatelessWidget { ? Padding( padding: const EdgeInsets.only(left: 4.0), child: CustomToolTip( + borderColor: Border.all(color: const Color(0xffE9E9E9)), toolTipChild: Text( informationText!, style: RibnToolkitTextStyles.toolTipTextStyle, diff --git a/lib/redux.dart b/lib/redux.dart index 9ce50007..2e2f4427 100644 --- a/lib/redux.dart +++ b/lib/redux.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'dart:convert'; - import 'package:flutter/foundation.dart'; import 'package:redux/redux.dart'; import 'package:ribn/middlewares/app_middleware.dart'; @@ -15,11 +14,13 @@ import 'package:ribn/repositories/transaction_repository.dart'; class Redux { static Store? _store; - static const OnboardingRespository onboardingRespository = OnboardingRespository(); + static const OnboardingRespository onboardingRespository = + OnboardingRespository(); static const LoginRepository loginRepository = LoginRepository(); static const MiscRepository miscRepository = MiscRepository(); static const KeychainRepository keychainRepository = KeychainRepository(); - static const TransactionRepository transactionRepository = TransactionRepository(); + static const TransactionRepository transactionRepository = + TransactionRepository(); static Store? get store { if (_store == null) { @@ -55,8 +56,10 @@ class Redux { static Future> getPersistedAppState() async { try { - final String persistedAppState = await PlatformLocalStorage.instance.getState(); - final Map mappedAppState = jsonDecode(persistedAppState) as Map; + final String persistedAppState = + await PlatformLocalStorage.instance.getState(); + final Map mappedAppState = + jsonDecode(persistedAppState) as Map; return mappedAppState; } catch (e) { return {}; @@ -64,13 +67,13 @@ class Redux { } /// Gets the persisted app state from local storage, and if valid, initializes AppState with the persisted state. - /// /// Otherwise, a new AppState is initialized depending on [initTestStore]. static Future getInitialAppState(bool initTestStore) async { try { final Map appState = await getPersistedAppState(); if (kIsWeb) { - final String? toplKey = await PlatformLocalStorage.instance.getKeyFromSessionStorage(); + final String? toplKey = + await PlatformLocalStorage.instance.getKeyFromSessionStorage(); appState['keychainState']['toplKey'] = toplKey; } return AppState.fromMap(appState); diff --git a/lib/router/root_router.dart b/lib/router/root_router.dart index 62f0650b..b0a44bdd 100644 --- a/lib/router/root_router.dart +++ b/lib/router/root_router.dart @@ -2,8 +2,12 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:ribn/constants/routes.dart'; import 'package:ribn/models/internal_message.dart'; +// import 'package:ribn/models/transaction_history_entry.dart'; import 'package:ribn/models/transfer_details.dart'; import 'package:ribn/presentation/asset_details/asset_details_page.dart'; +import 'package:ribn/presentation/authorize_and_sign/connect_dapp.dart'; +import 'package:ribn/presentation/authorize_and_sign/loading_dapp.dart'; +import 'package:ribn/presentation/authorize_and_sign/review_and_sign.dart'; import 'package:ribn/presentation/enable_page.dart'; import 'package:ribn/presentation/external_signing_page.dart'; import 'package:ribn/presentation/home/home_page.dart'; @@ -26,6 +30,8 @@ import 'package:ribn/presentation/onboarding/restore_wallet/enter_wallet_passwor import 'package:ribn/presentation/onboarding/restore_wallet/restore_wallet_page.dart'; import 'package:ribn/presentation/onboarding/restore_wallet/restore_with_topl_key_page.dart'; import 'package:ribn/presentation/settings/settings_page.dart'; +import 'package:ribn/presentation/transaction_history/transaction_history_details_page/transaction_history_details_page.dart'; +import 'package:ribn/presentation/transaction_history/transaction_history_page.dart'; import 'package:ribn/presentation/transfers/asset_transfer_page.dart'; import 'package:ribn/presentation/transfers/mint_input_page.dart'; import 'package:ribn/presentation/transfers/tx_confirmation_page.dart'; @@ -157,6 +163,7 @@ class RootRouter { case Routes.txReview: { final TransferDetails transferDetails = settings.arguments as TransferDetails; + if (kIsWeb) return pageRouteNotAnimated(TxReviewPage(transferDetails: transferDetails), settings); return pageRoute(TxReviewPage(transferDetails: transferDetails), settings); } @@ -185,6 +192,21 @@ class RootRouter { settings, ); } + case Routes.txHistory: + { + return pageRoute(const TxHistoryPage(), settings); + } + case Routes.txHistoryDetails: + final Map? transactionDetails = settings.arguments as Map; + + { + return pageRoute( + TxHistoryDetailsPage( + transactionDetails: transactionDetails, + ), + settings, + ); + } case Routes.settings: { if (kIsWeb) return pageRouteNotAnimated(const SettingsPage(), settings); @@ -207,6 +229,23 @@ class RootRouter { final String errorMessage = (settings.arguments ?? 'Unknown error occurred') as String; return errorRoute(errorMsg: errorMessage); } + + case Routes.connectDApp: + { + final InternalMessage pendingRequest = settings.arguments as InternalMessage; + return pageRouteNotAnimated(ConnectDApp(pendingRequest), settings); + } + case Routes.reviewAndSignDApp: + { + final InternalMessage pendingRequest = settings.arguments as InternalMessage; + if (kIsWeb) return pageRouteNotAnimated(ReviewAndSignDApp(pendingRequest), settings); + return pageRoute(ReviewAndSignDApp(pendingRequest), settings); + } + case Routes.loadingDApp: + { + final InternalMessage response = settings.arguments as InternalMessage; + return pageRouteNotAnimated(LoadingDApp(response: response), settings); + } default: return errorRoute(); } diff --git a/lib/utils.dart b/lib/utils.dart index 1960420e..c4d5484b 100644 --- a/lib/utils.dart +++ b/lib/utils.dart @@ -55,19 +55,23 @@ void validateRecipientAddress({ handleResult(result['success']); } -Future isBiometricsAuthenticationSupported(LocalAuthentication auth) async { +Future isBiometricsAuthenticationSupported( + LocalAuthentication auth,) async { final bool canCheckBiometrics = await auth.canCheckBiometrics; final bool isDeviceSupported = await auth.isDeviceSupported(); return canCheckBiometrics && isDeviceSupported; } -Future isBiometricsAuthenticationEnrolled(LocalAuthentication auth) async { +Future isBiometricsAuthenticationEnrolled( + LocalAuthentication auth,) async { final bool canCheckBiometrics = await auth.canCheckBiometrics; final bool isDeviceSupported = await auth.isDeviceSupported(); final List enrolledBiometrics = await auth.getAvailableBiometrics(); - return canCheckBiometrics && isDeviceSupported && enrolledBiometrics.isNotEmpty; + return canCheckBiometrics && + isDeviceSupported && + enrolledBiometrics.isNotEmpty; } Future authenticateWithBiometrics(LocalAuthentication auth) async { @@ -85,7 +89,8 @@ Future authenticateWithBiometrics(LocalAuthentication auth) async { Future isBiometricsTypeFingerprint(LocalAuthentication auth) async { final List enrolledBiometrics = await auth.getAvailableBiometrics(); - return enrolledBiometrics.contains(BiometricType.fingerprint) && enrolledBiometrics.isNotEmpty; + return enrolledBiometrics.contains(BiometricType.fingerprint) && + enrolledBiometrics.isNotEmpty; } void navigateToRoute(BuildContext context, String route) { @@ -93,10 +98,12 @@ void navigateToRoute(BuildContext context, String route) { } /// Adapt to screen height based on [scaleFactor]. -double adaptHeight(double scaleFactor) => MediaQueryData.fromWindow(window).size.height * scaleFactor; +double adaptHeight(double scaleFactor) => + MediaQueryData.fromWindow(window).size.height * scaleFactor; /// Adapt to screen width based on [scaleFactor]. -double adaptWidth(double scaleFactor) => MediaQueryData.fromWindow(window).size.width * scaleFactor; +double adaptWidth(double scaleFactor) => + MediaQueryData.fromWindow(window).size.width * scaleFactor; double deviceTopPadding() => MediaQueryData.fromWindow(window).padding.top; @@ -117,7 +124,8 @@ Future showReceivingAddress() async { context: Keys.navigatorKey.currentContext!, builder: (context) { return StoreConnector( - converter: (store) => store.state.keychainState.currentNetwork.addresses.first, + converter: (store) => + store.state.keychainState.currentNetwork.addresses.first, builder: (context, ribnAddress) { return CustomModal.renderCustomModal( context: Keys.navigatorKey.currentContext!, @@ -185,7 +193,8 @@ Future showReceivingAddress() async { final emptyStateBody = RichText( text: TextSpan( - style: RibnToolkitTextStyles.h4.copyWith(fontSize: kIsWeb ? 12 : 14, color: RibnColors.defaultText), + style: RibnToolkitTextStyles.h4 + .copyWith(fontSize: kIsWeb ? 12 : 14, color: RibnColors.defaultText), children: [ TextSpan( text: Strings.emptyStateBody.substring(0, 30), @@ -194,4 +203,4 @@ final emptyStateBody = RichText( TextSpan(text: Strings.emptyStateBody.substring(31, 111)), ], ), -); +); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a6b3c9e8..54215bca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "ribn", - "version": "0.1.2", + "version": "0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.1.2", + "name": "ribn", + "version": "0.3", "license": "ISC", "devDependencies": { "@babel/core": "^7.12.3", "@babel/eslint-parser": "^7.12.1", "@babel/eslint-plugin": "^7.12.1", - "@types/chrome": "^0.0.183", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "chrome-types": "^0.1.106", @@ -651,16 +651,6 @@ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, - "node_modules/@types/chrome": { - "version": "0.0.183", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.183.tgz", - "integrity": "sha512-sYI1qGY2oB6U5GFyuoSsVJsi2ytuEe92QrQTXQRwkISN8yn1gPY5qRq1XSwKN17yjvZTgxxeHw2ZoSHMti6qYg==", - "dev": true, - "dependencies": { - "@types/filesystem": "*", - "@types/har-format": "*" - } - }, "node_modules/@types/eslint": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", @@ -687,21 +677,6 @@ "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, - "node_modules/@types/filesystem": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz", - "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", - "dev": true, - "dependencies": { - "@types/filewriter": "*" - } - }, - "node_modules/@types/filewriter": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.29.tgz", - "integrity": "sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==", - "dev": true - }, "node_modules/@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", @@ -712,12 +687,6 @@ "@types/node": "*" } }, - "node_modules/@types/har-format": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.8.tgz", - "integrity": "sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ==", - "dev": true - }, "node_modules/@types/html-minifier-terser": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", @@ -4875,16 +4844,6 @@ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, - "@types/chrome": { - "version": "0.0.183", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.183.tgz", - "integrity": "sha512-sYI1qGY2oB6U5GFyuoSsVJsi2ytuEe92QrQTXQRwkISN8yn1gPY5qRq1XSwKN17yjvZTgxxeHw2ZoSHMti6qYg==", - "dev": true, - "requires": { - "@types/filesystem": "*", - "@types/har-format": "*" - } - }, "@types/eslint": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", @@ -4911,21 +4870,6 @@ "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, - "@types/filesystem": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz", - "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", - "dev": true, - "requires": { - "@types/filewriter": "*" - } - }, - "@types/filewriter": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.29.tgz", - "integrity": "sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==", - "dev": true - }, "@types/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", @@ -4936,12 +4880,6 @@ "@types/node": "*" } }, - "@types/har-format": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.8.tgz", - "integrity": "sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ==", - "dev": true - }, "@types/html-minifier-terser": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", diff --git a/package.json b/package.json index 129934b6..b54d06ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ribn", - "version": "0.2.1", + "version": "0.3", "description": "Topl's Wallet", "main": "index.js", "directories": { diff --git a/pubspec.lock b/pubspec.lock index 6a2fbb32..a0d73dc0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -35,7 +35,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.3.1" + version: "3.3.5" args: dependency: transitive description: @@ -49,14 +49,14 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" back_button_interceptor: dependency: transitive description: name: back_button_interceptor url: "https://pub.dartlang.org" source: hosted - version: "6.0.1" + version: "6.0.2" barcode: dependency: transitive description: @@ -89,9 +89,9 @@ packages: dependency: "direct main" description: path: "." - ref: dev - resolved-ref: "9c548499d91335cc68321c616bb4abeb6db31411" - url: "https://github.com/Topl/BramblDart.git" + ref: TSDK-133 + resolved-ref: fa1dc12f568120b60d1b2875c299a0efd9458925 + url: "https://github.com/Topl/BramblDart" source: git version: "0.0.1" build: @@ -100,14 +100,14 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.3.1" build_config: dependency: transitive description: name: build_config url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" build_daemon: dependency: transitive description: @@ -121,21 +121,21 @@ packages: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.10" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "2.3.0" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.3" + version: "7.2.7" built_collection: dependency: transitive description: @@ -149,21 +149,21 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.4.1" + version: "8.4.2" built_value_generator: dependency: "direct dev" description: name: built_value_generator url: "https://pub.dartlang.org" source: hosted - version: "8.4.1" + version: "8.4.2" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: @@ -198,14 +198,14 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" code_builder: dependency: transitive description: name: code_builder url: "https://pub.dartlang.org" source: hosted - version: "4.2.0" + version: "4.3.0" collection: dependency: transitive description: @@ -219,14 +219,14 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.1" coverage: dependency: transitive description: name: coverage url: "https://pub.dartlang.org" source: hosted - version: "1.3.2" + version: "1.6.1" crypto: dependency: transitive description: @@ -247,7 +247,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.2.3" + version: "2.2.4" device_frame: dependency: transitive description: @@ -268,28 +268,28 @@ packages: name: docker_process url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" dotted_border: dependency: "direct main" description: name: dotted_border url: "https://pub.dartlang.org" source: hosted - version: "2.0.0+2" + version: "2.0.0+3" dropdown_button2: dependency: transitive description: name: dropdown_button2 url: "https://pub.dartlang.org" source: hosted - version: "1.7.2" + version: "1.9.2" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" ffi: dependency: transitive description: @@ -329,7 +329,21 @@ packages: name: flutter_keyboard_visibility url: "https://pub.dartlang.org" source: hosted - version: "5.3.0" + version: "5.4.0" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" flutter_keyboard_visibility_platform_interface: dependency: transitive description: @@ -344,6 +358,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" flutter_launcher_icons: dependency: "direct dev" description: @@ -399,35 +420,35 @@ packages: name: flutter_secure_storage_linux url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.2" flutter_secure_storage_macos: dependency: transitive description: name: flutter_secure_storage_macos url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.2" flutter_secure_storage_platform_interface: dependency: transitive description: name: flutter_secure_storage_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" flutter_secure_storage_web: dependency: transitive description: name: flutter_secure_storage_web url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.1" flutter_secure_storage_windows: dependency: transitive description: name: flutter_secure_storage_windows url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" flutter_svg: dependency: "direct main" description: @@ -451,7 +472,7 @@ packages: name: freezed_annotation url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" frontend_server_client: dependency: transitive description: @@ -466,13 +487,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.6.5" + get_it: + dependency: "direct main" + description: + name: get_it + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.0" glob: dependency: transitive description: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" go_router: dependency: transitive description: @@ -487,13 +515,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.3.3" + googleapis_auth: + dependency: transitive + description: + name: googleapis_auth + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" graphs: dependency: transitive description: name: graphs url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" grinder: dependency: transitive description: @@ -501,6 +536,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.9.2" + grpc: + dependency: "direct main" + description: + name: grpc + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" http: dependency: transitive description: @@ -508,6 +550,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.13.5" + http2: + dependency: transitive + description: + name: http2 + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" http_multi_server: dependency: transitive description: @@ -521,7 +570,7 @@ packages: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.0.2" image: dependency: transitive description: @@ -530,7 +579,7 @@ packages: source: hosted version: "3.1.3" intl: - dependency: transitive + dependency: "direct main" description: name: intl url: "https://pub.dartlang.org" @@ -556,7 +605,14 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.6.0" + version: "4.7.0" + lazy_load_scrollview: + dependency: "direct main" + description: + name: lazy_load_scrollview + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" lint: dependency: transitive description: @@ -577,7 +633,14 @@ packages: name: loader_overlay url: "https://pub.dartlang.org" source: hosted - version: "2.0.10" + version: "2.1.0" + loading_overlay: + dependency: "direct main" + description: + name: loading_overlay + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" local_auth: dependency: "direct main" description: @@ -591,70 +654,70 @@ packages: name: local_auth_android url: "https://pub.dartlang.org" source: hosted - version: "1.0.11" + version: "1.0.16" local_auth_ios: dependency: transitive description: name: local_auth_ios url: "https://pub.dartlang.org" source: hosted - version: "1.0.9" + version: "1.0.10" local_auth_platform_interface: dependency: transitive description: name: local_auth_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.4" + version: "1.0.5" local_auth_windows: dependency: transitive description: name: local_auth_windows url: "https://pub.dartlang.org" source: hosted - version: "1.0.3" + version: "1.0.4" logging: dependency: transitive description: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.0" matcher: dependency: transitive description: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.3" mockito: dependency: "direct main" description: name: mockito url: "https://pub.dartlang.org" source: hosted - version: "5.3.0" + version: "5.3.2" nested: dependency: transitive description: @@ -689,7 +752,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" path_drawing: dependency: transitive description: @@ -717,7 +780,7 @@ packages: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.20" + version: "2.0.22" path_provider_ios: dependency: transitive description: @@ -745,7 +808,7 @@ packages: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.5" path_provider_windows: dependency: transitive description: @@ -759,7 +822,7 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "5.0.0" + version: "5.1.0" pinenacl: dependency: transitive description: @@ -780,14 +843,14 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.3" pointycastle: dependency: transitive description: name: pointycastle url: "https://pub.dartlang.org" source: hosted - version: "3.6.1" + version: "3.6.2" pool: dependency: transitive description: @@ -809,20 +872,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" + protobuf: + dependency: transitive + description: + name: protobuf + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" provider: dependency: transitive description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "6.0.3" + version: "6.0.5" pub_semver: dependency: transitive description: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.3" pubspec_parse: dependency: transitive description: @@ -862,8 +932,8 @@ packages: dependency: "direct main" description: path: "." - ref: dev - resolved-ref: "991c51e3e01a61d9ca092be291f9dcf0cb757f43" + ref: "0.4-front-end" + resolved-ref: "62ba848e6d0044f39000b77fc656bd4c11e55506" url: "https://github.com/Topl/ribn-toolkit" source: git version: "1.0.0+1" @@ -887,7 +957,7 @@ packages: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.3.2" + version: "1.4.0" shelf_packages_handler: dependency: transitive description: @@ -908,7 +978,7 @@ packages: name: shelf_web_socket url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.3" shimmer_animation: dependency: "direct main" description: @@ -927,28 +997,28 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.2.2" + version: "1.2.6" source_map_stack_trace: dependency: transitive description: name: source_map_stack_trace url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" source_maps: dependency: transitive description: name: source_maps url: "https://pub.dartlang.org" source: hosted - version: "0.10.10" + version: "0.10.11" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.9.0" stack_trace: dependency: transitive description: @@ -983,49 +1053,49 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test: dependency: transitive description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.21.1" + version: "1.21.4" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.9" + version: "0.4.12" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.4.13" + version: "0.4.16" test_process: dependency: transitive description: name: test_process url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.3" timing: dependency: transitive description: @@ -1060,14 +1130,14 @@ packages: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.1.5" + version: "6.1.7" url_launcher_android: dependency: transitive description: name: url_launcher_android url: "https://pub.dartlang.org" source: hosted - version: "6.0.18" + version: "6.0.22" url_launcher_ios: dependency: transitive description: @@ -1095,7 +1165,7 @@ packages: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" url_launcher_web: dependency: transitive description: @@ -1123,7 +1193,7 @@ packages: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "3.0.6" + version: "3.0.7" vector_math: dependency: transitive description: @@ -1137,14 +1207,14 @@ packages: name: vm_service url: "https://pub.dartlang.org" source: hosted - version: "8.3.0" + version: "9.4.0" watcher: dependency: transitive description: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" wave: dependency: transitive description: @@ -1225,5 +1295,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.17.0 <3.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=3.0.1" diff --git a/pubspec.yaml b/pubspec.yaml index 181c1143..c1039941 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.2.1+1 +version: 0.3.2 environment: sdk: ">=2.12.0 <3.0.0" @@ -41,10 +41,6 @@ dependencies: rxdart: ^0.26.0 step_progress_indicator: ^1.0.1 steps_indicator: ^1.3.0 - brambldart: - git: - url: https://github.com/Topl/BramblDart.git - ref: dev bip_topl: ^0.0.2 google_fonts: ^2.1.0 flutter_svg: ^1.0.3 @@ -58,8 +54,16 @@ dependencies: ribn_toolkit: git: url: https://github.com/Topl/ribn-toolkit - ref: dev + ref: 0.4-front-end +# ribn_toolkit: +# path: ../ribn_toolkit + brambldart: + git: + url: https://github.com/Topl/BramblDart + ref: TSDK-133 + # Remove the ref once Selby's branch above has been merged into main shimmer_animation: ^2.1.0+1 + grpc: ^3.0.2 path_provider: ^2.0.9 flutter_secure_storage: ^5.0.2 local_auth: ^2.0.0 @@ -68,7 +72,10 @@ dependencies: app_settings: ^4.1.8 loader_overlay: ^2.0.7 flutter_keyboard_visibility: ^5.3.0 - + intl: ^0.17.0 + lazy_load_scrollview: ^1.3.0 + get_it: ^7.2.0 + loading_overlay: ^0.3.0 dev_dependencies: flutter_test: sdk: flutter diff --git a/test/reducer_test.dart b/test/reducer_test.dart index 04739389..4b8b5673 100644 --- a/test/reducer_test.dart +++ b/test/reducer_test.dart @@ -13,14 +13,14 @@ import 'package:ribn/models/app_state.dart'; import 'package:ribn/models/ribn_address.dart'; import 'package:ribn/redux.dart'; import 'package:ribn/repositories/keychain_repository.dart'; - import 'test_data.dart'; void main() { group('AppState reducer', () { final String testMnemonic = testData['mnemonic']!; final String testKeyStore = testData['keyStoreJson']!; - final Uint8List testToplExtendedPrivKey = Uint8List.fromList(toList(testData['toplExtendedPrvKey']!)); + final Uint8List testToplExtendedPrivKey = + Uint8List.fromList(toList(testData['toplExtendedPrvKey']!)); late Store testStore; setUp(() async { await Redux.initStore(initTestStore: false); @@ -52,7 +52,8 @@ void main() { ), ); expect(testStore.state.keychainState.keyStoreJson, testKeyStore); - expect(testStore.state.keychainState.hdWallet!.rootVerifyKey, hdWallet.rootVerifyKey); + expect(testStore.state.keychainState.hdWallet!.rootVerifyKey, + hdWallet.rootVerifyKey,); }); test('update network with addresses', () async { const KeychainRepository keychainRepo = KeychainRepository(); @@ -64,17 +65,22 @@ void main() { ); final Map> networkAddresses = {}; testStore.state.keychainState.networks.forEach((networkName, network) { - networkAddresses[networkName] = [keychainRepo.generateAddress(hdWallet, networkId: network.networkId)]; + networkAddresses[networkName] = [ + keychainRepo.generateAddress(hdWallet, networkId: network.networkId) + ]; }); testStore.dispatch(UpdateNetworksWithAddressesAction(networkAddresses)); testStore.state.keychainState.networks.forEach((networkName, network) { - listEquals(testStore.state.keychainState.networks[networkName]!.addresses, networkAddresses[networkName]); + listEquals( + testStore.state.keychainState.networks[networkName]!.addresses, + networkAddresses[networkName],); }); }); test('toggle network', () async { testStore.dispatch(UpdateCurrentNetworkAction(NetworkUtils.private)); - expect(testStore.state.keychainState.currentNetwork.networkName, NetworkUtils.private); + expect(testStore.state.keychainState.currentNetwork.networkName, + NetworkUtils.private,); }); }); }); -} +} \ No newline at end of file diff --git a/web/interop/ext_storage.js b/web/interop/ext_storage.js index 0fd3545c..5806d236 100644 --- a/web/interop/ext_storage.js +++ b/web/interop/ext_storage.js @@ -1,3 +1,4 @@ + var ext_storage = { /** * Uses the `chrome.storage` api to get data from extension's local storage. @@ -64,5 +65,5 @@ var ext_storage = { */ extClearSessionStorage: async () => { await chrome.storage.session.clear(); - } + }, }; \ No newline at end of file diff --git a/web/interop/ext_utils.js b/web/interop/ext_utils.js index 08ab14e6..75230dea 100644 --- a/web/interop/ext_utils.js +++ b/web/interop/ext_utils.js @@ -1,55 +1,73 @@ - var ext_utils = { - getAppVersion: () => { - try { - return chrome.runtime.getManifest().version; - } catch (e) { - return 'Dev'; - } - }, - deleteWallet: () => { - chrome.storage.local.clear(function () { - window.close(); - }); - }, + logToConsole: (/** @type {any} */ dynamic) => { + console.log(dynamic); + }, - /** - * - * Downloads a new file with name as `filename` and content as `text`. - * - * @param {string} filename - * @param {string} text - */ - downloadAsFile: (filename, text) => { - var element = document.createElement('a'); - element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); - element.setAttribute('download', filename); - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - document.body.removeChild(element); - }, - openAppInNewTab: async () => { - await chrome.tabs.create({ url: chrome.runtime.getURL("index.html"), active: true }); - }, - getCurrentView: async () => { - try { - const currentTab = await chrome.tabs.getCurrent(); - if (currentTab == undefined) { - return 'extension' - } - else if (currentTab.id) { - return 'tab' - } - return 'invalid'; - } catch (e) { - return 'debug'; - } - }, - /** - * Creates a new alarm to trigger 60 minutes from now. - */ - createSessionAlarm: () => { - chrome.alarms.create('loginSession', {delayInMinutes: 60}); - } -}; \ No newline at end of file + getALlowedString: () => { + return ""; + }, + getAppVersion: () => { + try { + return chrome.runtime.getManifest().version; + } catch (e) { + return "Dev"; + } + }, + deleteWallet: () => { + chrome.storage.local.clear(function () { + window.close(); + }); + }, + /** + * Clears AllowList + */ + deleteAllowList: async () => { + await chrome.storage.local.set({'allowList': []}); + }, + /** + * Gets full AllowList + */ + retrieveAllowList: async () => { + let storage = await chrome.storage.local.get(undefined); + storage = storage ? storage.allowList : []; + return(storage); + }, + /** + * + * Downloads a new file with name as `filename` and content as `text`. + * + * @param {string} filename + * @param {string} text + */ + downloadAsFile: (filename, text) => { + var element = document.createElement("a"); + element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(text)); + element.setAttribute("download", filename); + element.style.display = "none"; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + }, + openAppInNewTab: async () => { + await chrome.tabs.create({ url: chrome.runtime.getURL("index.html"), active: true }); + }, + getCurrentView: async () => { + try { + const currentTab = await chrome.tabs.getCurrent(); + if (currentTab == undefined) { + return "extension"; + } else if (currentTab.id) { + return "tab"; + } + return "invalid"; + } catch (e) { + return "debug"; + } + }, + /** + * Creates a new alarm to trigger 60 minutes from now. + */ + createSessionAlarm: () => { + chrome.alarms.create("loginSession", { delayInMinutes: 60 }); + }, +}; diff --git a/web/manifest.json b/web/manifest.json index c049eefc..4d7ae7eb 100644 --- a/web/manifest.json +++ b/web/manifest.json @@ -1,7 +1,7 @@ { "name": "Ribn", "description": "Web wallet for Topl Blockchain", - "version": "0.2.1", + "version": "0.4.0", "content_security_policy": { "extension_pages": "script-src 'self'; object-src 'self'" }, @@ -33,6 +33,5 @@ "run_at": "document_start" } ], - "manifest_version": 3 } diff --git a/web/src/api/messenger.ts b/web/src/api/messenger.ts index fed84160..0291658e 100644 --- a/web/src/api/messenger.ts +++ b/web/src/api/messenger.ts @@ -1,234 +1,331 @@ -import { API_ERRORS, API_METHODS, INTERNAL_METHODS, SENDERS, TARGET } from "../utils/configs"; -import { APIRequest, InternalMessage } from "../utils/types"; -import { createPopup } from "./popup"; -import { ExtensionStorage } from "./storage"; +import {API_ERRORS, API_METHODS, INTERNAL_METHODS, SENDERS, TARGET} from "../utils/configs"; +import {APIRequest, InternalMessage} from "../utils/types"; +import {createPopup} from "./popup"; +import {ExtensionStorage} from "./storage"; + export const Messenger = { - /** - * Forwards request from the web-page to the content-script. - * Attaches a listener to listen for response from the content-script. - */ - forwardToContentScript: ({ method, data }: APIRequest): Promise => { - return new Promise((resolve, reject) => { - const requestId: string = Math.random().toString(36).substr(2); - // listen for message-events from the content-script - window.addEventListener("message", function responseHandler(result) { - const response: InternalMessage = result.data; - if ( - typeof response !== "object" || - response === null || - !response.target || - response.target !== TARGET || - !response.id || - response.id !== requestId || - !response.sender || - response.sender !== SENDERS.ribn - ) - return; - window.removeEventListener("message", responseHandler); - if (response.error) reject(response.error); - else resolve(response); - }); - // post message to the content-script - window.postMessage( - { - method, - data, - target: TARGET, - sender: SENDERS.webpage, - id: requestId, - }, - window.origin - ); - }); - }, - createBackgroundMessagingController: () => new BackgroundMessenger(), - createContentMessagingController: () => new ContentMessenger(), + /** + * Forwards request from the web-page to the content-script. + * Attaches a listener to listen for response from the content-script. + */ + forwardToContentScript: ({method, data}: APIRequest): Promise => { + return new Promise((resolve, reject) => { + const requestId: string = Math.random().toString(36).substr(2); + // listen for message-events from the content-script + window.addEventListener("message", function responseHandler(result) { + const response: InternalMessage = result.data; + if ( + typeof response !== "object" || + response === null || + !response.target || + response.target !== TARGET || + !response.id || + response.id !== requestId || + !response.sender || + response.sender !== SENDERS.ribn + ) + return; + window.removeEventListener("message", responseHandler); + if (response.error) reject(response.error); + else resolve(response); + }); + // post message to the content-script + window.postMessage( + { + method, + data, + target: TARGET, + sender: SENDERS.webpage, + id: requestId, + }, + window.origin + ); + }); + }, + createBackgroundMessagingController: () => new BackgroundMessenger(), + createContentMessagingController: () => new ContentMessenger(), }; /** * Content Messenger */ class ContentMessenger { - public forwardToBackground = (request: InternalMessage) => { - return new Promise((resolve) => - chrome.runtime.sendMessage(request, {}, (response) => { - resolve(response); - }) - ); - }; - /** - * Initializes a `chrome.runtime.onMessage` listener to listen for messages sent from the background script. - * In addition, also initializes a message-event listener on the `window` to listen for messages sent form the web-page. - * - * The primary purpose here is to relay messages between the web-page and the extension. - */ - public initListeners = () => { - chrome.runtime.onMessage.addListener((message: InternalMessage) => { - if ( - typeof message !== "object" || - message === null || - !message.target || - message.target !== TARGET || - !message.sender || - message.sender !== SENDERS.ribn || - !message.event - ) - return; - window.postMessage(message); - return true; - }); - // listen to calls from webpage - window.addEventListener("message", async (msg) => { - const request: InternalMessage = msg.data; - if ( - typeof request !== "object" || - request === null || - !request.method || - !request.target || - request.target !== TARGET || - !request.sender || - request.sender !== SENDERS.webpage - ) - return; - request.origin = window.origin; - const isEnabledResponse: InternalMessage = await this.forwardToBackground({ - ...request, - method: API_METHODS.isEnabled, - }); - const isOriginAllowed = (isEnabledResponse.data as Record)["enabled"]; - const permissionRequired = ![API_METHODS.enable, API_METHODS.isEnabled].includes(request.method); - if (request.method == API_METHODS.isEnabled) { - window.postMessage(isEnabledResponse); - } else if (!isOriginAllowed && permissionRequired) { - window.postMessage({ - ...request, - sender: SENDERS.ribn, - error: { - message: API_ERRORS.accessDenied, - }, - }); - } else { - this.forwardToBackground(request).then((response) => { - window.postMessage(response); - }); - } - }); - }; + public forwardToBackground = (request: InternalMessage) => { + return new Promise((resolve) => + chrome.runtime.sendMessage(request, {}, (response) => { + resolve(response); + }) + ); + }; + /** + * Initializes a `chrome.runtime.onMessage` listener to listen for messages sent from the background script. + * In addition, also initializes a message-event listener on the `window` to listen for messages sent form the web-page. + * + * The primary purpose here is to relay messages between the web-page and the extension. + */ + public initListeners = () => { + chrome.runtime.onMessage.addListener((message: InternalMessage) => { + if ( + typeof message !== "object" || + message === null || + !message.target || + message.target !== TARGET || + !message.sender || + message.sender !== SENDERS.ribn || + !message.event + ) + return; + window.postMessage(message); + return true; + }); + // listen to calls from webpage + window.addEventListener("message", async (msg) => { + const request: InternalMessage = msg.data; + if ( + typeof request !== "object" || + request === null || + !request.method || + !request.target || + request.target !== TARGET || + !request.sender || + request.sender !== SENDERS.webpage + ) + return; + request.origin = window.origin; + const isEnabledResponse: InternalMessage = await this.forwardToBackground({ + ...request, + method: API_METHODS.isEnabled, + }); + const isOriginAllowed = (isEnabledResponse.data as Record)["enabled"]; + const permissionRequired = ![API_METHODS.enable, API_METHODS.isEnabled, API_METHODS.authorize].includes(request.method); + if (request.method == API_METHODS.isEnabled) { + window.postMessage(isEnabledResponse); + } else if (!isOriginAllowed && permissionRequired) { + window.postMessage({ + ...request, + sender: SENDERS.ribn, + error: { + message: API_ERRORS.accessDenied, + }, + }); + } else { + this.forwardToBackground(request).then((response) => { + window.postMessage(response); + }); + } + }); + }; } /** * BackgroundMessenger */ class BackgroundMessenger { - /** Responders for all the API methods available to web-pages.*/ - public responders = { - signTx: async (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { - createPopup() - .then((tab: chrome.tabs.Tab) => this.handlePopupConnection(request, tab)) - .then((result) => { - sendResponse(result); - }); - }, - enable: (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { - createPopup() - .then((tab) => this.handlePopupConnection(request, tab)) - .then(async (result) => { - if (result.data && result.data["enabled"] == true) { - await ExtensionStorage.addToAllowList(request.origin as string); - } - sendResponse(result); - }); - }, - isEnabled: (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { - ExtensionStorage.isOriginAllowed(request.origin as string).then((isAllowed) => { - sendResponse({ - ...request, - sender: SENDERS.ribn, - data: { - enabled: isAllowed, - }, - }); - }); - }, - }; - /** - * Opens a long-lived connection port with the popup and attaches listeners. - */ - public handlePopupConnection = (request: InternalMessage, tab: chrome.tabs.Tab): Promise => { - return new Promise((resolve) => { - chrome.runtime.onConnect.addListener(function popupConnectionHandler(port: chrome.runtime.Port) { - port.onMessage.addListener(function popupMessageHandler(msg: string) { - const parsedMsg = JSON.parse(msg); - if (parsedMsg.method == INTERNAL_METHODS.checkPendingRequest) { - port.postMessage(JSON.stringify(request)); - } else if (parsedMsg.method == INTERNAL_METHODS.returnResponse) { - resolve(parsedMsg); - if (tab.id) chrome.tabs.remove(tab.id); - } - // If the user closed window, remove listeners - chrome.tabs.onRemoved.addListener(function popupTabsHandler(tabId: number) { - if (tab.id !== tabId) return; - resolve({ - ...request, - id: request.id, - target: TARGET, - sender: SENDERS.ribn, - error: { - message: API_ERRORS.refused, - }, - }); - chrome.runtime.onConnect.removeListener(popupConnectionHandler); - port.onMessage.removeListener(popupMessageHandler); - chrome.tabs.onRemoved.removeListener(popupTabsHandler); - }); - }); - }); - }); - }; + /** Responders for all the API methods available to web-pages.*/ + public responders = { + signTx: async (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + createPopup() + .then((tab: chrome.tabs.Tab) => this.handlePopupConnection(request, tab)) + .then((result) => { + sendResponse(result); + }); + }, + enable: (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + ExtensionStorage.isOriginAllowed(request.origin as string).then((isAllowed) => { + if (!isAllowed) { + createPopup() + .then((tab) => this.handlePopupConnection(request, tab)) + .then(async (result) => { + if (result.data && result.data["enabled"] == true) { + await ExtensionStorage.addToAllowList(request.origin as string); + } + sendResponse(result); + }); + } else { + sendResponse({ + ...request, + sender: SENDERS.ribn, + data: { + enabled: isAllowed, + }, + }); + } + }); + }, + isEnabled: (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + ExtensionStorage.isOriginAllowed(request.origin as string).then((isAllowed) => { + sendResponse({ + ...request, + sender: SENDERS.ribn, + data: { + enabled: isAllowed, + }, + }); + }); + }, + //v2 + authorize: (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + ExtensionStorage.isOriginAllowed(request.origin as string).then((isAllowed) => { + if (!isAllowed) { + createPopup() + .then((tab) => this.handlePopupConnection(request, tab)) + .then(async (result) => { + if (result.data && result.data["enabled"] == true) { + await ExtensionStorage.addToAllowList(request.origin as string); + } + sendResponse(result); + }); + } else { + sendResponse({ + ...request, + sender: SENDERS.ribn, + data: { + walletAddress: "", + enabled: isAllowed, + + }, + }); + } + }); + }, + getBalance: (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + createPopup() + .then((tab: chrome.tabs.Tab) => this.handlePopupConnection(request, tab)) + .then((result) => { + sendResponse(result); + }); + sendResponse({ + ...request, + sender: SENDERS.ribn, + data: { +// message: window.randomFunctionName(), + message: "", + }}); + }, + signTransaction: async (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + createPopup() + .then((tab: chrome.tabs.Tab) => this.handlePopupConnection(request, tab)) + .then((result) => { + sendResponse(result); + }); + }, + revoke: async (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + await ExtensionStorage.removeFromAllowList(request.origin as string); + sendResponse({ + ...request, + sender: SENDERS.ribn, + data: { + message: "permissions revoked", + } + }); + }, + clearList: async (request: InternalMessage, sendResponse: (response?: InternalMessage) => void) => { + await ExtensionStorage.clearAllowList(); + sendResponse({ + ...request, + sender: SENDERS.ribn, + data: { + message: "All permissions revoked", + } + }); + }, + }; + + /** + * Opens a long-lived connection port with the popup and attaches listeners. + */ + public handlePopupConnection = (request: InternalMessage, tab: chrome.tabs.Tab): Promise => { + return new Promise((resolve) => { + chrome.runtime.onConnect.addListener(function popupConnectionHandler(port: chrome.runtime.Port) { + port.onMessage.addListener(function popupMessageHandler(msg: string) { + const parsedMsg = JSON.parse(msg); + if (parsedMsg.method == INTERNAL_METHODS.checkPendingRequest) { + port.postMessage(JSON.stringify(request)); + } else if (parsedMsg.method == INTERNAL_METHODS.returnResponse) { + resolve(parsedMsg); + if (tab.id) chrome.tabs.remove(tab.id); + } + // If the user closed window, remove listeners + chrome.tabs.onRemoved.addListener(function popupTabsHandler(tabId: number) { + if (tab.id !== tabId) return; + resolve({ + ...request, + id: request.id, + target: TARGET, + sender: SENDERS.ribn, + error: { + message: API_ERRORS.refused, + }, + }); + chrome.runtime.onConnect.removeListener(popupConnectionHandler); + port.onMessage.removeListener(popupMessageHandler); + chrome.tabs.onRemoved.removeListener(popupTabsHandler); + }); + }); + }); + }); + }; - /** - * Initializes a listener for one-time messages and responds according to the `request.method` specified. - * This listener can receive messages from an external source or the extension popup. - * - * It is primarily used to respond to API calls from external web-pages. - * - * Notes: - * - The callback for `chrome.runtime.onMessage.addListener` must `return true` in order for async message-passing to work. - * - This listener does not recognize `async/await` keywords. - */ - public initListener = () => { - chrome.runtime.onMessage.addListener((request: InternalMessage, _, sendResponse: (response?: InternalMessage) => void) => { - if (request.sender !== SENDERS.webpage) sendResponse({ - ...request, - error: { - message: API_ERRORS.refused, - }, - }); - switch (request.method) { - case API_METHODS.signTx: { - this.responders.signTx(request, sendResponse); - break; - } - case API_METHODS.enable: { - this.responders.enable(request, sendResponse); - break; - } - case API_METHODS.isEnabled: { - this.responders.isEnabled(request, sendResponse); - break; - } - default: { - sendResponse({ - ...request, - error: { - message: API_ERRORS.invalidRequest, - } - }); - } - } - return true; - }); - }; + /** + * Initializes a listener for one-time messages and responds according to the `request.method` specified. + * This listener can receive messages from an external source or the extension popup. + * + * It is primarily used to respond to API calls from external web-pages. + * + * Notes: + * - The callback for `chrome.runtime.onMessage.addListener` must `return true` in order for async message-passing to work. + * - This listener does not recognize `async/await` keywords. + */ + public initListener = () => { + chrome.runtime.onMessage.addListener((request: InternalMessage, _, sendResponse: (response?: InternalMessage) => void) => { + if (request.sender !== SENDERS.webpage) sendResponse({ + ...request, + error: { + message: API_ERRORS.refused, + }, + }); + switch (request.method) { + case API_METHODS.signTx: { + this.responders.signTx(request, sendResponse); + break; + } + case API_METHODS.enable: { + this.responders.enable(request, sendResponse); + break; + } + case API_METHODS.isEnabled: { + this.responders.isEnabled(request, sendResponse); + break; + } + // v2 + case API_METHODS.authorize: { + this.responders.authorize(request, sendResponse); + break; + } + case API_METHODS.getBalance: { + this.responders.getBalance(request, sendResponse); + break; + } + case API_METHODS.signTransaction: { + this.responders.signTransaction(request, sendResponse); + break; + } + case API_METHODS.revoke: { + this.responders.revoke(request, sendResponse); + break; + } + default: { + sendResponse({ + ...request, + error: { + message: API_ERRORS.invalidRequest, + } + }); + } + } + return true; + }); + }; } diff --git a/web/src/api/storage.ts b/web/src/api/storage.ts index 0e2757a0..74272fcf 100644 --- a/web/src/api/storage.ts +++ b/web/src/api/storage.ts @@ -8,9 +8,26 @@ export const ExtensionStorage = { await ExtensionStorage.setStorage("allowList", currentAllowList); } }, + removeFromAllowList: async (url: string) => { + const currentAllowList: string[] = await ExtensionStorage.getAllowList(); + if (currentAllowList.includes(url)) { + const index = currentAllowList.findIndex((_) => _ === url); + currentAllowList.splice(index, 1); + await ExtensionStorage.setStorage("allowList", currentAllowList); + } + }, getAllowList: async (): Promise => { const storage = await ExtensionStorage.getStorage(); - return storage["allowList"] ? storage["allowList"] : []; + console.log("allow list: ", storage.allowList); + return storage.allowList ?? []; + }, + getAllowedString: async (): Promise => { + const storage = await ExtensionStorage.getStorage(); + console.log("allow list: ", storage.allowList.toString()); + return storage.allowList.toString() ?? ""; + }, + clearAllowList: async () => { + await ExtensionStorage.setStorage("allowList", []); }, getStorage: () => { return new Promise>((resolve, reject) => { @@ -24,9 +41,9 @@ export const ExtensionStorage = { setStorage: async (key: string, val: any) => { const storage = await ExtensionStorage.getStorage(); storage[key] = val; - await chrome.storage.local.set({...storage }); + await chrome.storage.local.set({ ...storage }); }, - + isOriginAllowed: async (originUrl: string) => { const currentAllowList: string[] = await ExtensionStorage.getAllowList(); return currentAllowList.some((allowedUrl) => allowedUrl.includes(originUrl)); diff --git a/web/src/api/webpage.ts b/web/src/api/webpage.ts index a3f8d337..b587fb2a 100644 --- a/web/src/api/webpage.ts +++ b/web/src/api/webpage.ts @@ -34,3 +34,51 @@ export const isEnabled = async () => { return err; } }; + +//v2 + +export const authorize = async (name: string, icon: string) => { + try { + const result = await Messenger.forwardToContentScript({ + method: API_METHODS.authorize, + data: { name: name, url: icon }, + }); + return result.data; + } catch (err) { + return err; + } +}; + +export const getBalance = async () => { + try { + const result = await Messenger.forwardToContentScript({ + method: API_METHODS.getBalance, + }); + return result.data; + } catch (err) { + return err; + } +}; + +export const signTransaction = async (rawTx: any) => { + try { + const result = await Messenger.forwardToContentScript({ + method: API_METHODS.signTransaction, + data: rawTx, + }); + return result.data; + } catch (err) { + return err; + } +}; + +export const revoke = async () => { + try { + const result = await Messenger.forwardToContentScript({ + method: API_METHODS.revoke, + }); + return result.data; + } catch (err) { + return err; + } +}; diff --git a/web/src/scripts/injected.ts b/web/src/scripts/injected.ts index ae4d9b99..cb79f2c5 100644 --- a/web/src/scripts/injected.ts +++ b/web/src/scripts/injected.ts @@ -1,7 +1,15 @@ -import { enable, signTx, isEnabled } from "../api/webpage"; +import {enable, signTx, isEnabled, getBalance, authorize, signTransaction, revoke} from "../api/webpage"; window["topl"] = { enable: () => enable(), isEnabled: () => isEnabled(), signTx: (rawTx: any) => signTx(rawTx), + + //v2 + authorize: (name: string, icon: string) => authorize(name, icon), + getBalance: () => getBalance(), + signTransaction: (rawTx: any) => signTransaction(rawTx), + + revoke: () => revoke(), + }; diff --git a/web/src/utils/configs.ts b/web/src/utils/configs.ts index ae441049..2ceaa584 100644 --- a/web/src/utils/configs.ts +++ b/web/src/utils/configs.ts @@ -1,33 +1,41 @@ export const TOPL_URLS = ['https://annulus.topl.services', 'https://lattice.topl.services']; export const API_METHODS = { - enable: "enable", - signTx: "signTx", - isEnabled: "isEnabled", + enable: "enable", + signTx: "signTx", + isEnabled: "isEnabled", + + //v2 + authorize: "authorize", + getBalance: "getBalance", + signTransaction: "signTransaction", + revoke: "revoke", }; + export const INTERNAL_METHODS = { - checkPendingRequest: "checkPendingRequest", - returnResponse: "returnResponse", + checkPendingRequest: "checkPendingRequest", + returnResponse: "returnResponse", + clearList: "clearList" }; export const TARGET = "topl-ribn-wallet"; export const SENDERS = { - webpage: "webpage", - ribn: "ribn", + webpage: "webpage", + ribn: "ribn", }; export const API_ERRORS = { - internalError: "Internal error", - refused: "Connection refused", - invalidRequest: "Invalid request", - accessDenied: "Access denied", + internalError: "Internal error", + refused: "Connection refused", + invalidRequest: "Invalid request", + accessDenied: "Access denied", }; export const POPUP = { - width: 500, - height: 500, - top: 50, - left: 100, + width: 500, + height: 500, + top: 50, + left: 100, }; \ No newline at end of file