fixed bip66

This commit is contained in:
debris 2017-04-08 20:59:10 +07:00
parent d054d3592d
commit eef94cc65f
3 changed files with 23 additions and 1 deletions

View File

@ -10,6 +10,9 @@ pub struct ConsensusParams {
/// Block height at which BIP65 becomes active.
/// See https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
pub bip65_height: u32,
/// Block height at which BIP65 becomes active.
/// See https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
pub bip66_height: u32,
}
impl ConsensusParams {
@ -18,14 +21,17 @@ impl ConsensusParams {
Magic::Mainnet | Magic::Other(_) => ConsensusParams {
bip16_time: 1333238400, // Apr 1 2012
bip65_height: 388381, // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0
bip66_height: 363725, // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931
},
Magic::Testnet => ConsensusParams {
bip16_time: 1333238400, // Apr 1 2012
bip65_height: 581885, // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6
bip66_height: 330776, // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182
},
Magic::Regtest | Magic::Unitest => ConsensusParams {
bip16_time: 1333238400, // Apr 1 2012
bip65_height: 1351,
bip66_height: 1251,
},
}
}
@ -47,4 +53,11 @@ mod tests {
assert_eq!(ConsensusParams::with_magic(Magic::Testnet).bip65_height, 581885);
assert_eq!(ConsensusParams::with_magic(Magic::Regtest).bip65_height, 1351);
}
#[test]
fn test_consensus_params_bip66_height() {
assert_eq!(ConsensusParams::with_magic(Magic::Mainnet).bip66_height, 363725);
assert_eq!(ConsensusParams::with_magic(Magic::Testnet).bip66_height, 330776);
assert_eq!(ConsensusParams::with_magic(Magic::Regtest).bip66_height, 1251);
}
}

View File

@ -77,5 +77,10 @@ impl VerificationFlags {
self.verify_clocktimeverify = value;
self
}
pub fn verify_dersig(mut self, value: bool) -> Self {
self.verify_dersig = value;
self
}
}

View File

@ -300,6 +300,7 @@ pub struct TransactionEval<'a> {
store: DuplexTransactionOutputProvider<'a>,
verify_p2sh: bool,
verify_clocktime: bool,
verify_dersig: bool,
}
impl<'a> TransactionEval<'a> {
@ -312,12 +313,14 @@ impl<'a> TransactionEval<'a> {
) -> Self {
let verify_p2sh = time >= params.bip16_time;
let verify_clocktime = height >= params.bip65_height;
let verify_dersig = height >= params.bip66_height;
TransactionEval {
transaction: transaction,
store: store,
verify_p2sh: verify_p2sh,
verify_clocktime: verify_clocktime,
verify_dersig: verify_dersig,
}
}
}
@ -346,7 +349,8 @@ impl<'a> TransactionRule for TransactionEval<'a> {
let flags = VerificationFlags::default()
.verify_p2sh(self.verify_p2sh)
.verify_clocktimeverify(self.verify_clocktime);
.verify_clocktimeverify(self.verify_clocktime)
.verify_dersig(self.verify_dersig);
try!(verify_script(&input, &output, &flags, &checker).map_err(|_| TransactionError::Signature(index)));
}