Test behavior of chained pour consensus rules.
This commit is contained in:
parent
6c59778acb
commit
10c33f0f87
|
@ -144,7 +144,7 @@ public:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void appendRandomCommitment(ZCIncrementalMerkleTree &tree)
|
uint256 appendRandomCommitment(ZCIncrementalMerkleTree &tree)
|
||||||
{
|
{
|
||||||
libzcash::SpendingKey k = libzcash::SpendingKey::random();
|
libzcash::SpendingKey k = libzcash::SpendingKey::random();
|
||||||
libzcash::PaymentAddress addr = k.address();
|
libzcash::PaymentAddress addr = k.address();
|
||||||
|
@ -152,6 +152,8 @@ void appendRandomCommitment(ZCIncrementalMerkleTree &tree)
|
||||||
libzcash::Note note(addr.a_pk, 0, uint256(), uint256());
|
libzcash::Note note(addr.a_pk, 0, uint256(), uint256());
|
||||||
|
|
||||||
tree.append(note.cm());
|
tree.append(note.cm());
|
||||||
|
|
||||||
|
return note.cm();
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup)
|
BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup)
|
||||||
|
@ -210,6 +212,65 @@ BOOST_AUTO_TEST_CASE(anchors_flush_test)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(chained_pours)
|
||||||
|
{
|
||||||
|
CCoinsViewTest base;
|
||||||
|
CCoinsViewCacheTest cache(&base);
|
||||||
|
|
||||||
|
ZCIncrementalMerkleTree tree;
|
||||||
|
|
||||||
|
CPourTx ptx1;
|
||||||
|
ptx1.anchor = tree.root();
|
||||||
|
ptx1.commitments[0] = appendRandomCommitment(tree);
|
||||||
|
ptx1.commitments[1] = appendRandomCommitment(tree);
|
||||||
|
|
||||||
|
// Although it's not possible given our assumptions, if
|
||||||
|
// two pours create the same treestate twice, we should
|
||||||
|
// still be able to anchor to it.
|
||||||
|
CPourTx ptx1b;
|
||||||
|
ptx1b.anchor = tree.root();
|
||||||
|
ptx1b.commitments[0] = ptx1.commitments[0];
|
||||||
|
ptx1b.commitments[1] = ptx1.commitments[1];
|
||||||
|
|
||||||
|
CPourTx ptx2;
|
||||||
|
CPourTx ptx3;
|
||||||
|
|
||||||
|
ptx2.anchor = tree.root();
|
||||||
|
ptx3.anchor = tree.root();
|
||||||
|
|
||||||
|
ptx2.commitments[0] = appendRandomCommitment(tree);
|
||||||
|
ptx2.commitments[1] = appendRandomCommitment(tree);
|
||||||
|
|
||||||
|
ptx3.commitments[0] = appendRandomCommitment(tree);
|
||||||
|
ptx3.commitments[1] = appendRandomCommitment(tree);
|
||||||
|
|
||||||
|
{
|
||||||
|
CMutableTransaction mtx;
|
||||||
|
mtx.vpour.push_back(ptx2);
|
||||||
|
|
||||||
|
BOOST_CHECK(!cache.HavePourRequirements(mtx));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
CMutableTransaction mtx;
|
||||||
|
mtx.vpour.push_back(ptx1);
|
||||||
|
mtx.vpour.push_back(ptx2);
|
||||||
|
mtx.vpour.push_back(ptx3);
|
||||||
|
|
||||||
|
BOOST_CHECK(cache.HavePourRequirements(mtx));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
CMutableTransaction mtx;
|
||||||
|
mtx.vpour.push_back(ptx1);
|
||||||
|
mtx.vpour.push_back(ptx1b);
|
||||||
|
mtx.vpour.push_back(ptx2);
|
||||||
|
mtx.vpour.push_back(ptx3);
|
||||||
|
|
||||||
|
BOOST_CHECK(cache.HavePourRequirements(mtx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(anchors_test)
|
BOOST_AUTO_TEST_CASE(anchors_test)
|
||||||
{
|
{
|
||||||
// TODO: These tests should be more methodical.
|
// TODO: These tests should be more methodical.
|
||||||
|
|
Loading…
Reference in New Issue