This repo contains the source code for Taostats Wallet.
If you would like to build Taostats from source, please continue reading:
This project is a modified fork of the Talisman Wallet (GPLv3). Original source:
Copyright © Talisman Wallet Contributors
This version has been modified and extended by Taostats / T34 Corporation FZCO for the Bittensor ecosystem.
Forked from Talisman Wallet commit: 87f53edb4183924c76cad974af28492efd004792
All modifications are distributed under the GNU General Public License v3.0 (GPLv3).
If you haven't already, you will first need to install Node.js on your system.
This repo uses corepack and pnpm to manage dependencies.
Corepack is distributed by default with all recent Node.js versions.
Pnpm is a fast, disk space efficient javascript package manager.
Corepack lets you use pnpm without having to install a specific version of it.
Once you have installed Node.js, run corepack enable to turn it on, then follow the Getting started instructions to continue.
-
Install Node.js and enable corepack, as per the System Requirements section.
-
Clone the repo.
git clone git@github.com:TaostatsSociety/taostats.git -
Change to the repo directory.
cd taostats -
Install nodejs
nvm install -
Install dependencies.
pnpm install -
Start the dev server, waiting for it to generate the
distdirectory.pnpm dev:extension -
Open Chrome and navigate to
chrome://extensions. -
Turn on the
Developer modetoggle on the top right of the page. -
Click
Load unpackedon the top left of the page and select theapps/extension/dist/chromedirectory. -
Change some code!
apps/extension: the non-custodial Taostats Wallet browser extensionpackages/eslint-config: sharedeslintconfigurationspackages/tsconfig: sharedtsconfig.jsons used throughout the monorepopackages/util: library containing shared non-react code. It is not meant to be npm published.
All our apps and packages are 100% TypeScript.
- Testing is carried out with Jest.
- Tests can be written in
*.spec.tsfiles, inside a__tests__folder. - Follow the pattern in
apps/extension/src/core/handlers/Extension.spec.tsorapps/extension/src/core/domains/signing/__tests__/requestsStore.spec.ts - Tests are run with
pnpm test
We use i18next in the wallet to make it available in a bunch of languages.
When building UI features, please follow the following spec to ensure they're translatable:
-
Import the
useTranslationhook into your React components:import { useTranslation } from "react-i18next"
-
Use the hook in your component to get access to the
tfunction:const { t } = useTranslation()
-
Wrap any user-visible language in your component with the
tfunction:return ( <div className="flex flex-col items-start"> <div className="text-base">{t("Account Assets")}</div> <div className="text-sm"> {t("Account has {{assetCount}} assets", { assetCount: assets.length })} </div> </div> )
-
If you want to include any react components in your translation, you will need to use the
Transcomponent:import { useTranslation, Trans } from "react-i18next" const { t } = useTranslation() return ( <Trans {/* DO NOT FORGET THIS `t` PROP! */} t={t} defaults="Your <Highlight>{{name}} <Tooltip /></Highlight> address" values={{ name: chain.name }} components={{ Highlight: <span className="text-body" />, Tooltip: ( <Tooltip> <TooltipTrigger> <InfoIcon className="hover:text-body inline align-middle text-xs" /> </TooltipTrigger> <TooltipContent> {t( "Only use this address for receiving assets on the {{name}} network.", { name: chain.name, } )} </TooltipContent> </Tooltip> ), }} )
-
If you see one of the following errors in your console:
locales/en/common.json:1 Failed to load resource: net::ERR_FILE_NOT_FOUNDi18next::translator: missingKey en common <i18n-key>Then update the english translation files with this command:
pnpm chore:update-translations
chore:update-translations: finds all of the i18n strings in the codebase and adds them to the english translations files which i18next loads in development builds of the walletdev: builds and watches all packages/apps with hot reloadingdev:extension: when working on extension only, for better color outputbuild: builds the wallet inpackages/apps/extension/dist/chromefolder, without sentry keysbuild:firefox: builds the wallet inpackages/apps/extension/dist/firefoxfolder, without sentry keysbuild:extension:prodbuilds the Taostats browser extension (requires sentry settings, Taostats team only)build:extension:canary: builds the Taostats browser extension test version, with different ID and icon than prod
# builds with docker, outputs in dist folder at the root of the monorepo
rm -rf dist && DOCKER_BUILDKIT=1 docker build --output type=local,dest=./dist .