LinuxServer Nano Wallet
This project has some core goals that are very different from a conventional CryptoCurrency wallet:
- Ability to hook into a user defined network
- Interact with a raw Nano RPC endpoint without middleware
- No live info feeds for transactions (websockets), data is loaded from remote statically and the user needs to manually refresh
- Completely clientside and run in any web browser with no server requirements (even object storage)
- No browser/disk local storage used
- provide block explorer functionality with the clientside wallet and publically clickable links
With that said, these design concepts greatly reduce the barrier of entry to a user of your network. The end user can simply access a web page, generate a wallet, and be off and running after they are sent funds.
Hosted wallet endpoints
The source code for this project is built transparently and published to Github pages at the following endpoints:
- https://tixwallet.cc/#/ - Custom branded wallet running on the Nano main network
- https://wallet.linuxserver.io/#/nano.linuxserver.io - What is considered stable, built from releases in this repo.
- https://devwallet.linuxserver.io/#/nano.linuxserver.io - Current head of master built from commits to master in this repo.
The URL paths for public block exploration are in the following format:
- https://wallet.linuxserver.io/#/nano.linuxserver.io/block/YOUR_BLOCK_HASH_HERE - Displays raw block information.
- https://wallet.linuxserver.io/#/nano.linuxserver.io/address/YOUR_ADDRESS_HERE - Displays a stripped down wallet interface with transaction history.
We also provide Point of Sale like functionality using the following format:
- https://wallet.linuxserver.io/#/nano.linuxserver.io/pos/YOUR_ADDRESS_HERE - Displays an interactive receive menu
The Point of sale view is designed around the concept that you will be actively receiving funds during a transaction, and pocketing them later from a secure backend/terminal. It can be accessed by anyone and does not require credentials. You set the amount and a QR tag is generated from that amount. Once the amount is paid by a user from their phone/device the delivered transaction to that specific wallet you will trigger a success notification and the total owed will be cleared for the next transaction. Using this model it is important to not use duplicate wallets across different terminals or endpoints or your transactions during the receive window will conflict. It is important to note that the same functionality is available from the
Receive menu with an opened unlocked wallet.
If this wallet is forked from this source and published elsewhere or to your own Github pages endpoint as laid out in the
Customisation section of this document you should use the following URL formats:
- https://yoursubdomain.yourdomain.com/ - Home full wallet
- https://yoursubdomain.yourdomain.com/#/block/YOUR_BLOCK_HASH_HERE - Block view
- https://yoursubdomain.yourdomain.com/#/address/YOUR_ADDRESS_HERE - Address view
- https://yoursubdomain.yourdomain.com/#/pos/YOUR_ADDRESS_HERE - POS view
In general this URL format is self documenting from the wallet interface as all of the links will use these endpoints in new windows to provide shareable public links.
Live Nano network addresses
We will list here Live Nano RPC provies that we add and how to use them.
Does not requires an API key to use
Requires an API key to use: https://mynano.ninja/auth/login#apikey
We recommend end users looking to locally host this wallet themselves use the Docker container located here it is a simple nginx wrapper for the built code from this repository.
docker run -d \ --name=nano-wallet \ -p 80:80 \ --restart unless-stopped \ linuxserver/nano-wallet
Then access http://localhost/#/YOUR_RPC_ENDPOINT .
If you want to lock the wallet to a specific RPC server then go to
src/stores/app/state.js and change
changeaddress to false, the node will then be locked to the node details directly beneath (only change the settings node details not the main node details).
From there basic branding would be to modify the site title found in
.env and swap out our QR code icon at
public/wallet_logo.png for the paper wallet, we have specifically made efforts to not brand this wallet to our codebase or organization to allow anyone with a public RPC endpoint to also host this wallet themselves and have their users use it as a wallet and block explorer.
Currently statically set RPC endpoints allowing users to simply access https://wallet.yourdomain.com and be off and transacting require that the
block_count RPC action is whitelisted by your RPC servers, it is used on connect to ensure the RPC server is healthy. You can also optionally setup multiple RPC servers to fall back on in case of downtime by defining multiple in the
src/stores/app/state.js array for
If you want to support scanning of NFC tags from your web wallet please note that because the Chrome support for Web NFC is currently in an experimental stage you will need to register an origin token here:
And set the token in
.env to the one for your own Domain. Keep in mind this will only function on Andoid with Chrome on a device that supports NFC.
Hosting your forked repo from Github Pages
If you are planning on hosting this wallet on your domain pointed to your RPC servers, for transparency it is likely best to fork this repo and publish it using Github Pages . Here are the basic steps to follow to achieve that:
- Fork this repo into your namespace in Github
- In your repo under
Actionsclick to enable actions on your fork
- In your repo main settings enable Github pages and set your custom domain
- Generate an API key following the instructions here, you will need to select the
- Set this API key in your repo settings under
ACCESS_TOKENthis key is needed to publish changes to the
gh-pagesbranch of your repo
- Push your customizations to your repo on the master branch, this should trigger a build of the site and push to the gh-pages branch using the logic located here
- When built the wallet will be available at the endpoint you defined pointed to your RPC servers given you have the DNS properly setup as described here
From here you can ingest upstream changes from this repo when needed and customize it to your needs while Github deploys your site on updates to their hosted CDN.
Building from source and development
The frontend framework for this project is vuejs below are the commands used to build this project from source and run a local development environment. We highly reccomending using vuejs-devtools locally to inspect and debug.
Compiles and hot-reloads for development
npm run serve
Compiles and minifies for production
npm run build
Lints and fixes files
npm run lint