UNPKG

scpx-wallet

Version:

Scoop Core Wallet: dual-signature timelock crypto wallet - multi-asset, cross-platform and open-source

164 lines (142 loc) 7.6 kB
# Development Guide ## Architecture * https://github.com/trezor/blockbook - primary 3PBP interface: preferred, due to pure websocket interface. * https://github.com/bitpay/insight-api - secondary 3PBP interface: BTC_TEST uses this codepath, and is retained as fallback interface for additional assets. * https://github.com/EOSIO/eos - used as the backing store for web client accounts: optional dependency of the Core Wallet. ## Platform `nvm install lts/fermium` tested: "node": "14.16.0", "npm": "6.14.11" ## Setup > All: * ```npm install -g node-gyp``` * ```git clone https://github.com/Scoop-Tech/scpx-wallet.git``` * ```cd scpx-wallet``` > Windows: * ```npm install -g --production windows-build-tools@4.0.0``` - see also [here](https://github.com/felixrieseberg/windows-build-tools/issues/152) * ```npm config set msvs_version 2015``` > All: * ```npm install``` - Windows: see also [here](https://github.com/nodejs/node-gyp/issues/671) re. node-gyp rebuild failures ## Running Core Wallet CLI - through NPM * ```npm run dev``` - runs with dev flags (saves CLI history to file, caches MPK in memory, activates test assets) * ```npm start``` - runs with prod flags ## Running Core Wallet CLI - directly with Node, e.g: * ```node --experimental-worker ./sw-cli.js --help``` to view CLI options * ```export NODE_OPTIONS=development &&node --experimental-worker ./sw-cli.js --saveHistory=true --mpk=... --loadServer=...``` e.g. to load a server-wallet, e.g. one created from www.scoop.tech ## Running Tests * See: `.env.example` to run the entire integration test suite (you'll need to make a server test account, and fund it with test assets) * ```npm run test``` to run the the CI test suite; if no .env value(s) found, it will skip some tests * ```npm run test -- -t "BTC_TEST"``` - to run individual tests, filtered by ```it()``` description The full test suite executes full integration tests that transact on testnets - these incur testnet network fees. The Travis integration suite uses a server account for this. If you can help keep it topped up, the testnet addresses are: * **BTC_TEST** ```2NFsNU7FJusZeNiCAHwHJvjw1UBLT1hw6iv``` (BTC Testnet3 P2SH) * https://testnet-faucet.mempool.co/ * https://tbtc.bitaps.com/ * http://bitcoinfaucet.uo1.net/send.php/ * **ZEC_TEST** ```tmAU27N3iHMeejD6GPHYiSnH8vit1XT9uEX``` (ZEC Testnet) * https://faucet.testnet.z.cash/ * https://zcashfaucet.info/ * **ETH_TEST** ```0xda9abd90e6cd31e8e0c2d5f35d3d5a71c8661b0e``` (ETH Ropsten) * https://faucet.ropsten.be/ ```wget https://faucet.ropsten.be/donate/0xda9abd90e6cd31e8e0c2d5f35d3d5a71c8661b0e``` * https://faucet.metamask.io/ Core wallet functions are demonstrated as integration tests, many of which interact over HTTPS with 3rd Party Blockchain Providers (3PBPs) and/or the Scoop [Data Storage Contract](https://github.com/Scoop-Tech/scpx-eos). Pull requests are welcome, as are contributions for more fine-grained unit tests. * [Create a new receive address for all asset types](./tests/integration.test.js) * [Fetch suggested network fee rates for all asset types](./tests/integration.test.js) * [Create a new in-memory wallet](./tests/integration.test.js) * [Dump a wallet](./tests/integration.test.js) * [Reinitialize a known wallet in-memory](./tests/integration.test.js) * [Persist a wallet to and from file](./tests/integration.test.js) * [Persist a wallet to and from the Data Storage Contract](./tests/integration.test.js) * [Connect a wallet to 3PBPs](./tests/integration.test.js) * [Import and remove private keys](./tests/integration.test.js) * [Connect 3PBP (Insight REST API), create tx hex, compute tx fees and push a tx for UTXO-model BTC_TEST](./tests/integration.test.js) * [Connect 3PBP (Blockbook WS API), create tx hex, compute tx fees and push a tx for UTXO-model ZEC_TEST](./tests/integration.test.js) * [Connect 3PBP (Blockbook WS API + Geth RPC), create tx hex, compute tx fees and push a tx for account-model ETH_TEST](./tests/integration.test.js) ## Contributing Please see the [Contribution Guide](./CONTRIBUTING.md) for more info. ## Debugging Visual Studio Code is recommended. A template ./vscode/launch.json with some common launch actions: ``` { "version": "0.2.0", "configurations": [ // LOAD SERVER WALLET { "type": "node", "request": "launch", "env": { "NODE_OPTIONS": "--experimental-worker", "NODE_ENV": "development" }, "stopOnEntry": false, "runtimeVersion": "14.16.0", "name": "wallet-dev", "cwd": "${workspaceFolder}/ext/wallet", "program": "${workspaceFolder}/ext/wallet/sw-cli.js", "args": ["--rpc=true", "--rpcPort=4000", "--rpcRemoteHosts=::ffff:127.0.0.1", "--rpcUsername=scp", "--rpcPassword=123", //"--mpk=...", //"--loadServer=...", "--saveHistory=true" ], "console": "externalTerminal", "runtimeExecutable": "node", "runtimeArgs": ["--nolazy"], "autoAttachChildProcesses": true }, // NEW LOCAL EMPTY WALLET, OR LOAD FILE WALLET { "name": "local: new", "type": "node", "runtimeVersion": "10.22.0", "request": "launch", "env": { "NODE_OPTIONS": "--experimental-worker", "NODE_ENV": "development" }, "stopOnEntry": false, "runtimeVersion": "14.16.0", "cwd": "${workspaceFolder}/ext/wallet", "program": "${workspaceFolder}/ext/wallet/sw-cli.js", "args": [//"--mpk=...", //"--loadFile=...", "--rpc=true", "--rpcPort=4000", "--rpcRemoteHosts=::ffff:127.0.0.1", "--rpcUsername=scp", "--rpcPassword=.....", "--saveHistory=true" ], "console": "externalTerminal", "runtimeExecutable": "node", "runtimeArgs": ["--nolazy"], "autoAttachChildProcesses": true }, // RUN TESTS { "name": "tests: integration", "type": "node", "runtimeVersion": "10.22.0", "request": "launch", "env": { "NODE_OPTIONS": "--experimental-worker", "NODE_ENV": "test" }, "stopOnEntry": false, "runtimeVersion": "14.16.0", "cwd": "${workspaceFolder}/ext/wallet", "program": "${workspaceFolder}/ext/wallet/node_modules/.bin/jest", "args": ["--runInBand", "--verbose", "--forceExit", "--env=node", "--coverage", //"-t=DSIG" ], "autoAttachChildProcesses": true, "console": "externalTerminal", "internalConsoleOptions": "neverOpen", "disableOptimisticBPs": true, "windows": { "program": "${workspaceFolder}/node_modules/jest/bin/jest", } } ] } ```