more tests
This commit is contained in:
parent
b8f38ad121
commit
528c639c20
|
@ -278,9 +278,7 @@ mod tests {
|
||||||
let genesis = test_data::block_builder()
|
let genesis = test_data::block_builder()
|
||||||
.transaction()
|
.transaction()
|
||||||
.coinbase()
|
.coinbase()
|
||||||
.output()
|
.output().value(50).build()
|
||||||
.value(50)
|
|
||||||
.build()
|
|
||||||
.build()
|
.build()
|
||||||
.merkled_header().build()
|
.merkled_header().build()
|
||||||
.build();
|
.build();
|
||||||
|
@ -291,9 +289,7 @@ mod tests {
|
||||||
let block = test_data::block_builder()
|
let block = test_data::block_builder()
|
||||||
.transaction().coinbase().build()
|
.transaction().coinbase().build()
|
||||||
.transaction()
|
.transaction()
|
||||||
.input()
|
.input().hash(genesis_coinbase.clone()).build()
|
||||||
.hash(genesis_coinbase.clone())
|
|
||||||
.build()
|
|
||||||
.build()
|
.build()
|
||||||
.merkled_header().parent(genesis.hash()).build()
|
.merkled_header().parent(genesis.hash()).build()
|
||||||
.build();
|
.build();
|
||||||
|
@ -307,4 +303,78 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(expected, verifier.verify(&block));
|
assert_eq!(expected, verifier.verify(&block));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn coinbase_happy() {
|
||||||
|
|
||||||
|
let path = RandomTempPath::create_dir();
|
||||||
|
let storage = Storage::new(path.as_path()).unwrap();
|
||||||
|
|
||||||
|
let genesis = test_data::block_builder()
|
||||||
|
.transaction()
|
||||||
|
.coinbase()
|
||||||
|
.output().value(50).build()
|
||||||
|
.build()
|
||||||
|
.merkled_header().build()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
storage.insert_block(&genesis).unwrap();
|
||||||
|
let genesis_coinbase = genesis.transactions()[0].hash();
|
||||||
|
|
||||||
|
// waiting 100 blocks for genesis coinbase to become valid
|
||||||
|
for _ in 0..100 {
|
||||||
|
storage.insert_block(
|
||||||
|
&test_data::block_builder()
|
||||||
|
.transaction().coinbase().build()
|
||||||
|
.merkled_header().parent(genesis.hash()).build()
|
||||||
|
.build()
|
||||||
|
).expect("All dummy blocks should be inserted");
|
||||||
|
}
|
||||||
|
|
||||||
|
let best_hash = storage.best_block().expect("Store should have hash after all we pushed there").hash;
|
||||||
|
|
||||||
|
let block = test_data::block_builder()
|
||||||
|
.transaction().coinbase().build()
|
||||||
|
.transaction()
|
||||||
|
.input().hash(genesis_coinbase.clone()).build()
|
||||||
|
.build()
|
||||||
|
.merkled_header().parent(best_hash).build()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let verifier = ChainVerifier::new(Arc::new(storage)).pow_skip().signatures_skip();
|
||||||
|
|
||||||
|
let expected = Ok(Chain::Main);
|
||||||
|
|
||||||
|
assert_eq!(expected, verifier.verify(&block))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn coinbase_overspend() {
|
||||||
|
|
||||||
|
let path = RandomTempPath::create_dir();
|
||||||
|
let storage = Storage::new(path.as_path()).unwrap();
|
||||||
|
|
||||||
|
let genesis = test_data::block_builder()
|
||||||
|
.transaction().coinbase().build()
|
||||||
|
.merkled_header().build()
|
||||||
|
.build();
|
||||||
|
storage.insert_block(&genesis).unwrap();
|
||||||
|
|
||||||
|
let block = test_data::block_builder()
|
||||||
|
.transaction()
|
||||||
|
.coinbase()
|
||||||
|
.output().value(5000000001).build()
|
||||||
|
.build()
|
||||||
|
.merkled_header().parent(genesis.hash()).build()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let verifier = ChainVerifier::new(Arc::new(storage)).pow_skip().signatures_skip();
|
||||||
|
|
||||||
|
let expected = Err(Error::CoinbaseOverspend {
|
||||||
|
expected_max: 5000000000,
|
||||||
|
actual: 5000000001
|
||||||
|
});
|
||||||
|
|
||||||
|
assert_eq!(expected, verifier.verify(&block));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue