mirror of
https://github.com/Qortal/qortal.git
synced 2025-07-23 04:36:50 +00:00
Adding new algos
This commit is contained in:
342
src/test/java/org/qortal/test/SelfSponsorshipAlgoV2Tests.java
Normal file
342
src/test/java/org/qortal/test/SelfSponsorshipAlgoV2Tests.java
Normal file
@@ -0,0 +1,342 @@
|
||||
package org.qortal.test;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.qortal.account.Account;
|
||||
import org.qortal.account.PrivateKeyAccount;
|
||||
import org.qortal.asset.Asset;
|
||||
import org.qortal.block.Block;
|
||||
import org.qortal.controller.BlockMinter;
|
||||
import org.qortal.data.account.AccountPenaltyData;
|
||||
import org.qortal.data.transaction.*;
|
||||
import org.qortal.repository.DataException;
|
||||
import org.qortal.repository.Repository;
|
||||
import org.qortal.repository.RepositoryManager;
|
||||
import org.qortal.settings.Settings;
|
||||
import org.qortal.test.common.BlockUtils;
|
||||
import org.qortal.test.common.Common;
|
||||
import org.qortal.test.common.TransactionUtils;
|
||||
import org.qortal.utils.NTP;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.qortal.test.common.AccountUtils.fee;
|
||||
|
||||
public class SelfSponsorshipAlgoV2Tests extends Common {
|
||||
|
||||
@Before
|
||||
public void beforeTest() throws DataException {
|
||||
Common.useSettings("test-settings-v2-self-sponsorship-algo-v2.json");
|
||||
NTP.setFixedOffset(Settings.getInstance().getTestNtpOffset());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tesTransferAssetsQort() throws DataException {
|
||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||
|
||||
// Alice self share online, and will be used to mint the blocks
|
||||
PrivateKeyAccount aliceSelfShare = Common.getTestAccount(repository, "alice-reward-share");
|
||||
List<PrivateKeyAccount> onlineAccounts = new ArrayList<>();
|
||||
onlineAccounts.add(aliceSelfShare);
|
||||
|
||||
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
|
||||
PrivateKeyAccount chloeAccount = Common.getTestAccount(repository, "chloe");
|
||||
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
|
||||
|
||||
// Mint blocks
|
||||
Block block = null;
|
||||
for (int i = 0; i <= 1; i++)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure that Bob, Chloe and Dilbert are greater than level 0
|
||||
assertTrue(new Account(repository, bobAccount.getAddress()).getLevel() > 0);
|
||||
assertTrue(new Account(repository, chloeAccount.getAddress()).getLevel() > 0);
|
||||
assertTrue(new Account(repository, dilbertAccount.getAddress()).getLevel() > 0);
|
||||
|
||||
// Mint some blocks, until accounts have leveled up
|
||||
for (int i = 0; i <= 5; i++)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure that Chloe and Dilbert have more than 20 qort
|
||||
assertTrue(new Account(repository, chloeAccount.getAddress()).getConfirmedBalance(Asset.QORT) > 20); // 10 for transfer asset, 10 for fee
|
||||
assertTrue(new Account(repository, dilbertAccount.getAddress()).getConfirmedBalance(Asset.QORT) > 20); // 10 for transfer asset, 10 for fee
|
||||
|
||||
// Mint until block 10
|
||||
while (block.getBlockData().getHeight() < 10)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
assertEquals(10, (int) block.getBlockData().getHeight());
|
||||
|
||||
// Chloe transfer assets to Bob and Dilbert
|
||||
transferAssets(repository, chloeAccount, bobAccount);
|
||||
transferAssets(repository, chloeAccount, dilbertAccount);
|
||||
|
||||
// Dilbert transfer assets to Bob and Chloe
|
||||
transferAssets(repository, dilbertAccount, bobAccount);
|
||||
transferAssets(repository, dilbertAccount, chloeAccount);
|
||||
|
||||
// Mint until block 29 (the algo runs at block 30)
|
||||
while (block.getBlockData().getHeight() < 29)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
assertEquals(29, (int) block.getBlockData().getHeight());
|
||||
|
||||
// Ensure that Bob have no penalties and level 5
|
||||
assertEquals(0, (int) new Account(repository, bobAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(5, (int)bobAccount.getLevel());
|
||||
|
||||
// Ensure that Chloe have no penalties and level 5
|
||||
assertEquals(0, (int) new Account(repository, chloeAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(5, (int)chloeAccount.getLevel());
|
||||
|
||||
// Ensure that Dilbert have no penalties and level6
|
||||
assertEquals(0, (int) new Account(repository, dilbertAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(6, (int)dilbertAccount.getLevel());
|
||||
|
||||
// Mint a block, so the algo runs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure that Bob, Chloe and Dilbert are now have penalties
|
||||
assertEquals(-5000000, (int) new Account(repository, bobAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(-5000000, (int) new Account(repository, chloeAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(-5000000, (int) new Account(repository, dilbertAccount.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Ensure that Bob, Chloe and Dilbert are now level 0
|
||||
assertEquals(0, (int) new Account(repository, bobAccount.getAddress()).getLevel());
|
||||
assertEquals(0, (int) new Account(repository, chloeAccount.getAddress()).getLevel());
|
||||
assertEquals(0, (int) new Account(repository, dilbertAccount.getAddress()).getLevel());
|
||||
|
||||
// Orphan last block
|
||||
BlockUtils.orphanLastBlock(repository);
|
||||
|
||||
// Ensure that Bob, Chloe and Dilbert are now greater than level 0
|
||||
assertTrue(new Account(repository, bobAccount.getAddress()).getLevel() > 0);
|
||||
assertTrue(new Account(repository, chloeAccount.getAddress()).getLevel() > 0);
|
||||
assertTrue(new Account(repository, dilbertAccount.getAddress()).getLevel() > 0);
|
||||
|
||||
// Ensure that Bob, Chloe and Dilbert have no penalties again
|
||||
assertEquals(0, (int) new Account(repository, bobAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(0, (int) new Account(repository, chloeAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(0, (int) new Account(repository, dilbertAccount.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Run orphan check - this can't be in afterTest() because some tests access the live db
|
||||
Common.orphanCheck();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSingleTransferPrivsBeforeAlgoBlock() throws DataException {
|
||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||
|
||||
// Alice self share online, and will be used to mint the blocks
|
||||
PrivateKeyAccount aliceSelfShare = Common.getTestAccount(repository, "alice-reward-share");
|
||||
List<PrivateKeyAccount> onlineAccounts = new ArrayList<>();
|
||||
onlineAccounts.add(aliceSelfShare);
|
||||
|
||||
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
|
||||
|
||||
// Mint blocks
|
||||
Block block = null;
|
||||
for (int i = 0; i <= 5; i++)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure that Bob have more than 20 qort
|
||||
assertTrue(new Account(repository, bobAccount.getAddress()).getConfirmedBalance(Asset.QORT) > 20);
|
||||
|
||||
// Mint until block 17 (the algo runs at block 20)
|
||||
while (block.getBlockData().getHeight() < 26)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
assertEquals(26, (int) block.getBlockData().getHeight());
|
||||
|
||||
// Bob then issues a TRANSFER_PRIVS
|
||||
PrivateKeyAccount recipientAccount = randomTransferPrivs(repository, bobAccount);
|
||||
|
||||
// Ensure recipient has no level (actually, no account record) at this point (pre-confirmation)
|
||||
assertNull(recipientAccount.getLevel());
|
||||
|
||||
// Mint a block, so that the TRANSFER_PRIVS confirms
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Now ensure that the TRANSFER_PRIVS recipient has inherited Bob's level, and Bob is at level 0
|
||||
assertTrue(recipientAccount.getLevel() > 0);
|
||||
assertEquals(0, (int)bobAccount.getLevel());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Mint a block, so that we can penalize Bob after transfer privs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Update blocks minted penalty for Bob
|
||||
Set<AccountPenaltyData> penalties = new LinkedHashSet<>();
|
||||
penalties.add(new AccountPenaltyData(bobAccount.getAddress(), -5000000));
|
||||
repository.getAccountRepository().updateBlocksMintedPenalties(penalties);
|
||||
|
||||
// Mint a block, so that we check if Bob got penalized before algo runs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure Bob got penalized
|
||||
assertEquals(-5000000, (int) new Account(repository, bobAccount.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Mint a block, so the algo runs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure recipient account has penalty too
|
||||
assertEquals(-5000000, (int) new Account(repository, recipientAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount.getAddress()).getLevel());
|
||||
|
||||
// Orphan last block
|
||||
BlockUtils.orphanLastBlock(repository);
|
||||
|
||||
// Ensure recipient account has no penalty again and has a level greater than 0
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertTrue(new Account(repository, recipientAccount.getAddress()).getLevel() > 0);
|
||||
|
||||
// Run orphan check - this can't be in afterTest() because some tests access the live db
|
||||
Common.orphanCheck();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleTransferPrivsBeforeAlgoBlock() throws DataException {
|
||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||
|
||||
// Alice self share online, and will be used to mint the blocks
|
||||
PrivateKeyAccount aliceSelfShare = Common.getTestAccount(repository, "alice-reward-share");
|
||||
List<PrivateKeyAccount> onlineAccounts = new ArrayList<>();
|
||||
onlineAccounts.add(aliceSelfShare);
|
||||
|
||||
PrivateKeyAccount bobAccount = Common.getTestAccount(repository, "bob");
|
||||
PrivateKeyAccount chloeAccount = Common.getTestAccount(repository, "chloe");
|
||||
PrivateKeyAccount dilbertAccount = Common.getTestAccount(repository, "dilbert");
|
||||
|
||||
// Mint blocks
|
||||
Block block = null;
|
||||
for (int i = 0; i <= 5; i++)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure that Bob, Chloe and Dilbert have more than 20 qort
|
||||
assertTrue(new Account(repository, bobAccount.getAddress()).getConfirmedBalance(Asset.QORT) > 20);
|
||||
assertTrue(new Account(repository, chloeAccount.getAddress()).getConfirmedBalance(Asset.QORT) > 20);
|
||||
assertTrue(new Account(repository, dilbertAccount.getAddress()).getConfirmedBalance(Asset.QORT) > 20);
|
||||
|
||||
// Mint until block 12 (the algo runs at block 20)
|
||||
while (block.getBlockData().getHeight() < 22)
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
assertEquals(22, (int) block.getBlockData().getHeight());
|
||||
|
||||
// Bob then issues a TRANSFER_PRIVS
|
||||
PrivateKeyAccount recipientAccount1 = randomTransferPrivs(repository, bobAccount);
|
||||
|
||||
// Ensure Bob's recipient has no level (actually, no account record) at this point (pre-confirmation)
|
||||
assertNull(recipientAccount1.getLevel());
|
||||
|
||||
// Mint a block, so that Bob's TRANSFER_PRIVS confirms
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Now ensure that the Bob's TRANSFER_PRIVS recipient has inherited Bob's level, and Bob is at level 0
|
||||
assertTrue(recipientAccount1.getLevel() > 0);
|
||||
assertEquals(0, (int)bobAccount.getLevel());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount1.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Mint a block, so that Chloe can issue a TRANSFER_PRIVS
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Chloe then issues a TRANSFER_PRIVS
|
||||
PrivateKeyAccount recipientAccount2 = randomTransferPrivs(repository, chloeAccount);
|
||||
|
||||
// Ensure Chloe's recipient has no level (actually, no account record) at this point (pre-confirmation)
|
||||
assertNull(recipientAccount2.getLevel());
|
||||
|
||||
// Mint a block, so that Chloe's TRANSFER_PRIVS confirms
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Now ensure that the Chloe's TRANSFER_PRIVS recipient has inherited Chloe's level, and Chloe is at level 0
|
||||
assertTrue(recipientAccount2.getLevel() > 0);
|
||||
assertEquals(0, (int)chloeAccount.getLevel());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount2.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Mint a block, so that Dilbert can issue a TRANSFER_PRIVS
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Dilbert then issues a TRANSFER_PRIVS
|
||||
PrivateKeyAccount recipientAccount3 = randomTransferPrivs(repository, dilbertAccount);
|
||||
|
||||
// Ensure Dilbert's recipient has no level (actually, no account record) at this point (pre-confirmation)
|
||||
assertNull(recipientAccount3.getLevel());
|
||||
|
||||
// Mint a block, so that Dilbert's TRANSFER_PRIVS confirms
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Now ensure that the Dilbert's TRANSFER_PRIVS recipient has inherited Dilbert's level, and Dilbert is at level 0
|
||||
assertTrue(recipientAccount3.getLevel() > 0);
|
||||
assertEquals(0, (int)dilbertAccount.getLevel());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount3.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Mint a block, so that we can penalize Bob, Chloe and Dilbert after transfer privs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Update blocks minted penalty for Bob, Chloe and Dilbert
|
||||
Set<AccountPenaltyData> penalties = new LinkedHashSet<>();
|
||||
penalties.add(new AccountPenaltyData(bobAccount.getAddress(), -5000000));
|
||||
penalties.add(new AccountPenaltyData(chloeAccount.getAddress(), -5000000));
|
||||
penalties.add(new AccountPenaltyData(dilbertAccount.getAddress(), -5000000));
|
||||
repository.getAccountRepository().updateBlocksMintedPenalties(penalties);
|
||||
|
||||
// Mint a block, so that we check if Bob, Chloe and Dilbert got penalized before algo runs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure Bob, Chloe and Dilbert got penalized
|
||||
assertEquals(-5000000, (int) new Account(repository, bobAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(-5000000, (int) new Account(repository, chloeAccount.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(-5000000, (int) new Account(repository, dilbertAccount.getAddress()).getBlocksMintedPenalty());
|
||||
|
||||
// Mint a block, so the algo runs
|
||||
block = BlockMinter.mintTestingBlock(repository, onlineAccounts.toArray(new PrivateKeyAccount[0]));
|
||||
|
||||
// Ensure recipients accounts has penalty too
|
||||
assertEquals(-5000000, (int) new Account(repository, recipientAccount1.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(-5000000, (int) new Account(repository, recipientAccount2.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(-5000000, (int) new Account(repository, recipientAccount3.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount1.getAddress()).getLevel());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount2.getAddress()).getLevel());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount3.getAddress()).getLevel());
|
||||
|
||||
// Orphan last block
|
||||
BlockUtils.orphanLastBlock(repository);
|
||||
|
||||
// Ensure recipients accounts has no penalty again and has a level greater than 0
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount1.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount2.getAddress()).getBlocksMintedPenalty());
|
||||
assertEquals(0, (int) new Account(repository, recipientAccount3.getAddress()).getBlocksMintedPenalty());
|
||||
assertTrue(new Account(repository, recipientAccount1.getAddress()).getLevel() > 0);
|
||||
assertTrue(new Account(repository, recipientAccount2.getAddress()).getLevel() > 0);
|
||||
assertTrue(new Account(repository, recipientAccount3.getAddress()).getLevel() > 0);
|
||||
|
||||
// Run orphan check - this can't be in afterTest() because some tests access the live db
|
||||
Common.orphanCheck();
|
||||
}
|
||||
}
|
||||
|
||||
private static void transferAssets(Repository repository, PrivateKeyAccount senderAccount, PrivateKeyAccount recipientAccount) throws DataException {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
// Generate new asset transfers from sender to recipient
|
||||
BaseTransactionData baseTransactionData = new BaseTransactionData(NTP.getTime(), 0, senderAccount.getLastReference(), senderAccount.getPublicKey(), fee, null);
|
||||
TransactionData transactionData;
|
||||
transactionData = new TransferAssetTransactionData(baseTransactionData, recipientAccount.getAddress(), 1, 0);
|
||||
TransactionUtils.signAndImportValid(repository, transactionData, senderAccount); // updates paymentData's signature
|
||||
}
|
||||
}
|
||||
|
||||
private static PrivateKeyAccount randomTransferPrivs(Repository repository, PrivateKeyAccount senderAccount) throws DataException {
|
||||
// Generate random recipient account
|
||||
byte[] randomPrivateKey = new byte[32];
|
||||
new Random().nextBytes(randomPrivateKey);
|
||||
PrivateKeyAccount recipientAccount = new PrivateKeyAccount(repository, randomPrivateKey);
|
||||
|
||||
BaseTransactionData baseTransactionData = new BaseTransactionData(NTP.getTime(), 0, senderAccount.getLastReference(), senderAccount.getPublicKey(), fee, null);
|
||||
TransactionData transactionData = new TransferPrivsTransactionData(baseTransactionData, recipientAccount.getAddress());
|
||||
|
||||
TransactionUtils.signAndImportValid(repository, transactionData, senderAccount);
|
||||
|
||||
return recipientAccount;
|
||||
}
|
||||
|
||||
}
|
1578
src/test/java/org/qortal/test/SelfSponsorshipAlgoV3Tests.java
Normal file
1578
src/test/java/org/qortal/test/SelfSponsorshipAlgoV3Tests.java
Normal file
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,8 @@
|
||||
"onlineAccountSignaturesMaxLifetime": 86400000,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -82,14 +84,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -23,6 +23,8 @@
|
||||
"onlineAccountSignaturesMaxLifetime": 86400000,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -85,14 +87,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 9999999999999,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 9999999999999,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -87,14 +89,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 500,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -23,6 +23,8 @@
|
||||
"onlineAccountSignaturesMaxLifetime": 86400000,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -24,6 +24,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -86,14 +88,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 20,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
132
src/test/resources/test-chain-v2-self-sponsorship-algo-v2.json
Normal file
132
src/test/resources/test-chain-v2-self-sponsorship-algo-v2.json
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"isTestChain": true,
|
||||
"blockTimestampMargin": 500,
|
||||
"transactionExpiryPeriod": 86400000,
|
||||
"maxBlockSize": 2097152,
|
||||
"maxBytesPerUnitFee": 0,
|
||||
"unitFees": [
|
||||
{ "timestamp": 0, "fee": "0.00000001" }
|
||||
],
|
||||
"nameRegistrationUnitFees": [
|
||||
{ "timestamp": 0, "fee": "0.00000001" },
|
||||
{ "timestamp": 1645372800000, "fee": "5" }
|
||||
],
|
||||
"requireGroupForApproval": false,
|
||||
"minAccountLevelToRewardShare": 5,
|
||||
"maxRewardSharesPerFounderMintingAccount": 20,
|
||||
"maxRewardSharesByTimestamp": [
|
||||
{ "timestamp": 0, "maxShares": 20 },
|
||||
{ "timestamp": 9999999999999, "maxShares": 3 }
|
||||
],
|
||||
"founderEffectiveMintingLevel": 10,
|
||||
"onlineAccountSignaturesMinLifetime": 3600000,
|
||||
"onlineAccountSignaturesMaxLifetime": 86400000,
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 0,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
{ "height": 21, "reward": 1 }
|
||||
],
|
||||
"sharesByLevelV1": [
|
||||
{ "id": 1, "levels": [ 1, 2 ], "share": 0.05 },
|
||||
{ "id": 2, "levels": [ 3, 4 ], "share": 0.10 },
|
||||
{ "id": 3, "levels": [ 5, 6 ], "share": 0.15 },
|
||||
{ "id": 4, "levels": [ 7, 8 ], "share": 0.20 },
|
||||
{ "id": 5, "levels": [ 9, 10 ], "share": 0.25 }
|
||||
],
|
||||
"sharesByLevelV2": [
|
||||
{ "id": 1, "levels": [ 1, 2 ], "share": 0.06 },
|
||||
{ "id": 2, "levels": [ 3, 4 ], "share": 0.13 },
|
||||
{ "id": 3, "levels": [ 5, 6 ], "share": 0.19 },
|
||||
{ "id": 4, "levels": [ 7, 8 ], "share": 0.26 },
|
||||
{ "id": 5, "levels": [ 9, 10 ], "share": 0.32 }
|
||||
],
|
||||
"qoraHoldersShareByHeight": [
|
||||
{ "height": 1, "share": 0.20 },
|
||||
{ "height": 1000000, "share": 0.01 }
|
||||
],
|
||||
"qoraPerQortReward": 250,
|
||||
"minAccountsToActivateShareBin": 0,
|
||||
"shareBinActivationMinLevel": 7,
|
||||
"blocksNeededByLevel": [ 5, 20, 30, 40, 50, 60, 18, 80, 90, 100 ],
|
||||
"blockTimingsByHeight": [
|
||||
{ "height": 1, "target": 60000, "deviation": 30000, "power": 0.2 }
|
||||
],
|
||||
"ciyamAtSettings": {
|
||||
"feePerStep": "0.0001",
|
||||
"maxStepsPerRound": 500,
|
||||
"stepsPerFunctionCall": 10,
|
||||
"minutesPerBlock": 1
|
||||
},
|
||||
"featureTriggers": {
|
||||
"messageHeight": 0,
|
||||
"atHeight": 0,
|
||||
"assetsTimestamp": 0,
|
||||
"votingTimestamp": 0,
|
||||
"arbitraryTimestamp": 0,
|
||||
"powfixTimestamp": 0,
|
||||
"qortalTimestamp": 0,
|
||||
"newAssetPricingTimestamp": 0,
|
||||
"groupApprovalTimestamp": 0,
|
||||
"atFindNextTransactionFix": 0,
|
||||
"newBlockSigHeight": 999999,
|
||||
"shareBinFix": 999999,
|
||||
"sharesByLevelV2Height": 999999,
|
||||
"rewardShareLimitTimestamp": 9999999999999,
|
||||
"calcChainWeightTimestamp": 0,
|
||||
"transactionV5Timestamp": 0,
|
||||
"transactionV6Timestamp": 0,
|
||||
"disableReferenceTimestamp": 9999999999999,
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 30,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
"timestamp": 0,
|
||||
"transactions": [
|
||||
{ "type": "ISSUE_ASSET", "assetName": "QORT", "description": "QORT native coin", "data": "", "quantity": 0, "isDivisible": true, "fee": 0 },
|
||||
{ "type": "ISSUE_ASSET", "assetName": "Legacy-QORA", "description": "Representative legacy QORA", "quantity": 0, "isDivisible": true, "data": "{}", "isUnspendable": true },
|
||||
{ "type": "ISSUE_ASSET", "assetName": "QORT-from-QORA", "description": "QORT gained from holding legacy QORA", "quantity": 0, "isDivisible": true, "data": "{}", "isUnspendable": true },
|
||||
|
||||
{ "type": "GENESIS", "recipient": "QgV4s3xnzLhVBEJxcYui4u4q11yhUHsd9v", "amount": "1000000000" },
|
||||
{ "type": "GENESIS", "recipient": "QixPbJUwsaHsVEofJdozU9zgVqkK6aYhrK", "amount": "1000000" },
|
||||
{ "type": "GENESIS", "recipient": "QaUpHNhT3Ygx6avRiKobuLdusppR5biXjL", "amount": "1000000" },
|
||||
{ "type": "GENESIS", "recipient": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "amount": "1000000" },
|
||||
|
||||
{ "type": "CREATE_GROUP", "creatorPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupName": "dev-group", "description": "developer group", "isOpen": false, "approvalThreshold": "PCT100", "minimumBlockDelay": 0, "maximumBlockDelay": 1440 },
|
||||
|
||||
{ "type": "UPDATE_GROUP", "ownerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupId": 1, "newOwner": "QdSnUy6sUiEnaN87dWmE92g1uQjrvPgrWG", "newDescription": "developer group", "newIsOpen": false, "newApprovalThreshold": "PCT40", "minimumBlockDelay": 10, "maximumBlockDelay": 1440 },
|
||||
|
||||
{ "type": "ISSUE_ASSET", "issuerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "assetName": "TEST", "description": "test asset", "data": "", "quantity": "1000000", "isDivisible": true, "fee": 0 },
|
||||
{ "type": "ISSUE_ASSET", "issuerPublicKey": "C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry", "assetName": "OTHER", "description": "other test asset", "data": "", "quantity": "1000000", "isDivisible": true, "fee": 0 },
|
||||
{ "type": "ISSUE_ASSET", "issuerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "assetName": "GOLD", "description": "gold test asset", "data": "", "quantity": "1000000", "isDivisible": true, "fee": 0 },
|
||||
|
||||
{ "type": "ACCOUNT_FLAGS", "target": "QgV4s3xnzLhVBEJxcYui4u4q11yhUHsd9v", "andMask": -1, "orMask": 1, "xorMask": 0 },
|
||||
{ "type": "REWARD_SHARE", "minterPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "recipient": "QgV4s3xnzLhVBEJxcYui4u4q11yhUHsd9v", "rewardSharePublicKey": "7PpfnvLSG7y4HPh8hE7KoqAjLCkv7Ui6xw4mKAkbZtox", "sharePercent": "100" },
|
||||
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "QixPbJUwsaHsVEofJdozU9zgVqkK6aYhrK", "level": 5 },
|
||||
{ "type": "REWARD_SHARE", "minterPublicKey": "C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry", "recipient": "QixPbJUwsaHsVEofJdozU9zgVqkK6aYhrK", "rewardSharePublicKey": "CcABzvk26TFEHG7Yok84jxyd4oBtLkx8RJdGFVz2csvp", "sharePercent": 100 },
|
||||
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "level": 5 },
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "QaUpHNhT3Ygx6avRiKobuLdusppR5biXjL", "level": 5 },
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "level": 6 }
|
||||
]
|
||||
}
|
||||
}
|
132
src/test/resources/test-chain-v2-self-sponsorship-algo-v3.json
Normal file
132
src/test/resources/test-chain-v2-self-sponsorship-algo-v3.json
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"isTestChain": true,
|
||||
"blockTimestampMargin": 500,
|
||||
"transactionExpiryPeriod": 86400000,
|
||||
"maxBlockSize": 2097152,
|
||||
"maxBytesPerUnitFee": 0,
|
||||
"unitFees": [
|
||||
{ "timestamp": 0, "fee": "0.00000001" }
|
||||
],
|
||||
"nameRegistrationUnitFees": [
|
||||
{ "timestamp": 0, "fee": "0.00000001" },
|
||||
{ "timestamp": 1645372800000, "fee": "5" }
|
||||
],
|
||||
"requireGroupForApproval": false,
|
||||
"minAccountLevelToRewardShare": 5,
|
||||
"maxRewardSharesPerFounderMintingAccount": 20,
|
||||
"maxRewardSharesByTimestamp": [
|
||||
{ "timestamp": 0, "maxShares": 20 },
|
||||
{ "timestamp": 9999999999999, "maxShares": 3 }
|
||||
],
|
||||
"founderEffectiveMintingLevel": 10,
|
||||
"onlineAccountSignaturesMinLifetime": 3600000,
|
||||
"onlineAccountSignaturesMaxLifetime": 86400000,
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 0,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
{ "height": 21, "reward": 1 }
|
||||
],
|
||||
"sharesByLevelV1": [
|
||||
{ "id": 1, "levels": [ 1, 2 ], "share": 0.05 },
|
||||
{ "id": 2, "levels": [ 3, 4 ], "share": 0.10 },
|
||||
{ "id": 3, "levels": [ 5, 6 ], "share": 0.15 },
|
||||
{ "id": 4, "levels": [ 7, 8 ], "share": 0.20 },
|
||||
{ "id": 5, "levels": [ 9, 10 ], "share": 0.25 }
|
||||
],
|
||||
"sharesByLevelV2": [
|
||||
{ "id": 1, "levels": [ 1, 2 ], "share": 0.06 },
|
||||
{ "id": 2, "levels": [ 3, 4 ], "share": 0.13 },
|
||||
{ "id": 3, "levels": [ 5, 6 ], "share": 0.19 },
|
||||
{ "id": 4, "levels": [ 7, 8 ], "share": 0.26 },
|
||||
{ "id": 5, "levels": [ 9, 10 ], "share": 0.32 }
|
||||
],
|
||||
"qoraHoldersShareByHeight": [
|
||||
{ "height": 1, "share": 0.20 },
|
||||
{ "height": 1000000, "share": 0.01 }
|
||||
],
|
||||
"qoraPerQortReward": 250,
|
||||
"minAccountsToActivateShareBin": 0,
|
||||
"shareBinActivationMinLevel": 7,
|
||||
"blocksNeededByLevel": [ 5, 20, 30, 40, 50, 60, 28, 80, 90, 100 ],
|
||||
"blockTimingsByHeight": [
|
||||
{ "height": 1, "target": 60000, "deviation": 30000, "power": 0.2 }
|
||||
],
|
||||
"ciyamAtSettings": {
|
||||
"feePerStep": "0.0001",
|
||||
"maxStepsPerRound": 500,
|
||||
"stepsPerFunctionCall": 10,
|
||||
"minutesPerBlock": 1
|
||||
},
|
||||
"featureTriggers": {
|
||||
"messageHeight": 0,
|
||||
"atHeight": 0,
|
||||
"assetsTimestamp": 0,
|
||||
"votingTimestamp": 0,
|
||||
"arbitraryTimestamp": 0,
|
||||
"powfixTimestamp": 0,
|
||||
"qortalTimestamp": 0,
|
||||
"newAssetPricingTimestamp": 0,
|
||||
"groupApprovalTimestamp": 0,
|
||||
"atFindNextTransactionFix": 0,
|
||||
"newBlockSigHeight": 999999,
|
||||
"shareBinFix": 999999,
|
||||
"sharesByLevelV2Height": 999999,
|
||||
"rewardShareLimitTimestamp": 9999999999999,
|
||||
"calcChainWeightTimestamp": 0,
|
||||
"transactionV5Timestamp": 0,
|
||||
"transactionV6Timestamp": 0,
|
||||
"disableReferenceTimestamp": 9999999999999,
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 30,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
"timestamp": 0,
|
||||
"transactions": [
|
||||
{ "type": "ISSUE_ASSET", "assetName": "QORT", "description": "QORT native coin", "data": "", "quantity": 0, "isDivisible": true, "fee": 0 },
|
||||
{ "type": "ISSUE_ASSET", "assetName": "Legacy-QORA", "description": "Representative legacy QORA", "quantity": 0, "isDivisible": true, "data": "{}", "isUnspendable": true },
|
||||
{ "type": "ISSUE_ASSET", "assetName": "QORT-from-QORA", "description": "QORT gained from holding legacy QORA", "quantity": 0, "isDivisible": true, "data": "{}", "isUnspendable": true },
|
||||
|
||||
{ "type": "GENESIS", "recipient": "QgV4s3xnzLhVBEJxcYui4u4q11yhUHsd9v", "amount": "1000000000" },
|
||||
{ "type": "GENESIS", "recipient": "QixPbJUwsaHsVEofJdozU9zgVqkK6aYhrK", "amount": "1000000" },
|
||||
{ "type": "GENESIS", "recipient": "QaUpHNhT3Ygx6avRiKobuLdusppR5biXjL", "amount": "1000000" },
|
||||
{ "type": "GENESIS", "recipient": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "amount": "1000000" },
|
||||
|
||||
{ "type": "CREATE_GROUP", "creatorPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupName": "dev-group", "description": "developer group", "isOpen": false, "approvalThreshold": "PCT100", "minimumBlockDelay": 0, "maximumBlockDelay": 1440 },
|
||||
|
||||
{ "type": "UPDATE_GROUP", "ownerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupId": 1, "newOwner": "QdSnUy6sUiEnaN87dWmE92g1uQjrvPgrWG", "newDescription": "developer group", "newIsOpen": false, "newApprovalThreshold": "PCT40", "minimumBlockDelay": 10, "maximumBlockDelay": 1440 },
|
||||
|
||||
{ "type": "ISSUE_ASSET", "issuerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "assetName": "TEST", "description": "test asset", "data": "", "quantity": "1000000", "isDivisible": true, "fee": 0 },
|
||||
{ "type": "ISSUE_ASSET", "issuerPublicKey": "C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry", "assetName": "OTHER", "description": "other test asset", "data": "", "quantity": "1000000", "isDivisible": true, "fee": 0 },
|
||||
{ "type": "ISSUE_ASSET", "issuerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "assetName": "GOLD", "description": "gold test asset", "data": "", "quantity": "1000000", "isDivisible": true, "fee": 0 },
|
||||
|
||||
{ "type": "ACCOUNT_FLAGS", "target": "QgV4s3xnzLhVBEJxcYui4u4q11yhUHsd9v", "andMask": -1, "orMask": 1, "xorMask": 0 },
|
||||
{ "type": "REWARD_SHARE", "minterPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "recipient": "QgV4s3xnzLhVBEJxcYui4u4q11yhUHsd9v", "rewardSharePublicKey": "7PpfnvLSG7y4HPh8hE7KoqAjLCkv7Ui6xw4mKAkbZtox", "sharePercent": "100" },
|
||||
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "QixPbJUwsaHsVEofJdozU9zgVqkK6aYhrK", "level": 5 },
|
||||
{ "type": "REWARD_SHARE", "minterPublicKey": "C6wuddsBV3HzRrXUtezE7P5MoRXp5m3mEDokRDGZB6ry", "recipient": "QixPbJUwsaHsVEofJdozU9zgVqkK6aYhrK", "rewardSharePublicKey": "CcABzvk26TFEHG7Yok84jxyd4oBtLkx8RJdGFVz2csvp", "sharePercent": 100 },
|
||||
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "level": 5 },
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "QaUpHNhT3Ygx6avRiKobuLdusppR5biXjL", "level": 5 },
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "level": 6 }
|
||||
]
|
||||
}
|
||||
}
|
@@ -25,6 +25,8 @@
|
||||
"onlineAccountsModulusV2Timestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV1SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV2SnapshotTimestamp": 9999999999999,
|
||||
"selfSponsorshipAlgoV3SnapshotTimestamp": 9999999999999,
|
||||
"referenceTimestampBlock": 9999999999999,
|
||||
"mempowTransactionUpdatesTimestamp": 0,
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
@@ -87,14 +89,14 @@
|
||||
"increaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"onlineAccountMinterLevelValidationHeight": 0,
|
||||
"selfSponsorshipAlgoV1Height": 999999999,
|
||||
"selfSponsorshipAlgoV2Height": 999999999,
|
||||
"selfSponsorshipAlgoV3Height": 999999999,
|
||||
"feeValidationFixTimestamp": 0,
|
||||
"chatReferenceTimestamp": 0,
|
||||
"arbitraryOptionalFeeTimestamp": 0,
|
||||
"unconfirmableRewardSharesHeight": 99999999,
|
||||
"selfSponsorshipAlgoV2Height": 9999999,
|
||||
"disableTransferPrivsTimestamp": 9999999999500,
|
||||
"enableTransferPrivsTimestamp": 9999999999950,
|
||||
"penaltyFixHeight": 9999999
|
||||
"enableTransferPrivsTimestamp": 9999999999950
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"repositoryPath": "testdb",
|
||||
"bitcoinNet": "TEST3",
|
||||
"litecoinNet": "TEST3",
|
||||
"restrictedApi": false,
|
||||
"blockchainConfig": "src/test/resources/test-chain-v2-self-sponsorship-algo-v2.json",
|
||||
"exportPath": "qortal-backup-test",
|
||||
"bootstrap": false,
|
||||
"wipeUnconfirmedOnStart": false,
|
||||
"testNtpOffset": 0,
|
||||
"minPeers": 0,
|
||||
"pruneBlockLimit": 100,
|
||||
"bootstrapFilenamePrefix": "test-",
|
||||
"dataPath": "data-test",
|
||||
"tempDataPath": "data-test/_temp",
|
||||
"listsPath": "lists-test",
|
||||
"storagePolicy": "FOLLOWED_OR_VIEWED",
|
||||
"maxStorageCapacity": 104857600,
|
||||
"arrrDefaultBirthday": 1900000
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"repositoryPath": "testdb",
|
||||
"bitcoinNet": "TEST3",
|
||||
"litecoinNet": "TEST3",
|
||||
"restrictedApi": false,
|
||||
"blockchainConfig": "src/test/resources/test-chain-v2-self-sponsorship-algo-v3.json",
|
||||
"exportPath": "qortal-backup-test",
|
||||
"bootstrap": false,
|
||||
"wipeUnconfirmedOnStart": false,
|
||||
"testNtpOffset": 0,
|
||||
"minPeers": 0,
|
||||
"pruneBlockLimit": 100,
|
||||
"bootstrapFilenamePrefix": "test-",
|
||||
"dataPath": "data-test",
|
||||
"tempDataPath": "data-test/_temp",
|
||||
"listsPath": "lists-test",
|
||||
"storagePolicy": "FOLLOWED_OR_VIEWED",
|
||||
"maxStorageCapacity": 104857600,
|
||||
"arrrDefaultBirthday": 1900000
|
||||
}
|
Reference in New Issue
Block a user