Code Monkey home page Code Monkey logo

pirate-chain-ios-wallet's People

Contributors

braddmiller avatar charlieok avatar defuse avatar jellehelsen avatar lastw0nd3r avatar pacu avatar piyush23dez avatar satindergrewal avatar t-mullen avatar yacare555 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

pirate-chain-ios-wallet's Issues

Grey screen bug after sending transaction-see detail issue

yes, I have noticed this blank screen too.
steps to replicate for me are:

  • send transaction
  • tx sent
  • click detail
  • close detail
  • blank screen
  • touch slide down to close blank screen.
    On close detail, the expected behaviour is to show back the both 2 buttons it was showing before.

MEMO text not showing

Sent a transaction with memo text: If you get this MEMO, that'd be great! with tx amount 0.0002 ARRR.
After confirmations, it didn't show at either end.

Receiver screenshot:
image

Sender screenshot:
image

Add PIN security and Face/Touch ID Authentication to wallet

So far I observed the wallet just opens up and we can continue with our regular wallet operations.

There needs to be a Wallet security like inputting PIN to open a wallet and steps like conforming the PIN before sending transaction.

The simpler examples can be like Mycelium.

Much better examples can be AtomicDEX mobile app. You can just test it and experience it's user interface and we can learn and adapt much from them in our application.

  • PIN security
  • Face ID and Touch ID authentication for login

Places where this authentication is needed:

  • Login Screen
  • Confirm Payment Screen
  • Recover Seed Phrase
  • When enabled or disabled Face/Touch ID from Settings
  • Change/Update PIN to new PIN

Additional security for PIN security feature:

The number pad for entering PIN should be showing the numbers at random location. Example:

1	2	3
4	5	6
7	8	9
	0

Shows randomly everytime the app prompts the input PIN option. Like:

9	6	0
7	1	8
3	5	2
	4

Tor Mode enabled wallet

The use-case I have in my mind as of current Pirate Wallet project is, if we could have a "Tor Mode" for Pirate Wallet in settings, which if enabled, makes the wallet restart, and connect it's connections to the endpoint (in current case lightd.meshbits.io:9067) routed through Tor.

I know there are limitations of applying Tor routing on iOS, and I have been looking for solution to implement Tor on iOS apps for a while. But, if Tor.framework can solve what I want to achieve, having the Tor router embedded within the app will be very good to have.

These are the relevant links to read on that subject:

More Decentralised lightwaleltd nodes

Because I can make a home server software coded in golang, which can be all in one easy to manage Tor node with Pirate Chain full blockchain node installed along with lightwalletd setup properly, with the onion v3 address setup to make a connection to the wallet.

In such home server setup, I can show a QR code of the onion v3 address, which the wallet can scan and add it to it's own custom lightwalletd servers list.

This will help make few things great:

  • More network nodes will pop up on the network due to this feature, which helps build stronger network consensus in blockchain.
  • Less reliance on my own lightwalletd server which can possibly be under heavy traffic if this wallet gets used heavily, or in general this same lightwalletd server gets used by other applications around.
  • Users gets their very own exclusive server, so, they can be assure of their own privacy as equally as a they feel with full nodes.

Overall having the ability for wallet to connect via Tor is all positive. But if we should target this feature, we should target it only for phase 3.

Todo tasks

  • Make a mock up or basic app to ensure what we want to achieve is doable. Make a simple Swift coded app using Tor.framework Objective-C compiled library.
  • Make a connection to lightwalletd gRPC server through Tor routed network over to server example lightd.meshbits.io:9067.
  • Make a connection to lightwalletd gRPC server through Tor routed network over to [onion v3 address] which will be made available soon enough once we start working on this task.
  • Once above testing is complete, impliment the same to Pirate Wallet(s).

Blank screen after wallet creation

After the account creation, enabled FaceID and when i try to login using FaceID screen goes blank .

Restarting the app fixes this issue.

This seems a bug.

Showing fiat currencies (govt. issued centralised dumb money) like USD, EUR, etc. in app at relevant places

We should think about modifying the UI/UX a little bit to have place to display the fiat (govt. issued centralised dumb money) i.e. USD, EUR etc in application wherever relevant.

For this feature, I'd highly recommend checking out Mycelium wallet on Android. Take the idea of displaying fiat converted balance exactly how Mycelium does, or at least influenced by it.

Coinpaprika provides API to get Pirate Chain's price data, which we can use to get started:

➜  ~ curl -s https://api.coingecko.com/api/v3/coins/markets\?vs_currency\=usd\&ids\=pirate-chain\&order\=market_cap_desc\&per_page\=100\&page\=1\&sparkline\=false\&price_change_percentage\=1h%2C%2024h%2C%207d%2C%2030d | jq
[
  {
    "id": "pirate-chain",
    "symbol": "arrr",
    "name": "Pirate Chain",
    "image": "https://assets.coingecko.com/coins/images/6905/large/Pirate_Chain.png?1560913844",
    "current_price": 4.47,
    "market_cap": 812017105,
    "market_cap_rank": 95,
    "fully_diluted_valuation": null,
    "total_volume": 2952260,
    "high_24h": 4.62,
    "low_24h": 3.45,
    "price_change_24h": 1.02,
    "price_change_percentage_24h": 29.53878,
    "market_cap_change_24h": 188313761,
    "market_cap_change_percentage_24h": 30.19284,
    "circulating_supply": 181820207.53912,
    "total_supply": 200000000,
    "max_supply": null,
    "ath": 16.76,
    "ath_change_percentage": -73.43995,
    "ath_date": "2021-04-23T18:13:27.423Z",
    "atl": 0.00797788,
    "atl_change_percentage": 55699.79813,
    "atl_date": "2020-11-26T02:10:52.806Z",
    "roi": null,
    "last_updated": "2021-05-25T11:28:29.355Z",
    "price_change_percentage_1h_in_currency": 0.08861843927950086
  }
]

After deleting an APP - (without nuke)

I have deleted an APP without the 'unlinking a device' option.
After reinstallation, It asked for an option to set a PIN and then took me to the dashboard screen directly.
It's against privacy.
If you are pretending a user as new then he should go through all the onboarding process again and if not, you must ask for a OLD PIN (do not show an option to set new)

PS: If possible, remove all the data at the time deletion and let him recover his account from recovery key only.

@satindergrewal what's your thought on this?

Pop this iOS wallet if clicked on payment link using ARRR URI

Add the URI handling, that is so we can get a bitpay like payments system where users click to buy on a website and it pops open the wallet to a payment confirmation screen.

Will have more better details soon on this task.

While I collect more detail information form other developers and team, have a look at this Bitcoin's standard URI scheme:
https://developer.bitcoin.org/devguide/payment_processing.html

Bitcoin proposes URI like this:

bitcoin:mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN\
?amount=0.10\
&label=Example+Merchant\
&message=Order+of+flowers+%26+chocolates

And for Pirate Chain we can possibly use URI like this:

arrr:zs1j8kz2pkfdmwatkufwlu0e9kkvxmk7g6k78ymld53tg20q8php4s9d26s5jk53f85qxvm6v046em
?amount=0.10\
&label=Example+Merchant\
&message=Order+of+flowers+%26+chocolates

Where the label and message can be input in the MEMO field while making a transaction. iOS wallet allows inputting an optional MEMO text, and we can utilise that for the URI data storage.

Adjust sending transaction amount based on wallet balance

User had 1.00 ARRR in wallet.
Sent a transaction which errored because wallet tried sending amount + fee (1.00 + 0.0001) which is 1.0001 ARRR.

In such case if it's found that user doesn't has the fee amount to create this transaction the transaction MUST be adjusted accordingly.

In this case, it'll be:
1 ARRR wallet balance - 0.0001 tx fee = 0.9999 ARRR

So, let the user show a dialog box confirming these adjustment with a message:

We found your wallet didn't had enough funds for fees, so the transaction has been adjusted as follows:
Wallet Balance: 1 ARRR
Transaction Fess: 0.0001 ARRR

The receiver <ADDRESS_HERE> will be receiving 0.9999 ARRR.
Please CONFIRM to send this transaction or cancel to adjust sending amount.

Need new and more checkpoints for Pirate Chain to make it easier and faster to sync with network

Right now the checkpoints for Pirate chain are with the difference of 100k to sync with the network, and the last or recent one starts from height 1,000,000. Whereas the current height is somewhere about 1,390,000+. That's near to 400k block headers which needs to download and make mobile wallet sync with the network.

I used this file to get required blockheight and sapling_tree relevant data to update the dependency of this iOS wallet updated:
https://raw.githubusercontent.com/piratenetwork/piratewallet-light-cli/merge_upstream/coin-checkpoint.json

Checkpoints set for this iOS wallet, based on blocks info taken from piratewallet-light-cli:
https://github.com/Meshbits/ZcashLightClientKit/blob/shield-funds-poc/ZcashLightClientKit/Stencil/WalletBirthday+saplingtree.stencil

I need more checkpoints with the same info to add to the list, which will make syncing wallet faster with the network:

height: 300000, 
hash: "000000001598dc03f64b36169a482dfa3d85a10d42cde06aa6cc6a75707389b2", 
time: 1553764949, 
sapling_tree: "01d7243618851dc06cc59ec16c6d77d8e352af3793cd21c0a9938372bb7157670500120001945ae5bdc14a29faa8e2fd50f01ef6a3a8da167584ce9e82063d4ed17416196f0103ed7a6d19f12d1c442c0057fd078903ef6cd3e3306044d7c0f8fdd36f6fe06a01447f859be85701d6871e2480b5036ea63b6f47c144cf29436e7294be603e1c3001b4ec68e46936f3aebb175fb332509326e8d2a182d1449d53777b4a7e2c29fa5801cfc6e9fbf8f0ca810b0e45cdcebc6e765faaaeb8fa0be187be895e683f0504540000000152ccf74ce6806b561418faa131c772506c83acd3b896cab2663fcfb94d09a45801d5ad937c911d34f096261bf38ccee013ccf89dd50bfe5e54465e3b9506a8a62a01984f57016d4a2bd43c417aab49679e5dd79daba0e1caa26f1f3ce84cf18a54260000013953b793f6fae2bab55d9ab9f8ae549285e768bd97b55e2720922a13c470084e0000013fe4d9c4934ce4be54bd7e7b988c600405efd8ff50c137f63c386f7eab596a0d"

Importing/Exporting private key of Pirate Chain address

At the time of creating this issue, the application only allows restoring the wallet using 24 word seed phrase only. While, there should also be demand and need for restoring a wallet address directly using the private key associated with a specific Pirate Chain address.

The sample app has example Get Address page which shows the private key of address. So, at least exporting the privkey which is also referred in shielded address's case as SpendingKey is possible.
address_privkey

Exporting Private Key

The backup of private key should be only shown after PIN or Biomatric authentication, and two options should be provided to backup:

  • Copy private key to clipboard
  • Scan private key QR code to import to another wallet

Importing Private Key

Unsure at the moment, how the wallet handles the generation and usage of Pirate Chain address from seed phrase. It needs to be explored and identified this process and then make any necessary changes to add the capability to also have the options of importing private key instead of just only the option of restoring with the 24 word seed phrase.

Backup Wallet - Write seed phrase to paper

The current process of backup wallet does not verify if the user has actually backup the seed phrase on paper or not.

In current process, the backup wallet screen after creating new wallet shows the option to copy the "seed phrase" and "wallet birthay" to operating system clipboard. After user confirms the wallet backup is taken, it takes user straight to Home screen.

We need to modify this process a little.

Add "Verify Backup" screen before proceeding to Home screen:

  • On this screen the user must be shown all 24 input boxes to input seed phrase words. Either show them all on single screen or divide and show on multiple screens as the UI/UX process allows best to do it.
  • Only after user input all 24 seed phrase correctly proceed to Home screen.

A friendly UX can be added on top of each input field where the seed phrase position is shown to enter the seed word at that position, and if the user enters the right seed word in right position's input field, a ✅ is shown, and if wrong ❌ is shown.
This will allow user to identify while typing if they typed the correct seed word at correct position while verifying seed phrase backup.

IMPORTANT: The important part in seed phrase backup process is to "Disable Screen Capture" feature of the OS. If the wallet screen is in the process of Backup Wallet, specially on screen where it shows the wallet seed phrase, "Disable Screen Capture" feature.

"Send Max" Button

Adding a "Send Max" button in the sending tab would be nice so you don't have to calculate amount - tx cost yourself :)

wrong tx fee being displayed

On the Send tab, the wallet displaying Processing fee : 0.00001 ARRR, it should be 0.0001 ARRR as default txs are using this value for fees.

It's a cosmetic change.

ZcashLightClientKit/lib/libzcashlc.a - building for Mac Catalyst, but linking in object file built for , for architecture x86_64

Trying to compile wallet from branch arrr-mac gives following errors for TinyQRScanner dependency under Pods:

'AVCaptureSession' is only available in Mac Catalyst 14.0 or newer

To resolve it, change the "macOS" version from 10..5.1 to 11.0.

After that when building the project, it gives errors about libzcashlc.a as follows:

ld: in /Users/satinder/repo/meshbits/pirate-chain-ios-wallet/wallet/Pods/ZcashLightClientKit/lib/libzcashlc.a(zcashlc-c99a8b34047907fb.zcashlc.cgphjfl4-cgu.10.rcgu.o), building for Mac Catalyst, but linking in object file built for , for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Backup Wallet - Store seed phrase in icloud keychain

NOTE: This option should only be shown under Settings -> Backup Wallet, and not needed to show at wallet creation phase.

Storing seed phrase in icloud keychain has cons and pros:

Cons:

In any case like history of iCloud account(s) hacking goes, the risk is the user's seed phrase gets compromised via icloud account hacked, and that very well possibly may result in compromising and losing funds in pirate chain address associated to that seed phrase.

Pros:

The user gets convenient option to backup and restore their seed phrase related to the application.


So, understanding both pros and cons, I propose to make option of storing the seed phrase in iCloud keychain only after user acknowledges the risk that in any case their iCloud account gets compromised, they can potentially lose their funds as well.

In that case under settings make "Backup wallet" option show another screen, instead of straight showing the wallet seed phrase. The options under "Settings -> Backup wallet" should look like this:

  • Write seed phrase to paper - #13
  • Print paper wallet #14
  • Backup wallet seed to iCloud

On selecting option "Backup wallet seed to iCloud" show user a warning:

Storing the seed phrase in iCloud will provide convenience to store backup of my wallet
which can be used to restore the wallet on another device in case current device is lost or
unusable to access pirate chain wallet funds.

Checkbox: I acknowledge that in case my iCloud account gets compromised, my pirate chain
wallet funds can potentially gets hacked as well.

Under that, give 2 buttons:

  • Understood risk, please proceed
  • No thanks

Only after the "Understood risk, please proceed" option selected take backup to iCloud account.

If the user selects "No thanks", we'll not be storing the backup on iCloud keychain.

So, this makes the backup of seed phrase to iCloud keychain optional.

Localisation of the app

Need some work to be done to ensure every text in the app is localised. There shouldn't be any text which is sitting statically in the code files.

There are already localised files and holds some text variables which are being used in the app, but let's try to improve it further if we can.

Once we have the text in localised files, we'll need to make settings menu to change the language of the app without depending on system wide language settings to switch the app's language to desired language.

  • Make sure every static text is moved to localised files.
  • Make settings menu to change app language despite system wide language is different.

tx details viewing from Wallet tab

From the Wallet tab, on Recent Transfers if I click on the tx entry, it doesn't do anything to display details of the tx. I have to navigate to History tab and click on the tx entry to see details/memo.
Could you enable tx details or memo viewing from the main page (Wallet) tab?

Wallet throws error "-5: Invalid addresses"

Wallet is 100% synced, and after a while it starts throwing "Invalid addresses" errors.

Full log:

2021-05-18 04:04:07.451947+1200 ECC Wallet[45198:1113414] [Bugsnag] [WARN] Invalid apiKey: expected a 32-character hexademical string, got "CEST_NE_PAS_A_TOKEN"
WARN : BSG_KSCrashSentry.c (98): BSG_KSCrashType bsg_kscrashsentry_installWithContext(BSG_KSCrash_SentryContext *, BSG_KSCrashType, void (*)(void *)): App is running in a debugger. Only handled events will be sent to Bugsnag.
WARN : BSG_KSCrashSentry.c (98): BSG_KSCrashType bsg_kscrashsentry_installWithContext(BSG_KSCrash_SentryContext *, BSG_KSCrashType, void (*)(void *)): App is running in a debugger. Only handled events will be sent to Bugsnag.
2021-05-18 04:04:07.455336+1200 ECC Wallet[45198:1113414] [Bugsnag] [ERROR] Failed to install crash handler. No exceptions will be reported!
2021-05-18 04:04:07.455598+1200 ECC Wallet[45198:1113414] [Bugsnag] [INFO] Last run terminated abnormally; likely Out Of Memory.
2021-05-18 04:04:07.569936+1200 ECC Wallet[45198:1113725] [] nw_protocol_get_quic_image_block_invoke dlopen libquic failed
2021-05-18 04:04:07.978783+1200 ECC Wallet[45198:1113725] [Bugsnag] [INFO] Sent session B880612A-B280-48F2-B771-F89B451A6653
2021-05-18 04:04:09.775298+1200 ECC Wallet[45198:1113726] DDFileLogger: Failed to get offset: (null)
2021-05-18 04:04:09.797484+1200 ECC Wallet[45198:1113722] [] DatabaseMigrationManager[75] - migrateDataDb(uvks:) - DEBUG 🐞 - Attempting to perform migration for data Db - currentVersion: 1. Latest version is: 1
2021-05-18 04:04:09.798730+1200 ECC Wallet[45198:1113726] [] DatabaseMigrationManager[91] - migrateDataDb(uvks:) - DEBUG 🐞 - Data Db - no migration needed
2021-05-18 04:04:09.798888+1200 ECC Wallet[45198:1113719] [] DatabaseMigrationManager[63] - migrateCacheDb() - DEBUG 🐞 - Attempting to perform migration for cache Db - currentVersion: 0. Latest version is: 0
2021-05-18 04:04:09.799071+1200 ECC Wallet[45198:1113719] [] DatabaseMigrationManager[69] - migrateCacheDb() - DEBUG 🐞 - Cache Db - no migration needed
2021-05-18 04:04:09.799234+1200 ECC Wallet[45198:1113719] [] DatabaseMigrationManager[50] - migratePendingDb() - DEBUG 🐞 - Attempting to perform migration for pending Db - currentVersion: 0. Latest version is: 0
2021-05-18 04:04:09.799418+1200 ECC Wallet[45198:1113726] [] DatabaseMigrationManager[56] - migratePendingDb() - DEBUG 🐞 - PendingDb Db - no migration needed
2021-05-18 04:04:10.381840+1200 ECC Wallet[45198:1113719] [] LightWalletGRPCService[390] - connectivityStateDidChange(from:to:) - EVENT ⏱ - Connection Changed from idle to connecting
2021-05-18 04:04:10.432340+1200 ECC Wallet[45198:1113719] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:10.432496+1200 ECC Wallet[45198:1113719] [Client] Updating selectors after delegate addition failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:10.432633+1200 ECC Wallet[45198:1113414] [Client] Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:10.433106+1200 ECC Wallet[45198:1113414] [Client] Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:10.433164+1200 ECC Wallet[45198:1113719] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:10.433553+1200 ECC Wallet[45198:1113414] [Client] Synchronous remote object proxy returned error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:10.433617+1200 ECC Wallet[45198:1113719] [Client] Updating selectors failed with: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo={NSDebugDescription=The connection to service on pid 0 named com.apple.commcenter.coretelephony.xpc was invalidated.}
2021-05-18 04:04:11.337031+1200 ECC Wallet[45198:1113726] [] LightWalletGRPCService[390] - connectivityStateDidChange(from:to:) - EVENT ⏱ - Connection Changed from connecting to ready
2021-05-18 04:04:22.841204+1200 ECC Wallet[45198:1113724] [] CompactBlockProcessor[746] - setTimer() - DEBUG 🐞 - Timer triggered: Starting compact Block processor!.
  Processor State: synced
  latestHeight: 1393086
  attempts: 0
  lowerbound: Optional(1393086)
2021-05-18 04:04:41.922984+1200 ECC Wallet[45198:1114071] [] CompactBlockProcessor[746] - setTimer() - DEBUG 🐞 - Timer triggered: Starting compact Block processor!.
  Processor State: synced
  latestHeight: 1393086
  attempts: 0
  lowerbound: Optional(1393086)
2021-05-18 04:05:05.013654+1200 ECC Wallet[45198:1114270] [] CompactBlockProcessor[746] - setTimer() - DEBUG 🐞 - Timer triggered: Starting compact Block processor!.
  Processor State: synced
  latestHeight: 1393086
  attempts: 0
  lowerbound: Optional(1393086)
2021-05-18 04:05:17.470835+1200 ECC Wallet[45198:1114419] [] CompactBlockProcessor[746] - setTimer() - DEBUG 🐞 - Timer triggered: Starting compact Block processor!.
  Processor State: synced
  latestHeight: 1393086
  attempts: 0
  lowerbound: Optional(1393086)
2021-05-18 04:05:35.560804+1200 ECC Wallet[45198:1114576] [] CompactBlockProcessor[746] - setTimer() - DEBUG 🐞 - Timer triggered: Starting compact Block processor!.
  Processor State: synced
  latestHeight: 1393086
  attempts: 0
  lowerbound: Optional(1393086)
2021-05-18 04:05:35.896543+1200 ECC Wallet[45198:1114630] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockDownloadOperation: 0x7f9e06d81ed0>{name = 'Download Operation: 1393087...1393087'} started
2021-05-18 04:05:36.128012+1200 ECC Wallet[45198:1114474] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockValidationOperation: 0x7f9e06d60ed0> started
2021-05-18 04:05:36.240355+1200 ECC Wallet[45198:1114630] [] CompactBlockProcessor[505] - processNewBlocks(range:) - DEBUG 🐞 - validateChainFinished
2021-05-18 04:05:36.240539+1200 ECC Wallet[45198:1114473] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockScanningOperation: 0x7f9e06d321a0> started
2021-05-18 04:05:36.348353+1200 ECC Wallet[45198:1114630] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockEnhancementOperation: 0x7f9e06d6e540> started
2021-05-18 04:05:36.348573+1200 ECC Wallet[45198:1114473] [] CompactBlockProcessor[554] - processNewBlocks(range:) - DEBUG 🐞 - Started Enhancing range: 1393087...1393087
2021-05-18 04:05:36.348879+1200 ECC Wallet[45198:1114630] [] CompactBlockEnhancementOperation[49] - main() - DEBUG 🐞 - no transactions detected on range: 1393087 ... 1393087
2021-05-18 04:05:36.349784+1200 ECC Wallet[45198:1114473] [] CompactBlockProcessor[614] - notifyProgress(completedRange:) - DEBUG 🐞 -   progress: 1.0
  height: 1393087
2021-05-18 04:05:36.805193+1200 ECC Wallet[45198:1114630] [] CompactBlockProcessor[721] - processingFinished(height:) - ERROR 💥 - failed to refresh utxos
2021-05-18 04:05:36.806249+1200 ECC Wallet[45198:1114473] [] CompactBlockProcessor[800] - fail(_:) - ERROR 💥 - generalError(message: "-5: Invalid addresses")
2021-05-18 04:05:56.794664+1200 ECC Wallet[45198:1114835] [] CompactBlockProcessor[746] - setTimer() - DEBUG 🐞 - Timer triggered: Starting compact Block processor!.
  Processor State: error(ZcashLightClientKit.CompactBlockProcessorError.generalError(message: "-5: Invalid addresses"))
  latestHeight: 1393087
  attempts: 1
  lowerbound: Optional(1393086)
2021-05-18 04:05:57.025272+1200 ECC Wallet[45198:1114837] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockDownloadOperation: 0x7f9e06c53450>{name = 'Download Operation: 1393088...1393088'} started
2021-05-18 04:05:57.403430+1200 ECC Wallet[45198:1114834] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockValidationOperation: 0x7f9e06c4eb90> started
2021-05-18 04:05:57.517805+1200 ECC Wallet[45198:1114837] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockScanningOperation: 0x7f9e06c560b0> started
2021-05-18 04:05:57.518077+1200 ECC Wallet[45198:1114835] [] CompactBlockProcessor[505] - processNewBlocks(range:) - DEBUG 🐞 - validateChainFinished
2021-05-18 04:05:57.657375+1200 ECC Wallet[45198:1114837] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockEnhancementOperation: 0x7f9e06c41e10> started
2021-05-18 04:05:57.657548+1200 ECC Wallet[45198:1114835] [] CompactBlockProcessor[554] - processNewBlocks(range:) - DEBUG 🐞 - Started Enhancing range: 1393088...1393088
2021-05-18 04:05:57.657811+1200 ECC Wallet[45198:1114837] [] CompactBlockEnhancementOperation[49] - main() - DEBUG 🐞 - no transactions detected on range: 1393088 ... 1393088
2021-05-18 04:05:57.660008+1200 ECC Wallet[45198:1114838] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockDownloadOperation: 0x7f9e06d79420>{name = 'Download Operation: 1393088...1393088'} started
2021-05-18 04:05:57.887888+1200 ECC Wallet[45198:1114837] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockValidationOperation: 0x7f9e06d5ee40> started
2021-05-18 04:05:58.005358+1200 ECC Wallet[45198:1114838] [] CompactBlockProcessor[505] - processNewBlocks(range:) - DEBUG 🐞 - validateChainFinished
2021-05-18 04:05:58.005578+1200 ECC Wallet[45198:1114834] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockScanningOperation: 0x7f9e06d77410> started
2021-05-18 04:05:58.116950+1200 ECC Wallet[45198:1114834] [] ZcashOperation[42] - start() - DEBUG 🐞 - <ZcashLightClientKit.CompactBlockEnhancementOperation: 0x7f9e06d635f0> started
2021-05-18 04:05:58.117124+1200 ECC Wallet[45198:1114837] [] CompactBlockProcessor[554] - processNewBlocks(range:) - DEBUG 🐞 - Started Enhancing range: 1393088...1393088
2021-05-18 04:05:58.117433+1200 ECC Wallet[45198:1114834] [] CompactBlockEnhancementOperation[49] - main() - DEBUG 🐞 - no transactions detected on range: 1393088 ... 1393088
2021-05-18 04:05:58.118126+1200 ECC Wallet[45198:1114837] [] CompactBlockProcessor[614] - notifyProgress(completedRange:) - DEBUG 🐞 -   progress: 1.0
  height: 1393088
2021-05-18 04:05:59.242181+1200 ECC Wallet[45198:1114834] [] CompactBlockProcessor[721] - processingFinished(height:) - ERROR 💥 - failed to refresh utxos
2021-05-18 04:05:59.242582+1200 ECC Wallet[45198:1114837] [] CompactBlockProcessor[800] - fail(_:) - ERROR 💥 - generalError(message: "-5: Invalid addresses")

Wallet screen shot:

After a while another error:

Backup Wallet - Print paper wallet

NOTE: This option should only be shown under Settings -> Backup Wallet, and not needed to show at wallet creation phase.

On selecting "Settings -> Backup Wallet -> Print Paper Wallet" the user must be given a prompt to wirelessly print a PDF or equivalent formatted document.

The formatted document to be printed must show the steps to download, install, and restore the wallet seed phrase to either this iOS wallet or Android wallet (which we'll work on soon). For testing this feature we can go with this template to print:

Pirate Chain Wallet Backup - [DATE HERE]

Your Pirate Chain Address:
[ZS_ADDRESS HERE]

Seed phrase words QR code (Encrypted):
[24 SEED PHRASE WORDS QR CODE]

How to restore wallet your wallet seed phrase to iOS Pirate Chain wallet?
1. Go to website [example.com]
2. Click on "Apple Store" icon
3. Install [iOS Wallet Name Goes here]
4. Open [iOS Wallet Name Goes here]
5. Select option "Restore" on greeting screen
6. [Might add more relevant steps ahead if needed]

How to restore wallet your wallet seed phrase to Android Pirate Chain wallet?
1. Go to website [example.com]
2. Click on "Play Store" icon
3. Install [Android Wallet Name Goes here]
4. Open [iOS Wallet Name Goes here]
5. Select option "Restore" on greeting screen
6. [Might add more relevant steps ahead if needed]

Ideally, I'd like the option to have a restore backup from some "encrypted" formatted of backup. This will allow having some sort of security if this printed paper wallet gets compromised.
If we decided on encryption method, then the restore wallet process needs to have the option to follow the process to enter decryption key.

NOTE: This decryption key MUST NOT be backup to iCloud keychain at any point.

Recovery Screen Popup, whenever resume an APP

It's keep showing 'Recovery screen', whenever I try to resume an app.

RPReplay_Final1635267054.MP4

LOG



[DEBUG 🐞] CompactBlockProcessor.swift - processNewBlocks(range:) - line: 753 -> Warning: fetch operation on range 1480496...1623379 cancelled
[DEBUG 🐞] ZECCWalletEnvironment.swift - subscribeToApplicationNotificationsPublishers() - line: 366 -> applicationWillEnterForeground
[DEBUG 🐞] SDKSynchronizer.swift - start(retry:) - line: 194 -> warning:  synchronizer started when already started
[EVENT ⏱] LightWalletGRPCService.swift - connectivityStateDidChange(from:to:) - line: 497 -> Connection Changed from ready to idle
[DEBUG 🐞] ZECCWalletEnvironment.swift - subscribeToApplicationNotificationsPublishers() - line: 382 -> didBecomeActiveNotification
showPassCodeScreen: true
AppDelegate.isTouchIDVisible: true
[DEBUG 🐞] ZECCWalletEnvironment.swift - subscribeToApplicationNotificationsPublishers() - line: 396 -> applicationWillResignActive
SUCCESS IN SETTINGS
[DEBUG 🐞] ZECCWalletEnvironment.swift - subscribeToApplicationNotificationsPublishers() - line: 382 -> didBecomeActiveNotification
[DEBUG 🐞] ZECCWalletEnvironment.swift - subscribeToApplicationNotificationsPublishers() - line: 396 -> applicationWillResignActive
showPassCodeScreen: false
[EVENT ⏱] LightWalletGRPCService.swift - connectivityStateDidChange(from:to:) - line: 497 -> Connection Changed from idle to connecting
2021-10-26 22:18:10.748751+0530 ECC-Wallet-no-logs[76379:6262236] dnssd_clientstub write_all(9) DEFUNCT
2021-10-26 22:18:10.748785+0530 ECC-Wallet-no-logs[76379:6262236] dnssd_clientstub deliver_request ERROR: write_all(9, 76 bytes) failed
2021-10-26 22:18:10.748817+0530 ECC-Wallet-no-logs[76379:6262236] dnssd_clientstub write_all(9) DEFUNCT
[DEBUG 🐞] ZECCWalletEnvironment.swift - subscribeToApplicationNotificationsPublishers() - line: 389 -> didEnterBackgroundNotification
[EVENT ⏱] LightWalletGRPCService.swift - connectivityStateDidChange(from:to:) - line: 497 -> Connection Changed from connecting to ready
2021-10-26 22:18:45.735921+0530 ECC-Wallet-no-logs[76379:6262021] [BackgroundTask] Background Task 20 ("ZcashLightClientKit.SDKSynchronizer"), was created over 30 seconds ago. In applications running in the background, this creates a risk of termination. Remember to call UIApplication.endBackgroundTask(_:) for your task in a timely manner to avoid this.
[INFO ℹ️] ZECCWalletEnvironment.swift - registerBackgroundActivity() - line: 337 -> BackgroundTask Expiration Handler Called

Need Skull-Island and Piratewallet-lite-cli matching address from this iOS wallet

Both Skull-Island and Piratewallet-lite-cli generates a shielded address from 24 word seed phrase, and so does this iOS wallet.

But I found the same seed phrase gives different address on Piratewallet-lite-cli and this iOS wallet.

SEED PHRASE:
scout power diamond brother expose cart senior enter afford gym tired chase violin harsh gasp panic bicycle normal waste more spike sea inner crush

iOS Wallet generated this:
zs1da5xf5ake2jr63acq22v0ln53vt48vfl49ys82zrrgcfszcpkhk5ehedsy499p0fnfprkgax3nt

piratewallet-lite-cli generated this:
zs1j8kz2pkfdmwatkufwlu0e9kkvxmk7g6k78ymld53tg20q8php4s9d26s5jk53f85qxvm6v046em

Need to check what needs to be changed to either ZcashLightClientKit or within this iOS swift files, to get same address from seed phrase as other Pirate apps.

Profiles/Accounts for different wallets

We should also think from the start if we need to make any changes to the data storage to make it possible to have multiple Profiles or Accounts with different wallet address.

The idea is each different Profile has their own settings such as:

  • fiat currencies
  • own seed phrase
  • profile name
  • it's own PIN number

The first thing opening an application should greet you to either

  • select a profile,
  • or create a profile

If there isn't already on the system. If creating a new profile

  • select Name,
  • then proceed to show create new wallet
  • or restore wallet and so on.

Receiving transactions show "expecting N ARRR" for longer than expected

Right now the receiving transactions in the wallet are showing longer than expected time.

Expected is that after 1+ confirmations the balance shows in the wallet balance instead of "expected balance".

investigate if there is part of code which is handling the confirmations numbers etc in the code and adjust it to 2.

FaceID disables randomly

User reported FaceID disables randomly upon app restarts.

for some weird reason
it keeps disabling my faceid
it just randomly disables it and I have to turn it on in settings again
it happened 2 times in the past 20min

when entering the app and when it asks you for face id I quit the app at the right moment and completely exited out of it (even from background processes) and when I started the app again I had to use my passcode to get into the app and turn on faceid again since it turned it off

it has all the perms in iOS Settings for app

I managed to turn the faceid off for the wallet 3 times now
without actually turning it off
idk just click on random buttons and exit and enter the app and it'll happen

iPhone 13 Pro; IOS: 15.0.2

Add "Edit Light Client Server Address" option in settings menu

The purpose of "Edit Light Client Server Address" setting will be to let the end users edit the address lightd.meshbits.io with something with their own.
In case some advanced users has their own lightwalletd setup for Pirate Chain, or if they wish to use some other server of their choice, they can just edit it in the settings menu that way.

  • Show option to edit lightwalletd address in settings.
  • Show option to edit lightwalletd port in settings.

Delayed opening of Send/Receive

As title mentions, clicking on send/receive buttons from within the wallet is noticeably delayed, closing of the said window from within the wallet is delayed as well.

Video:

RPReplay_Final1636100276.mov

2

Introduce vibrations

  • address QR code scan. when address is scanned use vibration feedback if the address is successfully scanned.
  • if PIN entered is wrong, give vibration feedback of some different sort, like twice vibration etc.

Explore the idea of making this wallet multi-cryptocurrency wallet

The other similar lightwalletd based cryptocurrency I'd like to explore to add to this wallet is VerusCoin.

VerusCoin is one of the smartest Komodo Platform ecosystem project. One great feature it provides is trustless revocable and recoverable Decentralised Identities, referred as VerusID. And having the ability to use that in our wallet will be great to have.

But to use VerusIDs, we first has to explore how much modifications we'll need to do in the current UI/UX and backend codebase to make this Pirate Chain iOS wallet a multi-cryptocurrencies wallet.

As I understand the so far codebase and the UI/UX, having this feature added will need significant amount of rework on both front-end and back-end sides. So, consider this feature as an "experimental" and "exploration" idea only when we reach the point to try this.

Few devs from Verus community has already made a modified/enhanced version of lightwalletd which already makes it possible to query VerusID APIs without needing to have the full blockchain downloaded, just like Pirate Chain's lightwalletd works. Relevant Github commit and repo: Asherda/lightwalletd@56ad341

The X button glitches out and won't let you exit

When clicking on "Recovery Phrase" and trying to backup the words again, the x button glitches out and won't let you exit (this was only on the first launch of the wallet), I closed the wallet and re-opened and didn't encounter such issue anymore

this happened only on my very first launch, after closing and re-opening the wallet it didn't happen anymore

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.