A web-based custodial Hierarchical Deterministic wallet for Bitcoin built specifically for organizational use case.
- Role Based Access Control (RBAC)
- 2-Factor Authentication
- Hierarchical Control Over Departments and Members
- Multisignature Transactions and Addresses
- Offline Transaction Signing (Utilizing PSBTs)
To start using the application there are several components to setup. First, install all dependencies for both the frontend and backend of the application. You can achieve this by running the following commands on your terminal:
cd fortify-wallet
Then, install all dependencies of the NextJs application:
npm install
Consequently, you should also install the dependencies for the backend server by running the following command:
cd server
Then, install all dependencies of the Node and Express server:
npm install
Note:
to enable self-signed certificates for HTTPS (you can see this in the cert folder in the server), you would need to set the NODE_TLS_REJECT_UNAUTHORIZED
environment variable to 0
. This method is an insecure and cheap way of overlapping the self-signed certificate issue, thus to bolster better security it is recommended to obtain a valid SSL certificate from a trusted certificate authority (CA) and configure it properly in your server.
The database used for the application is MySQL. Thus, a new database needs to be created with the name 'fortify_wallet' (this is the default name, you can change it in .env.example).
In the authentication process of the application, the access and refresh tokens require a secret to be generated and securely stored. This secret should be a long, randomly generated string of characters. Thus, it is recommended to set your own secret by changing it in the environment variables. The secret should be kept confidential and unique.
In the application, AWS KMS is used to encrypt the keys for secure storage. Thus, there are several things needed to enable this, which are KMS key ID, AWS Access Key, and AWS Secret Access Key. The KMS Key ID can be retrieved by first creating a symmetric key in the AWS Key Management Service (KMS) console. Once the key is created, you can obtain its ID from the console.
To configure the AWS Access Key and AWS Secret Access Key, you need to have an AWS account. If you don't have one, you can sign up for free on the AWS website. Once you have an account, you can generate an access key and secret access key in the AWS Identity and Access Management (IAM) console. These credentials will be used to authenticate your application with AWS KMS.
For more detailed instructions on how to configure AWS KMS, you can refer to the AWS documentation on Using AWS Key Management Service (KMS) in your application.
To broadcast transactions and retrieve information regarding specific addresses/wallets, this application utilizes Blockcypher. Thus, a blockcypher token is needed to enable such operations. This token can be retrieved by creating an account on Blockcypher.
After setting up everything, which includes running and setting up the database, setting up the token secrets, AWS Keys, and Blockcypher tokens, you can start running the application by simply running the following command for both the frontend NextJs application and Node/Express backend server:
npm run dev