95 lines
1.4 KiB
JavaScript
95 lines
1.4 KiB
JavaScript
/*!
|
|
* paths.js - paths object for hsd
|
|
* Copyright (c) 2019, Boyma Fahnbulleh (MIT License).
|
|
* https://github.com/handshake-org/hsd
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const assert = require('bsert');
|
|
|
|
/** @typedef {import('./path')} Path */
|
|
|
|
/**
|
|
* Paths
|
|
* Represents the HD paths for coins in a single transaction.
|
|
* @alias module:wallet.Paths
|
|
* @property {Map[]} outputs - Paths.
|
|
*/
|
|
|
|
class Paths {
|
|
/**
|
|
* Create paths
|
|
* @constructor
|
|
*/
|
|
|
|
constructor() {
|
|
this.paths = new Map();
|
|
}
|
|
|
|
/**
|
|
* Add a single entry to the collection.
|
|
* @param {Number} index
|
|
* @param {Path} path
|
|
* @returns {Path}
|
|
*/
|
|
|
|
add(index, path) {
|
|
assert((index >>> 0) === index);
|
|
assert(path);
|
|
this.paths.set(index, path);
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Test whether the collection has a path.
|
|
* @param {Number} index
|
|
* @returns {Boolean}
|
|
*/
|
|
|
|
has(index) {
|
|
return this.paths.has(index);
|
|
}
|
|
|
|
/**
|
|
* Get a path.
|
|
* @param {Number} index
|
|
* @returns {Path|null}
|
|
*/
|
|
|
|
get(index) {
|
|
return this.paths.get(index) || null;
|
|
}
|
|
|
|
/**
|
|
* Remove a path and return it.
|
|
* @param {Number} index
|
|
* @returns {Path|null}
|
|
*/
|
|
|
|
remove(index) {
|
|
const path = this.get(index);
|
|
|
|
if (!path)
|
|
return null;
|
|
|
|
this.paths.delete(index);
|
|
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Test whether there are paths.
|
|
* @returns {Boolean}
|
|
*/
|
|
|
|
isEmpty() {
|
|
return this.paths.size === 0;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Expose
|
|
*/
|
|
|
|
module.exports = Paths;
|