Skip to content

mybucks-online/app

mybucks.online

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

Mybucks.online is a seedless, disposable crypto wallet designed for speed and convenience. It generates a private key from your passphrase and PIN 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 instantly.

As a hash function, the Scrypt Key Derivation Function (KDF) increases the computational effort required to crack credentials, 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 credentials input, and whenever you close or refresh, there is no footprint. This absolutely protects your privacy.

Zero Footprint

  • No servers, no databases, no storage and no tracking.
  • 100% browser-based.
  • Your credentials never leave your device.
  • Your account is generated whenever you open it. Closing or refreshing your browser erases all traces/history.

Fast and Easy

  • No app installs, no browser extensions, no registration and no KYC.
  • You can create or open your wallet in seconds - all you need is your browser.
  • Passphrase and PIN are easier to handle and remember than seed phrases.

1-Click Gifting

  • Stop asking your friends for their wallet addresses.
  • Send a wallet as a URL rather than just sending coins.
  • The recipient clicks the URL and takes full ownership instantly.
  • This makes gifting or airdropping perfectly easy and enables massive micro-gifting in seconds.

How to Use

  1. Visit app.mybucks.online.
  2. Input your credentials.
    Test credentials:
    passphrase: DemoAccount5&
    PIN: 112324
  3. Click Open.

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

Sign-in Sign-in

Sign-in Dashboard Transfer

How it works?

The Scrypt and Keccak256 hash functions turn your credentials into a private key. The Scrypt KDF(Key Derivation Function) requires significant memory to compute, making brute-force attacks computationally expensive and impractical.

How it works?

Generate the private key

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

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

const HASH_OPTIONS = {
  N: 131072, // CPU/memory cost parameter, 2^17, OWASP recommendation
  r: 8, // block size parameter
  p: 1, // parallelization parameter
  keyLen: 64,
};
const KDF_DOMAIN_SEPARATOR = "mybucks.online-core.generateHash.v2";

// passphrase: at least 12 characters user input, zxcvbn score >= 3
// PIN: at least 6 characters, zxcvbn score >= 1
async function generatePrivateKey(passphrase, pin) {
  const salt = `${passphrase.slice(-4)}${pin}`

  const passwordBuffer = Buffer.from(passphrase);
  const encoded = abi.encode(
    ["string", "string", "string"],
    [KDF_DOMAIN_SEPARATOR, passphrase, pin],
  );
  const saltHash = ethers.keccak256(encoded);
  const saltBuffer = Buffer.from(saltHash.slice(2), "hex");

  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, generate & parse transfer-link token have been extracted into an independent package. You can explore the details of this package here.

npm install @mybucks.online/core

Transfer a wallet via URL 🎁🎁🎁

With mybucks.online, you can send cryptocurrency and even wallet itself via a URL. The recipient simply clicks the link to open the wallet and take full ownership.

Try this link:
https://app.mybucks.online/#wallet=VWnsSGRGVtb0FjY291bnQ1JgIxMTIzMjQCb3B0aW1pc20=_wNovT (legacy)

This feature allows you to create a one-time wallet and put stablecoins or memecoins into it. You can transfer full ownership as a gift without ever asking for a recipient's address. These serve as a "starter" wallet for the recipients, who can then easily withdraw the funds into their own personal pockets or primary wallets.

This is a powerful tool for bulk distribution and massive airdrops to many people simultaneously. You no longer need to ask for a wallet address or force users to connect their wallet to your app for a small $5 referral fee. You simply share the unique links through any messaging platform, social media, or email.

Major dependencies

This project uses the following major dependencies:

  • @mybucks.online/core
    Core module of mybucks.online involving hashing, private-key generation, generate and parse transfer-link token.
  • 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