https://github.com/turtlecoin/turtlecoin-wallet-backend-js
Provides an interface to the TurtleCoin network, allowing wallet applications to be built.
- Downloads blocks from the network, either through a traditional daemon, or a blockchain cache for increased speed
- Processes blocks, decrypting transactions that belong to the user
- Sends and receives transactions
NPM:
npm install turtlecoin-wallet-backend --save
Yarn:
yarn add turtlecoin-wallet-backend
If you need features which have not yet made it into a release yet, you can install from GitHub.
NPM:
npm install https://github.com/turtlecoin/turtlecoin-wallet-backend-js --save
Yarn:
yarn add https://github.com/turtlecoin/turtlecoin-wallet-backend-js
You can view the documentation here
You can see a list of all the other classes on the right side of the screen.
Note that you will need to prefix them all with WB.
to access them, if you are not using typescript style imports, assuming you imported with const WB = require('turtlecoin-wallet-backend')
.
You can find an example project in the examples folder.
const WB = require('turtlecoin-wallet-backend');
(async () => {
const daemon = new WB.Daemon('127.0.0.1', 11898);
/* OR
const daemon = new WB.Daemon('blockapi.turtlepay.io', 443);
*/
const wallet = WB.WalletBackend.createWallet(daemon);
console.log('Created wallet');
await wallet.start();
console.log('Started wallet');
wallet.saveWalletToFile('mywallet.wallet', 'hunter2');
/* Make sure to call stop to let the node process exit */
wallet.stop();
})().catch(err => {
console.log('Caught promise rejection: ' + err);
});
import { WalletBackend, Daemon, IDaemon } from 'turtlecoin-wallet-backend';
(async () => {
const daemon: IDaemon = new Daemon('127.0.0.1', 11898);
/* OR
const daemon: IDaemon = new Daemon('blockapi.turtlepay.io', 443);
*/
const wallet: WalletBackend = WalletBackend.createWallet(daemon);
console.log('Created wallet');
await wallet.start();
console.log('Started wallet');
wallet.saveWalletToFile('mywallet.wallet', 'hunter2');
/* Make sure to call stop to let the node process exit */
wallet.stop();
})().catch(err => {
console.log('Caught promise rejection: ' + err);
});
There are a few features which you may wish to configure that are worth mentioning.
Auto optimization is enabled by default. This makes the wallet automatically send fusion transactions when needed to keep the wallet permanently optimized.
To enable/disable this feature, use the following code:
wallet.enableAutoOptimization(false); // disables auto optimization
By default, coinbase transactions are not scanned. This is due to the majority of people not having solo mined any blocks.
If you wish to enable coinbase transaction scanning, run this line of code:
wallet.scanCoinbaseTransactions(true)
By default, the logger is disabled. You can enable it like so:
wallet.setLogLevel(WB.LogLevel.DEBUG);
and in typescript:
wallet.setLogLevel(LogLevel.DEBUG);
The logger uses console.log, i.e. it outputs to stdout.
If you want to change this, or want more control over what messages are logged, you can provide a callback for the logger to call.
wallet.setLoggerCallback((prettyMessage, message, level, categories) => {
if (categories.includes(WB.LogCategory.SYNC)) {
console.log(prettyMessage);
}
});
and in typescript:
wallet.setLoggerCallback((prettyMessage, message, level, categories) => {
if (categories.includes(LogCategory.SYNC)) {
console.log(prettyMessage);
}
});
In this example, we only print messages that fall into the SYNC category.
You can view available categories and log levels in the documentation.
- Fix package.json not being published to NPM causing require() fail
- Fix auto-optimize not functioning after loading from file
- Increase node threadpool size to prevent issues with timeouts
- Sort outputs before requesting random outs
- Adds a
TRACE
log level for logging of daemon request+response data - Adds a simpler
validateAddress
function to theValidateParameters
module - Slightly improves the Auto Optimization implementation
- Removes
BlockchainCacheApi
andConventionalDaemon
- Please useDaemon
instead - Returns additional information from transaction failure when available
- More logging information added
- Transaction creation process sped up by not re-generating keyimages
- Adds a customizable user agent option to the config
- Ring signatures are now always checked before sending
- Add
on('deadnode')
event
- Calculate balance in an alternative way which fixes historical balances being incorrect after a rewind > 5000 blocks
- Fix heightchange being emitted on topblock when there are still blocks remaining to be processed
on('heightchange')
is now emitted whenreset()
,rewind()
, orrescan()
is used.on('heightchange')
is now emitted when a top block is stored, fixing wallet height lagging behind network height.
- Fix issue with removeForkedTransactions, which also effected
rewind()
- Add
rewind()
- Add
on('heightchange')
event - More improvements to keep-alive, max sockets, etc
- Fix bug causing balance from sent transaction to appear in both locked + unlocked balance
- Fix bug with how forked transactions were handled
- Increase max sockets to use with request to fix timeouts in some environments
- Fix bug where transactions to yourself had an incorrect amount when locked
- Add
on('disconnect')
andon('connect')
events for daemon - Update
turtlecoin-utils
dependency
- Set keep-alive to true for
Daemon
andBlockchainCacheApi
- Use IP regex instead of
net
module to allow working in non node environments
- Fix transactions being broken
- Add type assertions for JavaScript users
- May possibly break your code if you were using implicit conversions to pass strings as numbers, etc
- Fix bug where
cancelledTransactionsFailCount
was not correctly initialized when loading from file - Fix warning when using TLS with raw IP address
- Known regression - Transactions are broken. Update to 3.4.1
- Migrate from node-fetch to request for
BlockchainCacheApi
as it works better in odd environments - Remove
maxBodyRequestSize
property asabort-controller
significantly complicated code and didn't work in odd environments - Known regression - Transactions are broken. Update to 3.4.1
- Improve auto optimization
- Update turtlecoin-utils dependency
- Known regression - Transactions are broken. Update to 3.4.1
- Adds
swapNode()
method
- Adds
getDaemonConnectionInfo()
method - Removes compiled JavaScript from GitHub - GitHub install is no longer supported
- Fixes bug where wallet may not correctly halt after calling
stop()
.
- Adds
Daemon
class. This class supports Blockchain cache api's, conventional daemons, http and https, all automatically. - Marks
ConventionalDaemon
andBlockchainCacheApi
as deprecated. These will be removed in v4.0.0. Please use theDaemon
class instead.
- Fix issue where
reset()
would cause double wallet scanning.
- Fix bug where using multiple wallet instances with different configs would only use the latest config.
- API change - You must now provide a config to the Utilities/ValidateParameters functions if you are using a non default config, for example if you are using the library for another cryptocurrency. Otherwise, the default TurtleCoin config will be used.
Start of changelog.
git clone https://github.com/turtlecoin/turtlecoin-wallet-backend-js.git
cd turtlecoin-wallet-backend
npm install -g yarn
(Skip this if you already have yarn installed)
yarn build
Generated javascript files will be written to the dist/lib/ folder.
yarn test
- This will run the basic tests
yarn test-all
- This will run all tests, including performance tests.
- Ensure you are editing the TypeScript code, and not the JavaScript code (You should be in the
lib/
folder) - Ensure you have built the JavaScript code from the TypeScript code:
yarn build
- Ensure you have updated the documentation if necessary - Documentation is generated from inline comments, jsdoc style.
- Ensure you have rebuilt the documentation, if you have changed it:
yarn docs
- Ensure the tests all still pass:
yarn test
, oryarn test-all
if you have a local daemon running. - Ensure your code adheres to the style requirements:
yarn style
You can try running yarn style --fix
to automatically fix issues.