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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @returns {Number}
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
|
||||
const assert = require('./util/assert');
|
||||
const KeyRing = require('../lib/primitives/keyring');
|
||||
const Script = require('../lib/script/script');
|
||||
|
||||
const uncompressed = KeyRing.fromSecret(
|
||||
'5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss', 'main');
|
||||
@ -49,4 +50,17 @@ describe('KeyRing', function() {
|
||||
'L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1',
|
||||
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