Coder Social home page Coder Social logo

horizontalsystems / unstoppable-wallet-ios Goto Github PK

View Code? Open in Web Editor NEW
623.0 42.0 229.0 196.13 MB

Multi-wallet for Bitcoin, Ethereum, Binance Smart Chain and other emerging blockchains. Non-custodial storage, decentralized exchange, and extensive analytics for thousands of tokens and NFTs. Implemented on Swift.

Home Page: https://unstoppable.money

License: MIT License

Ruby 0.21% Swift 84.09% Objective-C 15.70%
bitcoin ethereum crypto-wallet bitcoin-wallet ethereum-wallet crypto-toolkit bitcoin-core ethereum-sdk multi-wallet hd-wallets

unstoppable-wallet-ios's Introduction

Unstoppable Wallet

We dream of a world… A world where private property is untouchable and market access is unconditional.

That obsession led us to engineer a crypto wallet that is equally open to all, lives online forever and unconditionally protects your assets.

It is fully peer-to-peer and works without any centrally managed servers. It can't be stopped, blocked or taken down.

Unstoppable is a powerful non-custodial multi-wallet for Bitcoin, Ethereum, Binance Smart Chain, Avalanche, Solana and other blockchains. It provides non-custodial crypto and NFT storage, on-chain decentralized swaps, institutional grade analytics for cryptocurrency and NFT markets, extensive privacy controls and human oriented design.

  • It is built with care and adheres to best programming practices and implementation standards in cryptocurrency world. Fully implemented on Swift.
  • It is fully peer-to-peer and works without any centrally managed servers. It can't be stopped, blocked or taken down.

Such approach enables the wallet to operate anywhere and remain censorship-resistant. Only the user is in control of the money.

More at https://unstoppable.money

Download

https://itunes.apple.com/us/app/bank-wallet/id1447619907?ls=1&mt=8

Installation

  1. git clone [email protected]:horizontalsystems/unstoppable-wallet-ios.git

  2. You need to have Development.xcconfig file for Debug configuration and Production.xcconfig file for Release in UnstoppableWallet/UnstoppableWallet/Configuration. You can use sample configurations in .template.xcconfig files.

  3. Open in Xcode and run.

License

This wallet is open source and available under the terms of the MIT License.

unstoppable-wallet-ios's People

Contributors

ant013 avatar dianaaiym avatar ealymbaev avatar esen avatar esengulov avatar gotnull avatar horsys avatar mnizhurin avatar omahs avatar pacu avatar rex4539 avatar talgatnurdinov avatar tmedetbekov avatar uber9 avatar vsxd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

unstoppable-wallet-ios's Issues

Transaction Info (and expanded mode: Full Transaction Info)

The share button should share permanent IPFS permalink to transaction record

status pending
status processing
status completed

zpl://screen?sid=5b96439b0c99e06799f35cf9&pid=5b167c731d079e4122e946b7
zpl://screen?sid=5b9640560335644184df2f60&pid=5b167c731d079e4122e946b7
zpl://screen?sid=5b964054183ac85afe217de2&pid=5b167c731d079e4122e946b7

send controller: validate inputs

When user tries to send currency to someone the wallet should check that:

  • a provided address is a valid currency (ex: Bitcoin) address. Same applies to all other currencies as well. If user tries to send BTC to an Ethereum address then a respective error "invalid address" should be shown below the input field.
  • display error below input field if the balance is insufficien
  • Send button should remain inactive while there are input errors (amount, address)

@TalgatNurdinov please provide the design for the insufficient balance error message to @mNizhurin

@mNizhurin it should be noted that the balance should be calculated on a currency level. In other words, if I am trying to send BTC then we should ensure that there is enough BTC (not the total balance)

improvement for Paper Key validation

when restoring or importing wallet the inputted values should be validated before we show user a bottom sheet dialog with confirmation boxes.

Slight logic change for "I confirm" bottomsheet alert shown to new users

The alert should be shown in following use cases:

  • CREATE WALLET >> click on "Later" >> SHOW ALERT. In this case the alert shouldn't be shown when user tries to BACKUP wallet from settings.
  • CREATE WALLET >> click on "Backup" >> enter words and click on confirm >> SHOW ALERT
  • RESTORE WALLET >> enter words and click on "Restore" >> SHOW ALERT (provided that entered input terms pass the initial validation)
  • Settings >> Security >> Paper Key >> Confirm >> SHOW ALERT (provided that entered input terms pass the initial validation)
  • clicking on "Security Center" >> "Paper Key" should ask for PIN (or Touch ID).

Receive controller changes

  • aligned to left new title
  • in adress use 10...10 characters (if address less than 20 characters show full address. this will be the case with EOS blockchain and perhaps many other in the future)
  • remove copy button (make copy instead share button)
  • add share icon
    receive

zpl://screen?sid=5b8fb90de311c97f95cd8518&pid=5b167c731d079e4122e946b7

TransactionCreator and TransactionSender

TransactionCreator:

  • collects all required data to create transaction (fee rate, addresses)
  • should create new transaction using TransactionBuilder.
  • after that it saves transaction to DB

TransactionSender:

  • listens to DB for "new" transactions and tries to relay them into PeerGroup.

Welcome screen minor changes

  • App Name color to white
  • add decentralized scheme image
  • "Decentralized App" text below image should be image as well, like on settings
  • rename restore to import wallet

screen shot 2018-09-17 at 3 35 27 pm

zpl://screen?sid=5b167ca5e66f3e4636801a30&pid=5b167c731d079e4122e946b7

blockchain_image 3x
blockchain_image 2x

  • Backup fontscolor to white
  • add backup image

screen shot 2018-09-25 at 12 02 11 pm

zpl://screen?sid=5b167ca5a18a94793a409932&pid=5b167c731d079e4122e946b7

UI issues to complete prior release

  • Finalize logo
  • Transaction info (apply latest design)
  • TX info status indicator: pending, processing, completed
  • TX status page: the share buttons should share permanent IPFS permalink to transaction record
  • Settings : finish security settings section (release version will have PIN, Touch ID settings for app entry and transaction send actions)
  • Settings: remove import wallet section (will be re-added on version 1.1)
  • HOME: show info button on non-active currencies.
  • Finalize title on coin send/receive controllers
  • Finalize design for lock screen
  • Finalize the initial wallet restore screens
  • Finalize the layout for welcome screen

TransactionInput's Syncer

We need to download all transactions related to "our" transaction inputs in order to be able to display "from address" field for transaction.

change the font color of "description texts"

change the font color of "description texts" on following pages to #grey:

  • wallet intro page
  • backup wallet,
  • backup wallet -> paper keys page
  • backup wallet -> submit keys page
  • pin pages

Send Controller Improvements

Tasks

  • Apply new layout
  • Send Button should become active when there are no errors:
  • when amount is valid (if invalid, display "Balance: xxx" in red) @Dianaaiym
  • when address is valid (if invalid, display "Incorrect address") @Dianaaiym
  • Exchange Rate
  • (if available): all info shown(@TalgatNurdinov provide layout)
  • (if not available): don't show rate, don't show base equivalent of fee, make switch inactive(@TalgatNurdinov provide layout)
    -- unavailability of ex rate should not prevent user from sending transaction
  • add Transaction Confirmation screen (@TalgatNurdinov provide layout). Make sure it shows destination address.
  • transaction fee
  • should be obtained from IPFS,
  • if not available use last available fee
  • if that not available we should allow user to enter fee manually (@TalgatNurdinov that options should be considered in the design)

implement Base Currency setting

Below you will find a list of all controller sent he app where user sees a fiat-currency equivalent of crypto amount.

  • send controller
  • transactions tab
  • settings (base currency selector controller)
  • transaction info controller
  • transaction status controller

Note that these amounts needs to be requested from the permanent IPFS record for that specific transaction.

@nk-the-crazy currently works on the implementation. followup up with him on the status before you begin working on that ticket. Once implemented we will be able to retrieve things like exchange rate and other transaction data for any blockchain in close tp real-time.

Implement transaction status screen

Transaction status screen opened by clickable status in info. Sender/Receiver and ID addresses clickable for copying. "Block" cell should be disabled when status in processing

Screens

  • Transaction Status zpl://screen?sid=5b8f60bd5dd19031dbad0d75&pid=5b167c731d079e4122e946b7
  • Transaction status processing zpl://screen?sid=5b8f60be25531c63591f37ad&pid=5b167c731d079e4122e946b7

transaction status

https://scene.zeplin.io/project/5b167c731d079e4122e946b7

Implement huds

  • apply new hoods

Huds (light and dark modes)

  • incorrect filling of fields
  • incorrect pin
  • copy
  • success after done

screen shot 2018-09-18 at 6 02 14 pm

zpl://screen?sid=5b5adcec8e733e2230fdc614&pid=5b167c731d079e4122e946b7

Add leading zeros to private key before signing if needed

Reproduction steps
Network: Testnet
Mnemonic words: rather cricket moon movie material walk settle glide since soldier exact cabbage
Path: m/44'/0'/0'/0/4

HDKeychain class generates the following 31 bytes private key: 4c16165875d0bed9a76e4ba83fae65c80076f60791d956f336a2d7a3b21185

This key is invalid, because Bitcoin requires 32 bytes ECDSA private keys

To make this kind of keys valid, leading zero byte should be added to form: 004c16165875d0bed9a76e4ba83fae65c80076f60791d956f336a2d7a3b21185

Also, make research and find out if it possible to get private keys of any other wrong length

Allow User to choose API for Restore Wallet for BTC / BCH/ DASH

  • Restore from API : option may have several options to choose from including our own, for each supported blockchain. If for some reason a public explorer not available or not-responding it shouldn't be possible to proceed with that option. Similar implementation to transaction info data sources.

  • At least two API sources should be provided, ideally three

TX info status indicator: pending, processing, completed

Other changes

  • Title font size
  • From / To font sizes
  • Title background height size
  • check Date format
  • Dark mode colors
  • Check right padding of tx status button

screen shot 2018-09-21 at 11 29 16 am

zpl://screen?sid=5b960b5fb846d06417cf859a&pid=5b167c731d079e4122e946b7
zpl://screen?sid=5b960b5faebd977fa8229ec0&pid=5b167c731d079e4122e946b7
zpl://screen?sid=5b960b5faef2c264ed54d679&pid=5b167c731d079e4122e946b7

Settings : finish security settings section

Release version will have:

  • implement cells as on design mockups
  • The "import wallet" setting. clicking on it would show user a confirmation dialog in bottom sheet controller similar to the confirmation dialog shown after the secret key backup. ** (1)This action will remove the currently installed wallet. (2)Backup its secret keys if you want too be able to access that wallet in the future. ""
  • clicking on "unlink from this device" would show user same alert as for "import wallet"

Below

screen shot 2018-09-26 at 5 43 02 pm

screen shot 2018-09-26 at 5 42 24 pm

screen shot 2018-09-21 at 3 18 46 pm

zpl://project?pid=5b167c731d079e4122e946b7&seid=5b8fa6c89ac5420ef6557cbe

scan QR / scan QR from image

  • when user scanning the qr code from Camera app. It should be be suggested to open the QR address in the Bank wallet app

  • when scanning payment address QR from scanner
    -- Scan zpl://screen?sid=5b72b882e47db8634b2f1ace&pid=5b167c731d079e4122e946b7
    -- Scan from Gallery zpl://screen?sid=5b72b881e47db8634b2f1aaa&pid=5b167c731d079e4122e946b7

https://scene.zeplin.io/project/5b167c731d079e4122e946b7

settings minor adjustments

  • selected language entry should be shown on language cell on settings
  • same applies to selected base currency
  • when switching between light/dark modes user should remain on settings page minor design fixes
  • move Import Wallet to Security section

AddressManager

AddressManager should be able to:

  • listen to incoming "our" transactions and mark Addresses as "used"
  • generate new addresses if required

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.