Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
mxaddict committed Jan 18, 2024
1 parent 3494c3c commit ded111b
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 139 deletions.
77 changes: 38 additions & 39 deletions src/test/blsct/wallet/chain_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,45 +18,44 @@
namespace wallet {
BOOST_FIXTURE_TEST_SUITE(chain_tests, WalletTestingSetup)

// TODO: FIX THIS
// BOOST_FIXTURE_TEST_CASE(SyncTest, TestBLSCTChain100Setup)
// {
// CreateAndProcessBlock({});
// auto wallet = CreateBLSCTWallet(*m_node.chain, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain()));
// BOOST_CHECK(SyncBLSCTWallet(wallet, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain())));
//
// auto blsct_km = wallet->GetBLSCTKeyMan();
// auto walletDestination = blsct::SubAddress(std::get<blsct::DoublePublicKey>(blsct_km->GetNewDestination(0).value()));
//
// LOCK(wallet->cs_wallet);
//
// for (size_t i = 0; i <= COINBASE_MATURITY; i++) {
// CreateAndProcessBlock({}, walletDestination);
// }
//
// BOOST_CHECK(SyncBLSCTWallet(wallet, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain())));
//
// BOOST_CHECK(GetBalance(*wallet).m_mine_trusted == 50 * COIN);
// BOOST_CHECK(GetBalance(*wallet).m_mine_immature == 50 * COINBASE_MATURITY * COIN);
//
// auto available_coins = AvailableCoins(*wallet);
// std::vector<COutput> coins = available_coins.All();
//
// BOOST_CHECK(coins.size() == 1);
//
// // Create Transaction sending to another address
// auto tx = blsct::TxFactory::CreateTransaction(wallet.get(), wallet->GetOrCreateBLSCTKeyMan(), blsct::SubAddress(), 1 * COIN, "test");
//
// BOOST_CHECK(tx != std::nullopt);
//
// auto block = CreateAndProcessBlock({tx.value()}, walletDestination);
//
// BOOST_CHECK(SyncBLSCTWallet(wallet, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain())));
//
// auto wtx = wallet->GetWalletTx(block.vtx[1]->GetHash());
//
// BOOST_CHECK(wtx != nullptr);
// }
BOOST_FIXTURE_TEST_CASE(SyncTest, TestBLSCTChain100Setup)
{
CreateAndProcessBlock({});
auto wallet = CreateBLSCTWallet(*m_node.chain, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain()));
BOOST_CHECK(SyncBLSCTWallet(wallet, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain())));

auto blsct_km = wallet->GetBLSCTKeyMan();
auto walletDestination = blsct::SubAddress(std::get<blsct::DoublePublicKey>(blsct_km->GetNewDestination(0).value()));

LOCK(wallet->cs_wallet);

for (size_t i = 0; i <= COINBASE_MATURITY; i++) {
CreateAndProcessBlock({}, walletDestination);
}

BOOST_CHECK(SyncBLSCTWallet(wallet, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain())));

BOOST_CHECK(GetBalance(*wallet).m_mine_trusted == 50 * COIN);
BOOST_CHECK(GetBalance(*wallet).m_mine_immature == 50 * COINBASE_MATURITY * COIN);

auto available_coins = AvailableCoins(*wallet);
std::vector<COutput> coins = available_coins.All();

BOOST_CHECK(coins.size() == 1);

// Create Transaction sending to another address
auto tx = blsct::TxFactory::CreateTransaction(wallet.get(), wallet->GetOrCreateBLSCTKeyMan(), blsct::SubAddress(), 1 * COIN, "test");

BOOST_CHECK(tx != std::nullopt);

auto block = CreateAndProcessBlock({tx.value()}, walletDestination);

BOOST_CHECK(SyncBLSCTWallet(wallet, WITH_LOCK(Assert(m_node.chainman)->GetMutex(), return m_node.chainman->ActiveChain())));

auto wtx = wallet->GetWalletTx(block.vtx[1]->GetHash());

BOOST_CHECK(wtx != nullptr);
}

BOOST_AUTO_TEST_SUITE_END()
} // namespace wallet
62 changes: 31 additions & 31 deletions src/test/blsct/wallet/keyman_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,36 @@

BOOST_AUTO_TEST_SUITE(blsct_keyman_tests)

// TODO: FIX THIS
// BOOST_FIXTURE_TEST_CASE(wallet_test, TestingSetup)
// {
// wallet::DatabaseOptions options;
// options.create_flags |= wallet::WALLET_FLAG_BLSCT;
//
// std::shared_ptr<wallet::CWallet> wallet(new wallet::CWallet(m_node.chain.get(), "", wallet::CreateMockWalletDatabase(options)));
//
// LOCK(wallet->cs_wallet);
// auto blsct_km = wallet->GetOrCreateBLSCTKeyMan();
// blsct_km->SetHDSeed(MclScalar(uint256(1)));
// BOOST_CHECK(blsct_km->NewSubAddressPool());
// BOOST_CHECK(blsct_km->NewSubAddressPool(-1));
//
// std::vector<std::string> expectedAddresses = {
// "nv14h85k6mf4l5fu3j4v0nuuswjwrz5entvzcw9jl3s8uknsndu0pfzaze4992n36uq7hpcy8yeuu854p0gmhq4m2u0tf5znazc527cxy4j7c39qxlc89wg4nca8pazkecx0p6wmu3pwrma3ercgrk8s7k475xxa5pl2w",
// "nv1kq8zphgry92d02j7sm460c8xv88avuxcqlxrl7unxva9c4uawuvskx3s3pd6g3nychcq0ksy0tlpmgyt35384dnqdtudafa00yrjpcsffef404xur6cegkm98llf5xptkj6napgqk6g9dpa0x24qe4cgaq3v9scy0m",
// "nv1s48u8dtxseguw6s7ecewph2szrxwy3fzx47rzdtppgzrnxrp0p0peetjx5h2f6gpwy3ar65tmw4p39z30pzt0t6san07th0694pffc0f6dghnskfujfanzwjdzep8fn0ezdeg7ejmvulj8nymrzkw8wdvqmhvl6gt5",
// "nv1k34crux0s5urxtcndupcd37ehkakkz6da8n5ghmx388vfynhqa4k9zmrp8qmyw485ujvpkjwcasqhq5rqpxrkvhm0tg3ap3er8eycgwu5ew5xq5u84vzxsaqgc37ud67g5j9jvynlqacx78zl6l2flw82gvv2w5wzw",
// "nv13qq8el3522u4jxd4e8y54du9d5fqlqlcmz8n90k8hc6e72dqky99ajgfarmd3puzx9zz9hazr99zrggharvuh9ulg9ugnu6nf5hfvq9mw03nv2g9xz9v2vnvn6uumrwxcv93ae54kuzjmz49g4mx0u2pzq2dmup8dn",
// "nv1kh6n54xfhq0nmsr8rrqsff8xtegr8hvsdsvn2sdtk3w25w9fkescwqeqlnasm9ngcr895ycxx4ave2m5crya7hgyydhsa66ct995lrvywpgseu8cq4yjwcjm7dkh367pg3dhtxnwsfsct7my5tzu0c8jwsnddq2xw3",
// "nv15gxjtgw289m82any2fn75gdh09cyte4c6qlzrms7wr4a4vyqdd8epl2qncrhspdflru3kcc4kdpzrrqtcvrq3qzxdjrh3l2lqr9v5jnjw22ut4axj9czcajj8pfyy0mm99n0q8088z99uame7ckrk8k3yvzc6em4d6",
// "nv1j08knwnjcuukjl88vyt06c2h7unqjurflvtqaa9ljw08mz6swp2je7zg962u5qke9dc3cnhz3rkfdg0uhyw3zw6jk2akd08krzxqms74lcm9paapjygl3kglru3gaumy682qysl2hy6cgujqs9ugfxvqzcpmrge5pg",
// "nv15vn8346nl5ttuu28w7dhwetq5vlu8tv3dgdqdhks769ye9gd9ssaszk5unwtejp6vftw82936k20m93sc4z9z29zz4f2rneexfw770ducywzxt3wp6vc7c3lhgxn2jxxufv74hwppcxd3prcn2yf2qgk6stntwl9lg",
// "nv1kag0sqeuzz64stxmc5ztrafqvyx7lv4k09leasauyku5eg6zdsh23nyauzwrszyqysj02ecqmzkdrdym02w7u5y6ed7ptwe5adqyqufnqfj5hqve2et935gw8p8jculfnr66qpk8u86f35zaxs053920gs84wlan8z"};
//
// for (size_t i = 0; i < 10; i++) {
// auto recvAddress = blsct::SubAddress(std::get<blsct::DoublePublicKey>(blsct_km->GetNewDestination(0).value()));
// BOOST_CHECK(recvAddress.GetString() == expectedAddresses[i]);
// }
// }
// TODO: Make sure that WALLET_FLAG_BLSCT is set for the mockable wallet
BOOST_FIXTURE_TEST_CASE(wallet_test, TestingSetup)
{
wallet::DatabaseOptions options;
options.create_flags |= wallet::WALLET_FLAG_BLSCT;

auto wallet = std::make_unique<wallet::CWallet>(m_node.chain.get(), "", wallet::CreateMockableWalletDatabase());

LOCK(wallet->cs_wallet);
auto blsct_km = wallet->GetOrCreateBLSCTKeyMan();
blsct_km->SetHDSeed(MclScalar(uint256(1)));
BOOST_CHECK(blsct_km->NewSubAddressPool());
BOOST_CHECK(blsct_km->NewSubAddressPool(-1));

std::vector<std::string> expectedAddresses = {
"nv14h85k6mf4l5fu3j4v0nuuswjwrz5entvzcw9jl3s8uknsndu0pfzaze4992n36uq7hpcy8yeuu854p0gmhq4m2u0tf5znazc527cxy4j7c39qxlc89wg4nca8pazkecx0p6wmu3pwrma3ercgrk8s7k475xxa5pl2w",
"nv1kq8zphgry92d02j7sm460c8xv88avuxcqlxrl7unxva9c4uawuvskx3s3pd6g3nychcq0ksy0tlpmgyt35384dnqdtudafa00yrjpcsffef404xur6cegkm98llf5xptkj6napgqk6g9dpa0x24qe4cgaq3v9scy0m",
"nv1s48u8dtxseguw6s7ecewph2szrxwy3fzx47rzdtppgzrnxrp0p0peetjx5h2f6gpwy3ar65tmw4p39z30pzt0t6san07th0694pffc0f6dghnskfujfanzwjdzep8fn0ezdeg7ejmvulj8nymrzkw8wdvqmhvl6gt5",
"nv1k34crux0s5urxtcndupcd37ehkakkz6da8n5ghmx388vfynhqa4k9zmrp8qmyw485ujvpkjwcasqhq5rqpxrkvhm0tg3ap3er8eycgwu5ew5xq5u84vzxsaqgc37ud67g5j9jvynlqacx78zl6l2flw82gvv2w5wzw",
"nv13qq8el3522u4jxd4e8y54du9d5fqlqlcmz8n90k8hc6e72dqky99ajgfarmd3puzx9zz9hazr99zrggharvuh9ulg9ugnu6nf5hfvq9mw03nv2g9xz9v2vnvn6uumrwxcv93ae54kuzjmz49g4mx0u2pzq2dmup8dn",
"nv1kh6n54xfhq0nmsr8rrqsff8xtegr8hvsdsvn2sdtk3w25w9fkescwqeqlnasm9ngcr895ycxx4ave2m5crya7hgyydhsa66ct995lrvywpgseu8cq4yjwcjm7dkh367pg3dhtxnwsfsct7my5tzu0c8jwsnddq2xw3",
"nv15gxjtgw289m82any2fn75gdh09cyte4c6qlzrms7wr4a4vyqdd8epl2qncrhspdflru3kcc4kdpzrrqtcvrq3qzxdjrh3l2lqr9v5jnjw22ut4axj9czcajj8pfyy0mm99n0q8088z99uame7ckrk8k3yvzc6em4d6",
"nv1j08knwnjcuukjl88vyt06c2h7unqjurflvtqaa9ljw08mz6swp2je7zg962u5qke9dc3cnhz3rkfdg0uhyw3zw6jk2akd08krzxqms74lcm9paapjygl3kglru3gaumy682qysl2hy6cgujqs9ugfxvqzcpmrge5pg",
"nv15vn8346nl5ttuu28w7dhwetq5vlu8tv3dgdqdhks769ye9gd9ssaszk5unwtejp6vftw82936k20m93sc4z9z29zz4f2rneexfw770ducywzxt3wp6vc7c3lhgxn2jxxufv74hwppcxd3prcn2yf2qgk6stntwl9lg",
"nv1kag0sqeuzz64stxmc5ztrafqvyx7lv4k09leasauyku5eg6zdsh23nyauzwrszyqysj02ecqmzkdrdym02w7u5y6ed7ptwe5adqyqufnqfj5hqve2et935gw8p8jculfnr66qpk8u86f35zaxs053920gs84wlan8z"};

for (size_t i = 0; i < 10; i++) {
auto recvAddress = blsct::SubAddress(std::get<blsct::DoublePublicKey>(blsct_km->GetNewDestination(0).value()));
BOOST_CHECK(recvAddress.GetString() == expectedAddresses[i]);
}
}

BOOST_AUTO_TEST_SUITE_END()
87 changes: 43 additions & 44 deletions src/test/blsct/wallet/validation_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,50 +15,49 @@

BOOST_AUTO_TEST_SUITE(blsct_validation_tests)

// TODO: FIX THIS
// BOOST_FIXTURE_TEST_CASE(validation_test, TestingSetup)
// {
// SeedInsecureRand(SeedRand::ZEROS);
// CCoinsViewDB base{{.path = "test", .cache_bytes = 1 << 23, .memory_only = true}, {}};
//
// wallet::DatabaseOptions options;
// options.create_flags |= wallet::WALLET_FLAG_BLSCT;
//
// std::shared_ptr<wallet::CWallet> wallet(new wallet::CWallet(m_node.chain.get(), "", wallet::CreateMockWalletDatabase(options)));
//
// LOCK(wallet->cs_wallet);
// auto blsct_km = wallet->GetOrCreateBLSCTKeyMan();
// BOOST_CHECK(blsct_km->SetupGeneration(true));
//
// auto recvAddress = std::get<blsct::DoublePublicKey>(blsct_km->GetNewDestination(0).value());
//
// const uint256 txid{InsecureRand256()};
// COutPoint outpoint{txid, /*nIn=*/0};
//
// Coin coin;
// auto out = blsct::CreateOutput(recvAddress, 1000 * COIN, "test");
// coin.nHeight = 1;
// coin.out = out.out;
//
// auto tx = blsct::TxFactory(blsct_km);
//
// {
// CCoinsViewCache coins_view_cache{&base, /*deterministic=*/true};
// coins_view_cache.SetBestBlock(InsecureRand256());
// coins_view_cache.AddCoin(outpoint, std::move(coin), true);
// BOOST_CHECK(coins_view_cache.Flush());
// }
//
// CCoinsViewCache coins_view_cache{&base, /*deterministic=*/true};
// BOOST_CHECK(tx.AddInput(coins_view_cache, outpoint));
//
// tx.AddOutput(recvAddress, 900 * COIN, "test");
//
// auto finalTx = tx.BuildTx();
//
// BOOST_CHECK(finalTx.has_value());
// BOOST_CHECK(blsct::VerifyTx(CTransaction(finalTx.value()), coins_view_cache));
// }
BOOST_FIXTURE_TEST_CASE(validation_test, TestingSetup)
{
SeedInsecureRand(SeedRand::ZEROS);
CCoinsViewDB base{{.path = "test", .cache_bytes = 1 << 23, .memory_only = true}, {}};

wallet::DatabaseOptions options;
options.create_flags |= wallet::WALLET_FLAG_BLSCT;

auto wallet = std::make_unique<wallet::CWallet>(m_node.chain.get(), "", wallet::CreateMockableWalletDatabase());

LOCK(wallet->cs_wallet);
auto blsct_km = wallet->GetOrCreateBLSCTKeyMan();
BOOST_CHECK(blsct_km->SetupGeneration(true));

auto recvAddress = std::get<blsct::DoublePublicKey>(blsct_km->GetNewDestination(0).value());

const auto txid = Txid::FromUint256(InsecureRand256());
COutPoint outpoint(txid, /*nIn=*/0);

Coin coin;
auto out = blsct::CreateOutput(recvAddress, 1000 * COIN, "test");
coin.nHeight = 1;
coin.out = out.out;

auto tx = blsct::TxFactory(blsct_km);

{
CCoinsViewCache coins_view_cache{&base, /*deterministic=*/true};
coins_view_cache.SetBestBlock(InsecureRand256());
coins_view_cache.AddCoin(outpoint, std::move(coin), true);
BOOST_CHECK(coins_view_cache.Flush());
}

CCoinsViewCache coins_view_cache{&base, /*deterministic=*/true};
BOOST_CHECK(tx.AddInput(coins_view_cache, outpoint));

tx.AddOutput(recvAddress, 900 * COIN, "test");

auto finalTx = tx.BuildTx();

BOOST_CHECK(finalTx.has_value());
BOOST_CHECK(blsct::VerifyTx(CTransaction(finalTx.value()), coins_view_cache));
}

BOOST_FIXTURE_TEST_CASE(validation_reward_test, TestingSetup)
{
Expand Down
49 changes: 24 additions & 25 deletions src/wallet/test/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,31 +46,30 @@ std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cc
return wallet;
}

// TODO: FIX THIS
// std::unique_ptr<CWallet> CreateBLSCTWallet(interfaces::Chain& chain, CChain& cchain)
// {
// auto wallet = std::make_unique<CWallet>(&chain, "", CreateMockWalletDatabase());
// {
// LOCK2(wallet->cs_wallet, ::cs_main);
// wallet->SetLastBlockProcessed(cchain.Height(), cchain.Tip()->GetBlockHash());
// }
// wallet->LoadWallet();
// {
// LOCK(wallet->cs_wallet);
// auto blsct_km = wallet->GetOrCreateBLSCTKeyMan();
// blsct_km->SetHDSeed(MclScalar(uint256(1)));
// assert(blsct_km->NewSubAddressPool());
// assert(blsct_km->NewSubAddressPool(-1));
// }
// WalletRescanReserver reserver(*wallet);
// reserver.reserve();
// CWallet::ScanResult result = wallet->ScanForWalletTransactions(cchain.Genesis()->GetBlockHash(), /*start_height=*/0, /*max_height=*/{}, reserver, /*fUpdate=*/false, /*save_progress=*/false);
// assert(result.status == CWallet::ScanResult::SUCCESS);
// assert(result.last_scanned_block == cchain.Tip()->GetBlockHash());
// assert(*result.last_scanned_height == cchain.Height());
// assert(result.last_failed_block.IsNull());
// return wallet;
// }
std::unique_ptr<CWallet> CreateBLSCTWallet(interfaces::Chain& chain, CChain& cchain)
{
auto wallet = std::make_unique<CWallet>(&chain, "", CreateMockableWalletDatabase());
{
LOCK2(wallet->cs_wallet, ::cs_main);
wallet->SetLastBlockProcessed(cchain.Height(), cchain.Tip()->GetBlockHash());
}
wallet->LoadWallet();
{
LOCK(wallet->cs_wallet);
auto blsct_km = wallet->GetOrCreateBLSCTKeyMan();
blsct_km->SetHDSeed(MclScalar(uint256(1)));
assert(blsct_km->NewSubAddressPool());
assert(blsct_km->NewSubAddressPool(-1));
}
WalletRescanReserver reserver(*wallet);
reserver.reserve();
CWallet::ScanResult result = wallet->ScanForWalletTransactions(cchain.Genesis()->GetBlockHash(), /*start_height=*/0, /*max_height=*/{}, reserver, /*fUpdate=*/false, /*save_progress=*/false);
assert(result.status == CWallet::ScanResult::SUCCESS);
assert(result.last_scanned_block == cchain.Tip()->GetBlockHash());
assert(*result.last_scanned_height == cchain.Height());
assert(result.last_failed_block.IsNull());
return wallet;
}

bool SyncBLSCTWallet(std::unique_ptr<CWallet>& wallet, CChain& cchain)
{
Expand Down

0 comments on commit ded111b

Please sign in to comment.