added Script::num_signatures_required method

This commit is contained in:
Svyatoslav Nikolsky 2016-12-12 18:01:44 +03:00
parent c82cd6a946
commit bc731d6755
1 changed files with 34 additions and 0 deletions

View File

@ -340,6 +340,16 @@ impl Script {
total
}
pub fn num_signatures_required(&self) -> u8 {
if self.is_multisig_script() {
return match self.data[0] {
x if x == Opcode::OP_0 as u8 => 0,
x => x - (Opcode::OP_1 as u8) + 1,
};
}
return 1;
}
pub fn extract_destinations(&self) -> Result<Vec<AddressHash>, keys::Error> {
match self.script_type() {
ScriptType::NonStandard => {
@ -697,4 +707,28 @@ OP_ADD
assert_eq!(script.script_type(), ScriptType::Multisig);
assert_eq!(script.extract_destinations(), Ok(vec![address1, address2]));
}
#[test]
fn test_num_signatures_required() {
let script = Builder::default()
.push_opcode(Opcode::OP_3)
.push_bytes(&[0; 33])
.push_bytes(&[0; 65])
.push_bytes(&[0; 65])
.push_bytes(&[0; 65])
.push_opcode(Opcode::OP_4)
.push_opcode(Opcode::OP_CHECKMULTISIG)
.into_script();
assert_eq!(script.script_type(), ScriptType::Multisig);
assert_eq!(script.num_signatures_required(), 3);
let script = Builder::default()
.push_opcode(Opcode::OP_HASH160)
.push_bytes(&[0; 20])
.push_opcode(Opcode::OP_EQUAL)
.into_script();
assert_eq!(script.script_type(), ScriptType::ScriptHash);
assert_eq!(script.num_signatures_required(), 1);
}
}