Merge pull request #648 from OrfeasLitos/get-keys-from-multisig
Implement and test KeyRing.fromMultisigScript(script, i)
This commit is contained in:
commit
b0bf2ddd37
@ -251,6 +251,37 @@ class KeyRing {
|
|||||||
return new this().fromScript(key, script, compress);
|
return new this().fromScript(key, script, compress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get ith public key from multisig script.
|
||||||
|
* @private
|
||||||
|
* @param {Script} script
|
||||||
|
* @param {Number} i
|
||||||
|
* @returns {KeyRing}
|
||||||
|
*/
|
||||||
|
|
||||||
|
fromMultisigScript(script, i) {
|
||||||
|
assert(script instanceof Script, 'Non-script passed.');
|
||||||
|
assert(script.isMultisig(), 'Script must be multisig');
|
||||||
|
|
||||||
|
const n = script.getSmall(-2);
|
||||||
|
assert(i >= 1 && i <= n, 'Requested `i`th key, `n` available');
|
||||||
|
|
||||||
|
this.fromKey(script.code[i].toData());
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiate keyring from ith key in multisig script.
|
||||||
|
* @param {Script} script
|
||||||
|
* @param {Number} i
|
||||||
|
* @returns {KeyRing}
|
||||||
|
*/
|
||||||
|
|
||||||
|
static fromMultisigScript(script, i) {
|
||||||
|
return new this().fromMultisigScript(script, i);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate WIF serialization size.
|
* Calculate WIF serialization size.
|
||||||
* @returns {Number}
|
* @returns {Number}
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
const assert = require('./util/assert');
|
const assert = require('./util/assert');
|
||||||
const KeyRing = require('../lib/primitives/keyring');
|
const KeyRing = require('../lib/primitives/keyring');
|
||||||
|
const Script = require('../lib/script/script');
|
||||||
|
|
||||||
const uncompressed = KeyRing.fromSecret(
|
const uncompressed = KeyRing.fromSecret(
|
||||||
'5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss', 'main');
|
'5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss', 'main');
|
||||||
@ -49,4 +50,17 @@ describe('KeyRing', function() {
|
|||||||
'L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1',
|
'L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1',
|
||||||
compressed.toSecret('main'));
|
compressed.toSecret('main'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should get keys from multisig', () => {
|
||||||
|
const script = Script.fromMultisig(1, 2, [
|
||||||
|
compressed.getPublicKey(),
|
||||||
|
uncompressed.getPublicKey()]);
|
||||||
|
|
||||||
|
assert.strictEqual(
|
||||||
|
compressed.getPublicKey(),
|
||||||
|
KeyRing.fromMultisigScript(script, 1).getPublicKey());
|
||||||
|
assert.strictEqual(
|
||||||
|
uncompressed.getPublicKey(),
|
||||||
|
KeyRing.fromMultisigScript(script, 2).getPublicKey());
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user