Moved some test sponsorship utility methods to AccountUtils, so they can be used in other test classes too.

This commit is contained in:
CalDescent 2022-12-15 12:14:42 +00:00
parent 08de1fb4ec
commit 80048208d1
2 changed files with 131 additions and 131 deletions

View File

@ -50,8 +50,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Bob self sponsors 10 accounts // Bob self sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -73,7 +73,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -139,18 +139,18 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert"); PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Chloe sponsors 10 accounts // Chloe sponsors 10 accounts
List<PrivateKeyAccount> chloeSponsees = generateSponsorshipRewardShares(repository, chloeAccount, 10); List<PrivateKeyAccount> chloeSponsees = AccountUtils.generateSponsorshipRewardShares(repository, chloeAccount, 10);
List<PrivateKeyAccount> chloeSponseesOnlineAccounts = toRewardShares(repository, chloeAccount, chloeSponsees); List<PrivateKeyAccount> chloeSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, chloeAccount, chloeSponsees);
onlineAccounts.addAll(chloeSponseesOnlineAccounts); onlineAccounts.addAll(chloeSponseesOnlineAccounts);
// Dilbert sponsors 5 accounts // Dilbert sponsors 5 accounts
List<PrivateKeyAccount> dilbertSponsees = generateSponsorshipRewardShares(repository, dilbertAccount, 5); List<PrivateKeyAccount> dilbertSponsees = AccountUtils.generateSponsorshipRewardShares(repository, dilbertAccount, 5);
List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = toRewardShares(repository, dilbertAccount, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, dilbertAccount, dilbertSponsees);
onlineAccounts.addAll(dilbertSponseesOnlineAccounts); onlineAccounts.addAll(dilbertSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -172,7 +172,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -270,20 +270,20 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert"); PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccountsAliceSigner.addAll(bobSponseesOnlineAccounts); onlineAccountsAliceSigner.addAll(bobSponseesOnlineAccounts);
onlineAccountsBobSigner.addAll(bobSponseesOnlineAccounts); onlineAccountsBobSigner.addAll(bobSponseesOnlineAccounts);
// Chloe sponsors 10 accounts // Chloe sponsors 10 accounts
List<PrivateKeyAccount> chloeSponsees = generateSponsorshipRewardShares(repository, chloeAccount, 10); List<PrivateKeyAccount> chloeSponsees = AccountUtils.generateSponsorshipRewardShares(repository, chloeAccount, 10);
List<PrivateKeyAccount> chloeSponseesOnlineAccounts = toRewardShares(repository, chloeAccount, chloeSponsees); List<PrivateKeyAccount> chloeSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, chloeAccount, chloeSponsees);
onlineAccountsAliceSigner.addAll(chloeSponseesOnlineAccounts); onlineAccountsAliceSigner.addAll(chloeSponseesOnlineAccounts);
onlineAccountsBobSigner.addAll(chloeSponseesOnlineAccounts); onlineAccountsBobSigner.addAll(chloeSponseesOnlineAccounts);
// Dilbert sponsors 5 accounts // Dilbert sponsors 5 accounts
List<PrivateKeyAccount> dilbertSponsees = generateSponsorshipRewardShares(repository, dilbertAccount, 5); List<PrivateKeyAccount> dilbertSponsees = AccountUtils.generateSponsorshipRewardShares(repository, dilbertAccount, 5);
List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = toRewardShares(repository, dilbertAccount, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, dilbertAccount, dilbertSponsees);
onlineAccountsAliceSigner.addAll(dilbertSponseesOnlineAccounts); onlineAccountsAliceSigner.addAll(dilbertSponseesOnlineAccounts);
onlineAccountsBobSigner.addAll(dilbertSponseesOnlineAccounts); onlineAccountsBobSigner.addAll(dilbertSponseesOnlineAccounts);
@ -306,7 +306,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccountsAliceSigner.addAll(bobSponseeSelfShares); onlineAccountsAliceSigner.addAll(bobSponseeSelfShares);
onlineAccountsBobSigner.addAll(bobSponseeSelfShares); onlineAccountsBobSigner.addAll(bobSponseeSelfShares);
@ -382,14 +382,14 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Alice sponsors 10 accounts // Alice sponsors 10 accounts
List<PrivateKeyAccount> aliceSponsees = generateSponsorshipRewardShares(repository, aliceAccount, 10); List<PrivateKeyAccount> aliceSponsees = AccountUtils.generateSponsorshipRewardShares(repository, aliceAccount, 10);
List<PrivateKeyAccount> aliceSponseesOnlineAccounts = toRewardShares(repository, aliceAccount, aliceSponsees); List<PrivateKeyAccount> aliceSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, aliceAccount, aliceSponsees);
onlineAccountsAliceSigner.addAll(aliceSponseesOnlineAccounts); onlineAccountsAliceSigner.addAll(aliceSponseesOnlineAccounts);
onlineAccountsBobSigner.addAll(aliceSponseesOnlineAccounts); onlineAccountsBobSigner.addAll(aliceSponseesOnlineAccounts);
// Bob sponsors 9 accounts // Bob sponsors 9 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 9); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 9);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccountsAliceSigner.addAll(bobSponseesOnlineAccounts); onlineAccountsAliceSigner.addAll(bobSponseesOnlineAccounts);
onlineAccountsBobSigner.addAll(bobSponseesOnlineAccounts); onlineAccountsBobSigner.addAll(bobSponseesOnlineAccounts);
@ -412,7 +412,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, aliceSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, aliceSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> aliceSponseeSelfShares = generateSelfShares(repository, aliceSponsees); List<PrivateKeyAccount> aliceSponseeSelfShares = AccountUtils.generateSelfShares(repository, aliceSponsees);
onlineAccountsAliceSigner.addAll(aliceSponseeSelfShares); onlineAccountsAliceSigner.addAll(aliceSponseeSelfShares);
onlineAccountsBobSigner.addAll(aliceSponseeSelfShares); onlineAccountsBobSigner.addAll(aliceSponseeSelfShares);
@ -483,18 +483,18 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert"); PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Chloe sponsors 10 accounts // Chloe sponsors 10 accounts
List<PrivateKeyAccount> chloeSponsees = generateSponsorshipRewardShares(repository, chloeAccount, 10); List<PrivateKeyAccount> chloeSponsees = AccountUtils.generateSponsorshipRewardShares(repository, chloeAccount, 10);
List<PrivateKeyAccount> chloeSponseesOnlineAccounts = toRewardShares(repository, chloeAccount, chloeSponsees); List<PrivateKeyAccount> chloeSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, chloeAccount, chloeSponsees);
onlineAccounts.addAll(chloeSponseesOnlineAccounts); onlineAccounts.addAll(chloeSponseesOnlineAccounts);
// Dilbert sponsors 5 accounts // Dilbert sponsors 5 accounts
List<PrivateKeyAccount> dilbertSponsees = generateSponsorshipRewardShares(repository, dilbertAccount, 5); List<PrivateKeyAccount> dilbertSponsees = AccountUtils.generateSponsorshipRewardShares(repository, dilbertAccount, 5);
List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = toRewardShares(repository, dilbertAccount, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, dilbertAccount, dilbertSponsees);
onlineAccounts.addAll(dilbertSponseesOnlineAccounts); onlineAccounts.addAll(dilbertSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -516,7 +516,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -597,14 +597,14 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Alice sponsors 10 accounts // Alice sponsors 10 accounts
List<PrivateKeyAccount> aliceSponsees = generateSponsorshipRewardShares(repository, aliceAccount, 10); List<PrivateKeyAccount> aliceSponsees = AccountUtils.generateSponsorshipRewardShares(repository, aliceAccount, 10);
List<PrivateKeyAccount> aliceSponseesOnlineAccounts = toRewardShares(repository, aliceAccount, aliceSponsees); List<PrivateKeyAccount> aliceSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, aliceAccount, aliceSponsees);
onlineAccounts.addAll(aliceSponseesOnlineAccounts); onlineAccounts.addAll(aliceSponseesOnlineAccounts);
onlineAccounts.addAll(aliceSponseesOnlineAccounts); onlineAccounts.addAll(aliceSponseesOnlineAccounts);
// Bob sponsors 9 accounts // Bob sponsors 9 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 9); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 9);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
@ -627,7 +627,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, aliceSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, aliceSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> aliceSponseeSelfShares = generateSelfShares(repository, aliceSponsees); List<PrivateKeyAccount> aliceSponseeSelfShares = AccountUtils.generateSelfShares(repository, aliceSponsees);
onlineAccounts.addAll(aliceSponseeSelfShares); onlineAccounts.addAll(aliceSponseeSelfShares);
// Mint blocks (Bob is the signer) // Mint blocks (Bob is the signer)
@ -706,13 +706,13 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount chloeAccount = Common.getTestAccount(repository, "chloe"); PrivateKeyAccount chloeAccount = Common.getTestAccount(repository, "chloe");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Chloe sponsors 10 accounts // Chloe sponsors 10 accounts
List<PrivateKeyAccount> chloeSponsees = generateSponsorshipRewardShares(repository, chloeAccount, 10); List<PrivateKeyAccount> chloeSponsees = AccountUtils.generateSponsorshipRewardShares(repository, chloeAccount, 10);
List<PrivateKeyAccount> chloeSponseesOnlineAccounts = toRewardShares(repository, chloeAccount, chloeSponsees); List<PrivateKeyAccount> chloeSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, chloeAccount, chloeSponsees);
onlineAccounts.addAll(chloeSponseesOnlineAccounts); onlineAccounts.addAll(chloeSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -728,7 +728,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0])); block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -744,22 +744,22 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertEquals(19, (int) block.getBlockData().getHeight()); assertEquals(19, (int) block.getBlockData().getHeight());
// Bob creates a valid reward share transaction // Bob creates a valid reward share transaction
assertEquals(Transaction.ValidationResult.OK, createRandomRewardShare(repository, bobAccount)); assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, bobAccount));
// Mint a block, so the algo runs // Mint a block, so the algo runs
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0])); block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
// Bob can no longer create a reward share transaction // Bob can no longer create a reward share transaction
assertEquals(Transaction.ValidationResult.ACCOUNT_CANNOT_REWARD_SHARE, createRandomRewardShare(repository, bobAccount)); assertEquals(Transaction.ValidationResult.ACCOUNT_CANNOT_REWARD_SHARE, AccountUtils.createRandomRewardShare(repository, bobAccount));
// ... but Chloe still can // ... but Chloe still can
assertEquals(Transaction.ValidationResult.OK, createRandomRewardShare(repository, chloeAccount)); assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, chloeAccount));
// Orphan last block // Orphan last block
BlockUtils.orphanLastBlock(repository); BlockUtils.orphanLastBlock(repository);
// Bob creates another valid reward share transaction // Bob creates another valid reward share transaction
assertEquals(Transaction.ValidationResult.OK, createRandomRewardShare(repository, bobAccount)); assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, bobAccount));
// Run orphan check - this can't be in afterTest() because some tests access the live db // Run orphan check - this can't be in afterTest() because some tests access the live db
Common.orphanCheck(); Common.orphanCheck();
@ -780,13 +780,13 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Alice sponsors 10 accounts // Alice sponsors 10 accounts
List<PrivateKeyAccount> aliceSponsees = generateSponsorshipRewardShares(repository, aliceAccount, 10); List<PrivateKeyAccount> aliceSponsees = AccountUtils.generateSponsorshipRewardShares(repository, aliceAccount, 10);
List<PrivateKeyAccount> aliceSponseesOnlineAccounts = toRewardShares(repository, aliceAccount, aliceSponsees); List<PrivateKeyAccount> aliceSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, aliceAccount, aliceSponsees);
onlineAccounts.addAll(aliceSponseesOnlineAccounts); onlineAccounts.addAll(aliceSponseesOnlineAccounts);
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -802,7 +802,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0])); block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> aliceSponseeSelfShares = generateSelfShares(repository, aliceSponsees); List<PrivateKeyAccount> aliceSponseeSelfShares = AccountUtils.generateSelfShares(repository, aliceSponsees);
onlineAccounts.addAll(aliceSponseeSelfShares); onlineAccounts.addAll(aliceSponseeSelfShares);
// Mint blocks // Mint blocks
@ -818,7 +818,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertEquals(19, (int) block.getBlockData().getHeight()); assertEquals(19, (int) block.getBlockData().getHeight());
// Alice creates a valid reward share transaction // Alice creates a valid reward share transaction
assertEquals(Transaction.ValidationResult.OK, createRandomRewardShare(repository, aliceAccount)); assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, aliceAccount));
// Mint a block, so the algo runs // Mint a block, so the algo runs
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0])); block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
@ -830,16 +830,16 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertEquals(0, (int) new Account(repository, aliceAccount.getAddress()).getLevel()); assertEquals(0, (int) new Account(repository, aliceAccount.getAddress()).getLevel());
// Alice can no longer create a reward share transaction // Alice can no longer create a reward share transaction
assertEquals(Transaction.ValidationResult.ACCOUNT_CANNOT_REWARD_SHARE, createRandomRewardShare(repository, aliceAccount)); assertEquals(Transaction.ValidationResult.ACCOUNT_CANNOT_REWARD_SHARE, AccountUtils.createRandomRewardShare(repository, aliceAccount));
// ... but Bob still can // ... but Bob still can
assertEquals(Transaction.ValidationResult.OK, createRandomRewardShare(repository, bobAccount)); assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, bobAccount));
// Orphan last block // Orphan last block
BlockUtils.orphanLastBlock(repository); BlockUtils.orphanLastBlock(repository);
// Alice creates another valid reward share transaction // Alice creates another valid reward share transaction
assertEquals(Transaction.ValidationResult.OK, createRandomRewardShare(repository, aliceAccount)); assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, aliceAccount));
// Run orphan check - this can't be in afterTest() because some tests access the live db // Run orphan check - this can't be in afterTest() because some tests access the live db
Common.orphanCheck(); Common.orphanCheck();
@ -867,8 +867,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert"); PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
// Dilbert sponsors 10 accounts // Dilbert sponsors 10 accounts
List<PrivateKeyAccount> dilbertSponsees = generateSponsorshipRewardShares(repository, dilbertAccount, 10); List<PrivateKeyAccount> dilbertSponsees = AccountUtils.generateSponsorshipRewardShares(repository, dilbertAccount, 10);
List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = toRewardShares(repository, dilbertAccount, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, dilbertAccount, dilbertSponsees);
onlineAccounts.addAll(dilbertSponseesOnlineAccounts); onlineAccounts.addAll(dilbertSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -921,8 +921,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert"); PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
// Dilbert sponsors 10 accounts // Dilbert sponsors 10 accounts
List<PrivateKeyAccount> dilbertSponsees = generateSponsorshipRewardShares(repository, dilbertAccount, 10); List<PrivateKeyAccount> dilbertSponsees = AccountUtils.generateSponsorshipRewardShares(repository, dilbertAccount, 10);
List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = toRewardShares(repository, dilbertAccount, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, dilbertAccount, dilbertSponsees);
onlineAccounts.addAll(dilbertSponseesOnlineAccounts); onlineAccounts.addAll(dilbertSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -935,7 +935,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0])); block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> dilbertSponseeSelfShares = generateSelfShares(repository, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseeSelfShares = AccountUtils.generateSelfShares(repository, dilbertSponsees);
onlineAccounts.addAll(dilbertSponseeSelfShares); onlineAccounts.addAll(dilbertSponseeSelfShares);
// Mint blocks // Mint blocks
@ -985,8 +985,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert"); PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Chloe sponsors THE SAME 10 accounts // Chloe sponsors THE SAME 10 accounts
@ -996,12 +996,12 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
TransactionUtils.signAndImportValid(repository, transactionData, chloeAccount); TransactionUtils.signAndImportValid(repository, transactionData, chloeAccount);
} }
List<PrivateKeyAccount> chloeSponsees = new ArrayList<>(bobSponsees); List<PrivateKeyAccount> chloeSponsees = new ArrayList<>(bobSponsees);
List<PrivateKeyAccount> chloeSponseesOnlineAccounts = toRewardShares(repository, chloeAccount, chloeSponsees); List<PrivateKeyAccount> chloeSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, chloeAccount, chloeSponsees);
onlineAccounts.addAll(chloeSponseesOnlineAccounts); onlineAccounts.addAll(chloeSponseesOnlineAccounts);
// Dilbert sponsors 5 accounts // Dilbert sponsors 5 accounts
List<PrivateKeyAccount> dilbertSponsees = generateSponsorshipRewardShares(repository, dilbertAccount, 5); List<PrivateKeyAccount> dilbertSponsees = AccountUtils.generateSponsorshipRewardShares(repository, dilbertAccount, 5);
List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = toRewardShares(repository, dilbertAccount, dilbertSponsees); List<PrivateKeyAccount> dilbertSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, dilbertAccount, dilbertSponsees);
onlineAccounts.addAll(dilbertSponseesOnlineAccounts); onlineAccounts.addAll(dilbertSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -1023,7 +1023,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -1108,8 +1108,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -1128,7 +1128,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -1220,8 +1220,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -1240,7 +1240,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -1316,8 +1316,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -1336,7 +1336,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -1392,8 +1392,8 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob"); PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
// Bob sponsors 10 accounts // Bob sponsors 10 accounts
List<PrivateKeyAccount> bobSponsees = generateSponsorshipRewardShares(repository, bobAccount, 10); List<PrivateKeyAccount> bobSponsees = AccountUtils.generateSponsorshipRewardShares(repository, bobAccount, 10);
List<PrivateKeyAccount> bobSponseesOnlineAccounts = toRewardShares(repository, bobAccount, bobSponsees); List<PrivateKeyAccount> bobSponseesOnlineAccounts = AccountUtils.toRewardShares(repository, bobAccount, bobSponsees);
onlineAccounts.addAll(bobSponseesOnlineAccounts); onlineAccounts.addAll(bobSponseesOnlineAccounts);
// Mint blocks // Mint blocks
@ -1412,7 +1412,7 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0); assertTrue(new Account(repository, bobSponsee.getAddress()).getLevel() > 0);
// Generate self shares so the sponsees can start minting // Generate self shares so the sponsees can start minting
List<PrivateKeyAccount> bobSponseeSelfShares = generateSelfShares(repository, bobSponsees); List<PrivateKeyAccount> bobSponseeSelfShares = AccountUtils.generateSelfShares(repository, bobSponsees);
onlineAccounts.addAll(bobSponseeSelfShares); onlineAccounts.addAll(bobSponseeSelfShares);
// Mint blocks // Mint blocks
@ -1543,61 +1543,6 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
return new TransferPrivsTransaction(repository, transactionData); return new TransferPrivsTransaction(repository, transactionData);
} }
private static List<PrivateKeyAccount> generateSponsorshipRewardShares(Repository repository, PrivateKeyAccount sponsorAccount, int accountsCount) throws DataException {
final int sharePercent = 0;
Random random = new Random();
List<PrivateKeyAccount> sponsees = new ArrayList<>();
for (int i = 0; i < accountsCount; i++) {
// Generate random sponsee account
byte[] randomPrivateKey = new byte[32];
random.nextBytes(randomPrivateKey);
PrivateKeyAccount sponseeAccount = new PrivateKeyAccount(repository, randomPrivateKey);
sponsees.add(sponseeAccount);
// Create reward-share
TransactionData transactionData = AccountUtils.createRewardShare(repository, sponsorAccount, sponseeAccount, sharePercent, fee);
TransactionUtils.signAndImportValid(repository, transactionData, sponsorAccount);
}
return sponsees;
}
private static Transaction.ValidationResult createRandomRewardShare(Repository repository, PrivateKeyAccount account) throws DataException {
// Bob attempts to create a reward share transaction
byte[] randomPrivateKey = new byte[32];
new Random().nextBytes(randomPrivateKey);
PrivateKeyAccount sponseeAccount = new PrivateKeyAccount(repository, randomPrivateKey);
TransactionData transactionData = AccountUtils.createRewardShare(repository, account, sponseeAccount, 0, fee);
return TransactionUtils.signAndImport(repository, transactionData, account);
}
private static List<PrivateKeyAccount> generateSelfShares(Repository repository, List<PrivateKeyAccount> accounts) throws DataException {
final int sharePercent = 0;
for (PrivateKeyAccount account : accounts) {
// Create reward-share
TransactionData transactionData = AccountUtils.createRewardShare(repository, account, account, sharePercent, 0L);
TransactionUtils.signAndImportValid(repository, transactionData, account);
}
return toRewardShares(repository, null, accounts);
}
private static List<PrivateKeyAccount> toRewardShares(Repository repository, PrivateKeyAccount parentAccount, List<PrivateKeyAccount> accounts) {
List<PrivateKeyAccount> rewardShares = new ArrayList<>();
for (PrivateKeyAccount account : accounts) {
PrivateKeyAccount sponsor = (parentAccount != null) ? parentAccount : account;
byte[] rewardSharePrivateKey = sponsor.getRewardSharePrivateKey(account.getPublicKey());
PrivateKeyAccount rewardShareAccount = new PrivateKeyAccount(repository, rewardSharePrivateKey);
rewardShares.add(rewardShareAccount);
}
return rewardShares;
}
private boolean areAllAccountsPresentInBlock(List<PrivateKeyAccount> accounts, Block block) throws DataException { private boolean areAllAccountsPresentInBlock(List<PrivateKeyAccount> accounts, Block block) throws DataException {
for (PrivateKeyAccount bobSponsee : accounts) { for (PrivateKeyAccount bobSponsee : accounts) {
boolean foundOnlineAccountInBlock = false; boolean foundOnlineAccountInBlock = false;

View File

@ -8,7 +8,6 @@ import java.util.*;
import com.google.common.primitives.Longs; import com.google.common.primitives.Longs;
import org.qortal.account.PrivateKeyAccount; import org.qortal.account.PrivateKeyAccount;
import org.qortal.block.BlockChain;
import org.qortal.crypto.Crypto; import org.qortal.crypto.Crypto;
import org.qortal.crypto.Qortal25519Extras; import org.qortal.crypto.Qortal25519Extras;
import org.qortal.data.network.OnlineAccountData; import org.qortal.data.network.OnlineAccountData;
@ -19,6 +18,7 @@ import org.qortal.data.transaction.TransactionData;
import org.qortal.group.Group; import org.qortal.group.Group;
import org.qortal.repository.DataException; import org.qortal.repository.DataException;
import org.qortal.repository.Repository; import org.qortal.repository.Repository;
import org.qortal.transaction.Transaction;
import org.qortal.transform.Transformer; import org.qortal.transform.Transformer;
import org.qortal.utils.Amounts; import org.qortal.utils.Amounts;
@ -86,6 +86,61 @@ public class AccountUtils {
return rewardSharePrivateKey; return rewardSharePrivateKey;
} }
public static List<PrivateKeyAccount> generateSponsorshipRewardShares(Repository repository, PrivateKeyAccount sponsorAccount, int accountsCount) throws DataException {
final int sharePercent = 0;
Random random = new Random();
List<PrivateKeyAccount> sponsees = new ArrayList<>();
for (int i = 0; i < accountsCount; i++) {
// Generate random sponsee account
byte[] randomPrivateKey = new byte[32];
random.nextBytes(randomPrivateKey);
PrivateKeyAccount sponseeAccount = new PrivateKeyAccount(repository, randomPrivateKey);
sponsees.add(sponseeAccount);
// Create reward-share
TransactionData transactionData = AccountUtils.createRewardShare(repository, sponsorAccount, sponseeAccount, sharePercent, fee);
TransactionUtils.signAndImportValid(repository, transactionData, sponsorAccount);
}
return sponsees;
}
public static Transaction.ValidationResult createRandomRewardShare(Repository repository, PrivateKeyAccount account) throws DataException {
// Bob attempts to create a reward share transaction
byte[] randomPrivateKey = new byte[32];
new Random().nextBytes(randomPrivateKey);
PrivateKeyAccount sponseeAccount = new PrivateKeyAccount(repository, randomPrivateKey);
TransactionData transactionData = createRewardShare(repository, account, sponseeAccount, 0, fee);
return TransactionUtils.signAndImport(repository, transactionData, account);
}
public static List<PrivateKeyAccount> generateSelfShares(Repository repository, List<PrivateKeyAccount> accounts) throws DataException {
final int sharePercent = 0;
for (PrivateKeyAccount account : accounts) {
// Create reward-share
TransactionData transactionData = createRewardShare(repository, account, account, sharePercent, 0L);
TransactionUtils.signAndImportValid(repository, transactionData, account);
}
return toRewardShares(repository, null, accounts);
}
public static List<PrivateKeyAccount> toRewardShares(Repository repository, PrivateKeyAccount parentAccount, List<PrivateKeyAccount> accounts) {
List<PrivateKeyAccount> rewardShares = new ArrayList<>();
for (PrivateKeyAccount account : accounts) {
PrivateKeyAccount sponsor = (parentAccount != null) ? parentAccount : account;
byte[] rewardSharePrivateKey = sponsor.getRewardSharePrivateKey(account.getPublicKey());
PrivateKeyAccount rewardShareAccount = new PrivateKeyAccount(repository, rewardSharePrivateKey);
rewardShares.add(rewardShareAccount);
}
return rewardShares;
}
public static Map<String, Map<Long, Long>> getBalances(Repository repository, long... assetIds) throws DataException { public static Map<String, Map<Long, Long>> getBalances(Repository repository, long... assetIds) throws DataException {
Map<String, Map<Long, Long>> balances = new HashMap<>(); Map<String, Map<Long, Long>> balances = new HashMap<>();