Skip to content

mybucks-online/app

mybucks.online

Summary

This is a source repository of app.mybucks.online.

Mybucks.online is a password-only, self-custodial and browser-based cryptocurrency wallet built with React.js. It generates a private key from your password and passcode using an industry-standard, verified one-way hash function. Your private key forms your account, allowing you to transfer, receive, and hold your crypto assets permanently.

As a hash function, the scrypt Key Derivation Function (KDF) increases the computational effort required to crack passwords, effectively delaying brute-force attacks and making them impractical.

It fully runs on your browser side without using any storage or invoking any 3rd-party APIs for key management. It instantly generates your private key from your password input, and whenever you close or refresh, there is no footprint. This absolutely protects your privacy.

How it works?

How to Use

  1. Visit app.mybucks.online.
  2. Input your password and passcode.
    Test credentials:
    password: DemoAccount5&
    passcode: 112324
  3. Click Open.

(This process is the same for both initial opening and all subsequent uses.)

Sign-in

Sign-in Dashboard Transfer

Key Points

Privacy Protection

  • No Registration Required: No need for personal information, not even your email address.
  • Absolute Privacy: Nobody knows who you are; nobody stores your password.
  • Transient Data: Your account is generated whenever you open it. Closing or refreshing your browser erases all traces/history.
  • Share your wallet address: its origin remains unknown.

Security

  • One-Way Hash Function: Utilizes scrypt and keccak256. Your password determines a unique private key.
  • Resistance to Attacks: Brute force attacks would take centuries. A strong password ensures asset protection.

Ease of Use

  • Simple Access: Only requires a password, no 12-word seed phrases.
  • No KYC Hassles: No worries about KYC or suspensions.
  • Private Key Portability: Backup your password/private key. Import into Metamask to use across DeFi products.

Generate the private key

This demonstrates how to generate a private key from your password and passcode and helps you understand the process.

import { Buffer } from "buffer";
import { ethers } from "ethers";
import { scrypt } from "scrypt-js";

const HASH_OPTIONS = {
  N: 32768, // CPU/memory cost parameter, 2^15
  r: 8, // block size parameter
  p: 5, // parallelization parameter
  keyLen: 64,
};

// password: at least 12 characters user input, lowercase, uppercase, digits, and special characters
// passcode: at least 6 characters
async function generatePrivateKey(password, passcode) {
  const salt = `${password.slice(-4)}${passcode}`

  const passwordBuffer = Buffer.from(password);
  const saltBuffer = Buffer.from(salt);

  const hashBuffer = await scrypt(
    passwordBuffer,
    saltBuffer,
    HASH_OPTIONS.N,
    HASH_OPTIONS.r,
    HASH_OPTIONS.p,
    HASH_OPTIONS.keyLen,
    (p) => console.log(Math.floor(p * 100))
  );
  const hashHex = Buffer.from(hashBuffer).toString("hex");
  const privateKey = ethers.keccak256(abi.encode(["string"], [hashHex]));

  return privateKey;
}

@mybucks.online/core

The core components responsible for hash and private-key generation have been extracted into an independent package. You can explore the details of this package here.

npm install @mybucks.online/core

Transfer Ownership 🎁🎁🎁

You can transfer all your holdings to family or friends in a few seconds by sharing your password only.
Send this short note to your friend in a private channel.

mybucks.online / DemoAccount5& : 112324

And you can even transfer wallet itself by using a URL:
https://app.mybucks.online/?wallet=VWnsSGRGVtb0FjY291bnQ1JgIxMTIzMjQCb3B0aW1pc20=_wNovT

This might sound complicated, but it's actually quite simple: you're sending someone your cryptocurrency along with the wallet itself. Think of it like putting $5 or $10 cash in an envelope with a gift card - they receive both the money and the card.

You can extract this link in the Backup menu.
This feature allows you to transfer cryptocurrency without asking recipient's address.

Major dependencies

This project uses the following major dependencies:

  • scrypt-js
    Implements the scrypt hash function. Please check the npm registry here.
  • ethers
    A standard library for manipulating EVM accounts.
  • moralis
    Provides query functions for massive crypto assets in multiple networks.
  • @uniswap/default-token-list
    ERC20 tokens are filtered to only display those included in the Uniswap default token list.
  • tronweb
  • styled-components

How to Run

Please sign up for Infura, Moralis and Trongrid, create free API keys, and update the environment variables accordingly.

yarn install
cp .env.example .env
# Update the .env variables with valid keys
yarn dev

Production Environment

The project is deployed via GitHub Pages and GitHub Actions. You can verify the deployment and DNS configuration:

Quick Links