Merge pull request #648 from OrfeasLitos/get-keys-from-multisig

Implement and test KeyRing.fromMultisigScript(script, i)
This commit is contained in:
Javed Khan 2019-01-04 20:35:35 +05:30 committed by GitHub
commit b0bf2ddd37
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 0 deletions

View File

@ -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}

View File

@ -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());
});
});