mirror of
https://github.com/Qortal/qortal.git
synced 2025-05-13 13:17:51 +00:00
Merge f1a0472c577757e885a41af78a7e3ee91e7a7f8a into 33475ace004b0ec662645b8636181074bbf15d3c
This commit is contained in:
commit
e6c496b497
4
pom.xml
4
pom.xml
@ -747,12 +747,12 @@
|
||||
<!-- BouncyCastle for crypto, including TLS secure networking -->
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
<artifactId>bcprov-jdk15to18</artifactId>
|
||||
<version>${bouncycastle.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bctls-jdk15on</artifactId>
|
||||
<artifactId>bctls-jdk15to18</artifactId>
|
||||
<version>${bouncycastle.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -5,8 +5,10 @@ import org.qortal.utils.Base58;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
@ -44,12 +46,22 @@ public class ArbitraryDataDigest {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Account for \ VS / : Linux VS Windows
|
||||
String pathString = relativePath.toString();
|
||||
|
||||
if(relativePath.getFileSystem().toString().contains("Windows")) {
|
||||
pathString = pathString.replace("\\","/");
|
||||
}
|
||||
|
||||
// Hash path
|
||||
byte[] filePathBytes = relativePath.toString().getBytes(StandardCharsets.UTF_8);
|
||||
byte[] filePathBytes = pathString.getBytes(StandardCharsets.UTF_8);
|
||||
System.out.printf("Path: %s \n", pathString);
|
||||
System.out.printf("Path Byte Array: %s \n", Arrays.toString(filePathBytes));
|
||||
sha256.update(filePathBytes);
|
||||
|
||||
// Hash contents
|
||||
byte[] fileContent = Files.readAllBytes(path);
|
||||
System.out.printf("File Content: %s \n", Arrays.toString(fileContent));
|
||||
sha256.update(fileContent);
|
||||
}
|
||||
this.hash = sha256.digest();
|
||||
|
@ -37,7 +37,7 @@ public enum Service {
|
||||
if (files != null && files[0] != null) {
|
||||
final String extension = FilenameUtils.getExtension(files[0].getName()).toLowerCase();
|
||||
// We must allow blank file extensions because these are used by data published from a plaintext or base64-encoded string
|
||||
final List<String> allowedExtensions = Arrays.asList("zip", "pdf", "txt", "odt", "ods", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "");
|
||||
final List<String> allowedExtensions = Arrays.asList("qortal", "zip", "pdf", "txt", "odt", "ods", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "");
|
||||
if (extension == null || !allowedExtensions.contains(extension)) {
|
||||
return ValidationResult.INVALID_FILE_EXTENSION;
|
||||
}
|
||||
|
@ -644,8 +644,10 @@ public class ElectrumX extends BitcoinyBlockchainProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs RPC call, with automatic reconnection to different server if needed.
|
||||
* <p>
|
||||
* <p>Performs RPC call, with automatic reconnection to different server if needed.
|
||||
* </p>
|
||||
* @param method String representation of the RPC call value
|
||||
* @param params a list of Objects passed to the method of the Remote Server
|
||||
* @return "result" object from within JSON output
|
||||
* @throws ForeignBlockchainException if server returns error or something goes wrong
|
||||
*/
|
||||
|
@ -15,10 +15,7 @@ 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.AccountUtils;
|
||||
import org.qortal.test.common.BlockUtils;
|
||||
import org.qortal.test.common.Common;
|
||||
import org.qortal.test.common.TransactionUtils;
|
||||
import org.qortal.test.common.*;
|
||||
import org.qortal.test.common.transaction.TestTransaction;
|
||||
import org.qortal.transaction.Transaction;
|
||||
import org.qortal.transaction.TransferPrivsTransaction;
|
||||
@ -28,6 +25,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import static org.hamcrest.core.IsNot.not;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.qortal.test.common.AccountUtils.fee;
|
||||
import static org.qortal.transaction.Transaction.ValidationResult.ACCOUNT_NOT_TRANSFERABLE;
|
||||
@ -836,7 +834,10 @@ public class SelfSponsorshipAlgoV1Tests extends Common {
|
||||
assertEquals(0, (int) new Account(repository, aliceAccount.getAddress()).getLevel());
|
||||
|
||||
// Alice can no longer create a reward share transaction
|
||||
assertEquals(Transaction.ValidationResult.ACCOUNT_CANNOT_REWARD_SHARE, AccountUtils.createRandomRewardShare(repository, aliceAccount));
|
||||
// Used to Chehck for ACCOUNT_CANNOT_REWARD_SHARE / Updated post canMint() function changes
|
||||
// canMint returns False because reward penality != 0 (account.java:240)
|
||||
// Causes trip in RewardShareTransaction.java:126, Returns NOT_MINTING_ACCOUNT
|
||||
assertThat(Transaction.ValidationResult.OK, not(AccountUtils.createRandomRewardShare(repository, aliceAccount)));
|
||||
|
||||
// ... but Bob still can
|
||||
assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, bobAccount));
|
||||
|
@ -28,6 +28,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import static org.hamcrest.core.IsNot.not;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.qortal.test.common.AccountUtils.fee;
|
||||
import static org.qortal.transaction.Transaction.ValidationResult.ACCOUNT_NOT_TRANSFERABLE;
|
||||
@ -840,7 +841,7 @@ public class SelfSponsorshipAlgoV3Tests extends Common {
|
||||
assertEquals(0, (int) new Account(repository, aliceAccount.getAddress()).getLevel());
|
||||
|
||||
// Alice can no longer create a reward share transaction
|
||||
assertEquals(Transaction.ValidationResult.ACCOUNT_CANNOT_REWARD_SHARE, AccountUtils.createRandomRewardShare(repository, aliceAccount));
|
||||
assertThat(Transaction.ValidationResult.OK, not(AccountUtils.createRandomRewardShare(repository, aliceAccount)));
|
||||
|
||||
// Bob can no longer create a reward share transaction (disabled at Block 15)
|
||||
assertEquals(Transaction.ValidationResult.OK, AccountUtils.createRandomRewardShare(repository, bobAccount));
|
||||
|
@ -25,9 +25,19 @@ public class AddressesApiTests extends ApiCommon {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore(value = "Doesn't work, to be fixed later")
|
||||
@Ignore(value = "No Logic Coded")
|
||||
public void testGetOnlineAccounts() {
|
||||
// Add and remove users as online checking count after minting
|
||||
// TODO: Need to construct logic
|
||||
// this.addressesResource.getOnlineAccounts(), empty Array, Size = 0
|
||||
assertNotNull(this.addressesResource.getOnlineAccounts());
|
||||
int blocksToMint = 5;
|
||||
// Add 2 accounts to the online array, mint some blocks
|
||||
// Assert number of accountsOnline == 2
|
||||
// Remove an account from onlineStatus, mint some blocks
|
||||
// Assert number of accountsOnline == 1
|
||||
// Add two accounts as online, mint some blocks
|
||||
// Asset number of accountsOnline == 3
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -6,11 +6,13 @@ import org.qortal.arbitrary.ArbitraryDataDigest;
|
||||
import org.qortal.repository.DataException;
|
||||
import org.qortal.test.common.Common;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@ -25,7 +27,10 @@ public class ArbitraryDataDigestTests extends Common {
|
||||
|
||||
@Test
|
||||
public void testDirectoryDigest() throws IOException, DataException {
|
||||
Path dataPath = Paths.get("src/test/resources/arbitrary/demo1");
|
||||
String dataPathString = "src" + File.separator + "test" + File.separator + "resources" + File.separator + "arbitrary" + File.separator + "demo1";
|
||||
Path dataPath = Paths.get(dataPathString);
|
||||
|
||||
// expectedHash is calculated for Linux
|
||||
String expectedHash58 = "DKyMuonWKoneJqiVHgw26Vk1ytrZG9PGsE9xfBg3GKDp";
|
||||
|
||||
// Ensure directory exists
|
||||
@ -35,6 +40,13 @@ public class ArbitraryDataDigestTests extends Common {
|
||||
// Compute a hash
|
||||
ArbitraryDataDigest digest = new ArbitraryDataDigest(dataPath);
|
||||
digest.compute();
|
||||
// Assert Fails, Expected: DKyMuonWKoneJqiVHgw26Vk1ytrZG9PGsE9xfBg3GKDp
|
||||
// Actual : HbvgC6sfhFtDvmDXfPXVUcCUyZ5rM1NzX488qHmMpMB4
|
||||
// This might be failing because Windows turns "/" (47) to "\" (92)
|
||||
// Or maybe a fail due to \n [13] VS \r\n [13,10] in .txt files
|
||||
// Confirmed the read in windows has \r\n
|
||||
// Could be a combination of both
|
||||
System.out.printf("Hash: %s \n", Arrays.toString(digest.getHash()));
|
||||
assertEquals(expectedHash58, digest.getHash58());
|
||||
|
||||
// Write a random file to .qortal/cache to ensure it isn't being included in the digest function
|
||||
|
@ -15,9 +15,7 @@ import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
@ -242,7 +240,7 @@ public class ArbitraryDataMergeTests extends Common {
|
||||
BufferedWriter file1Writer = new BufferedWriter(new FileWriter(file1));
|
||||
String initialString = ArbitraryUtils.generateRandomString(1024);
|
||||
// Add a newline every 50 chars
|
||||
initialString = initialString.replaceAll("(.{50})", "$1\n");
|
||||
initialString = initialString.replaceAll("(.{50})", "$1" + System.lineSeparator());
|
||||
file1Writer.write(initialString);
|
||||
file1Writer.newLine();
|
||||
file1Writer.close();
|
||||
@ -307,23 +305,23 @@ public class ArbitraryDataMergeTests extends Common {
|
||||
file1.deleteOnExit();
|
||||
file2.deleteOnExit();
|
||||
|
||||
// Write a random string to the first file
|
||||
// Write a random string to the first file, 1024 characters, \n every 50 chars
|
||||
BufferedWriter file1Writer = new BufferedWriter(new FileWriter(file1));
|
||||
String initialString = ArbitraryUtils.generateRandomString(1024);
|
||||
// Add a newline every 50 chars
|
||||
initialString = initialString.replaceAll("(.{50})", "$1\n");
|
||||
initialString = initialString.replaceAll("(.{50})", "$1" + System.lineSeparator());
|
||||
// Remove newline at end of string
|
||||
initialString = initialString.stripTrailing();
|
||||
initialString = initialString.stripTrailing(); // Remove Trailing White Space
|
||||
file1Writer.write(initialString);
|
||||
// No newline
|
||||
file1Writer.close();
|
||||
byte[] file1Digest = Crypto.digest(file1);
|
||||
|
||||
// Write a slightly modified string to the second file
|
||||
// Write a slightly modified string to the second file, append "-edit" to the string
|
||||
BufferedWriter file2Writer = new BufferedWriter(new FileWriter(file2));
|
||||
String updatedString = initialString.concat("-edit");
|
||||
file2Writer.write(updatedString);
|
||||
// No newline
|
||||
// No newline - This is wrong, both files contain \n every 50 chars
|
||||
file2Writer.close();
|
||||
byte[] file2Digest = Crypto.digest(file2);
|
||||
|
||||
@ -342,6 +340,7 @@ public class ArbitraryDataMergeTests extends Common {
|
||||
ArbitraryDataCreatePatch patch = new ArbitraryDataCreatePatch(tempDir1, tempDir2, signature);
|
||||
patch.create();
|
||||
Path patchPath = patch.getFinalPath();
|
||||
|
||||
assertTrue(Files.exists(patchPath));
|
||||
|
||||
// Check that the patch file exists
|
||||
@ -353,6 +352,7 @@ public class ArbitraryDataMergeTests extends Common {
|
||||
assertFalse(Arrays.equals(patchDigest, file1Digest));
|
||||
|
||||
// Make sure that the patch file is different from file2
|
||||
// This assert fails, patchFile and file2 have the same contents so the digest will match
|
||||
assertFalse(Arrays.equals(patchDigest, file2Digest));
|
||||
|
||||
// Now merge the patch with the original path
|
||||
@ -384,7 +384,7 @@ public class ArbitraryDataMergeTests extends Common {
|
||||
BufferedWriter file1Writer = new BufferedWriter(new FileWriter(file1));
|
||||
String initialString = ArbitraryUtils.generateRandomString(110 * 1024);
|
||||
// Add a newline every 50 chars
|
||||
initialString = initialString.replaceAll("(.{50})", "$1\n");
|
||||
initialString = initialString.replaceAll("(.{50})", "$1" + System.lineSeparator());
|
||||
file1Writer.write(initialString);
|
||||
file1Writer.newLine();
|
||||
file1Writer.close();
|
||||
|
@ -27,6 +27,7 @@ import org.qortal.transaction.RegisterNameTransaction;
|
||||
import org.qortal.utils.Base58;
|
||||
import org.qortal.utils.NTP;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
@ -410,13 +411,13 @@ public class ArbitraryTransactionMetadataTests extends Common {
|
||||
assertEquals(3, arbitraryDataFile.getMetadata().getFiles().size());
|
||||
assertTrue(arbitraryDataFile.getMetadata().getFiles().contains("file.txt"));
|
||||
assertTrue(arbitraryDataFile.getMetadata().getFiles().contains("image1.jpg"));
|
||||
assertTrue(arbitraryDataFile.getMetadata().getFiles().contains("subdirectory/config.json"));
|
||||
assertTrue(arbitraryDataFile.getMetadata().getFiles().contains("subdirectory" + File.separator + "config.json"));
|
||||
|
||||
// Ensure the file list can be read back out again, when specified to be included
|
||||
ArbitraryResourceMetadata resourceMetadata = ArbitraryResourceMetadata.fromTransactionMetadata(arbitraryDataFile.getMetadata(), true);
|
||||
assertTrue(resourceMetadata.getFiles().contains("file.txt"));
|
||||
assertTrue(resourceMetadata.getFiles().contains("image1.jpg"));
|
||||
assertTrue(resourceMetadata.getFiles().contains("subdirectory/config.json"));
|
||||
assertTrue(resourceMetadata.getFiles().contains("subdirectory" + File.separator + "config.json"));
|
||||
|
||||
// Ensure it's not returned when specified to be excluded
|
||||
// The entire object will be null because there is no metadata
|
||||
|
@ -440,7 +440,7 @@ public class ArbitraryTransactionTests extends Common {
|
||||
|
||||
PrivateKeyAccount alice = Common.getTestAccount(repository, "alice");
|
||||
String publicKey58 = Base58.encode(alice.getPublicKey());
|
||||
String name = "TEST"; // Can be anything for this test
|
||||
String name = "TEST-testOnChainData"; // Can be anything for this test
|
||||
String identifier = null; // Not used for this test
|
||||
Service service = Service.ARBITRARY_DATA;
|
||||
int chunkSize = 1000;
|
||||
|
@ -6,6 +6,7 @@ import org.qortal.group.Group;
|
||||
import org.qortal.group.Group.ApprovalThreshold;
|
||||
import org.qortal.repository.DataException;
|
||||
import org.qortal.repository.Repository;
|
||||
import org.qortal.test.common.transaction.TestTransaction;
|
||||
import org.qortal.transaction.Transaction.ApprovalStatus;
|
||||
import org.qortal.utils.Amounts;
|
||||
|
||||
@ -14,9 +15,18 @@ public class GroupUtils {
|
||||
public static final int txGroupId = Group.NO_GROUP;
|
||||
public static final long fee = 1L * Amounts.MULTIPLIER;
|
||||
|
||||
public static int createGroup(Repository repository, String creatorAccountName, String groupName, boolean isOpen, ApprovalThreshold approvalThreshold,
|
||||
public static int createGroup(Repository repository, Object creatorAccountName, String groupName, boolean isOpen, ApprovalThreshold approvalThreshold,
|
||||
int minimumBlockDelay, int maximumBlockDelay) throws DataException {
|
||||
PrivateKeyAccount account = Common.getTestAccount(repository, creatorAccountName);
|
||||
|
||||
PrivateKeyAccount account;
|
||||
if (creatorAccountName instanceof java.lang.String) {
|
||||
account = Common.getTestAccount(repository, (String) creatorAccountName);
|
||||
}
|
||||
else if (creatorAccountName instanceof PrivateKeyAccount) {
|
||||
account = (PrivateKeyAccount) creatorAccountName;
|
||||
} else {
|
||||
account = null;
|
||||
}
|
||||
|
||||
byte[] reference = account.getLastReference();
|
||||
long timestamp = repository.getTransactionRepository().fromSignature(reference).getTimestamp() + 1;
|
||||
@ -30,16 +40,49 @@ public class GroupUtils {
|
||||
return repository.getGroupRepository().fromGroupName(groupName).getGroupId();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p> Simplified GroupCreation for Testing - less parameters required
|
||||
* </p>
|
||||
* @param repository The blockchain database
|
||||
* @param owner Who will own the group, type PrivateKeyAccount
|
||||
* @param groupName String representing the published name
|
||||
* @param isOpen Boolean to allow anyone to join
|
||||
* @return groupID as an integer
|
||||
* @throws DataException when error occurs
|
||||
* @since v4.71
|
||||
*/
|
||||
public static int createGroup(Repository repository, PrivateKeyAccount owner, String groupName, boolean isOpen) throws DataException {
|
||||
String description = groupName + " (description)";
|
||||
|
||||
Group.ApprovalThreshold approvalThreshold = Group.ApprovalThreshold.ONE;
|
||||
int minimumBlockDelay = 10;
|
||||
int maximumBlockDelay = 1440;
|
||||
|
||||
return createGroup(repository, owner, groupName, isOpen, approvalThreshold, minimumBlockDelay, maximumBlockDelay);
|
||||
} // End Simplified Group Creation
|
||||
|
||||
/**
|
||||
*
|
||||
* @param repository The block chain database
|
||||
* @param joinerAccount Account of the person joining the group
|
||||
* @param groupId Integer of the Group mapping
|
||||
* @throws DataException
|
||||
* @since v4.7.1
|
||||
*/
|
||||
public static void joinGroup(Repository repository, PrivateKeyAccount joinerAccount, int groupId) throws DataException {
|
||||
byte[] reference = joinerAccount.getLastReference();
|
||||
long timestamp = repository.getTransactionRepository().fromSignature(reference).getTimestamp() + 1;
|
||||
|
||||
BaseTransactionData baseTransactionData = new BaseTransactionData(timestamp, Group.NO_GROUP, reference, joinerAccount.getPublicKey(), GroupUtils.fee, null);
|
||||
TransactionData transactionData = new JoinGroupTransactionData(baseTransactionData, groupId);
|
||||
|
||||
TransactionUtils.signAndMint(repository, transactionData, joinerAccount);
|
||||
}
|
||||
|
||||
public static void joinGroup(Repository repository, String joinerAccountName, int groupId) throws DataException {
|
||||
PrivateKeyAccount account = Common.getTestAccount(repository, joinerAccountName);
|
||||
|
||||
byte[] reference = account.getLastReference();
|
||||
long timestamp = repository.getTransactionRepository().fromSignature(reference).getTimestamp() + 1;
|
||||
|
||||
BaseTransactionData baseTransactionData = new BaseTransactionData(timestamp, Group.NO_GROUP, reference, account.getPublicKey(), GroupUtils.fee, null);
|
||||
TransactionData transactionData = new JoinGroupTransactionData(baseTransactionData, groupId);
|
||||
|
||||
TransactionUtils.signAndMint(repository, transactionData, account);
|
||||
joinGroup(repository, account, groupId);
|
||||
}
|
||||
|
||||
public static void approveTransaction(Repository repository, String accountName, byte[] pendingSignature, boolean decision) throws DataException {
|
||||
|
@ -11,6 +11,7 @@ import org.qortal.repository.Repository;
|
||||
import org.qortal.repository.RepositoryManager;
|
||||
import org.qortal.test.common.BlockUtils;
|
||||
import org.qortal.test.common.Common;
|
||||
import org.qortal.test.common.GroupUtils;
|
||||
import org.qortal.test.common.TransactionUtils;
|
||||
import org.qortal.test.common.transaction.TestTransaction;
|
||||
import org.qortal.transaction.Transaction.ValidationResult;
|
||||
@ -78,7 +79,7 @@ public class AdminTests extends Common {
|
||||
int groupId = createGroup(repository, alice, "open-group", true);
|
||||
|
||||
// Bob to join
|
||||
joinGroup(repository, bob, groupId);
|
||||
GroupUtils.joinGroup(repository, bob, groupId);
|
||||
|
||||
// Promote Bob to admin
|
||||
addGroupAdmin(repository, alice, groupId, bob.getAddress());
|
||||
|
@ -5,15 +5,14 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.qortal.account.PrivateKeyAccount;
|
||||
import org.qortal.data.transaction.AddGroupAdminTransactionData;
|
||||
import org.qortal.data.transaction.CreateGroupTransactionData;
|
||||
import org.qortal.data.transaction.JoinGroupTransactionData;
|
||||
import org.qortal.data.transaction.RemoveGroupAdminTransactionData;
|
||||
import org.qortal.group.Group.ApprovalThreshold;
|
||||
import org.qortal.repository.DataException;
|
||||
import org.qortal.repository.Repository;
|
||||
import org.qortal.repository.RepositoryManager;
|
||||
import org.qortal.test.common.BlockUtils;
|
||||
import org.qortal.test.common.Common;
|
||||
import org.qortal.test.common.GroupUtils;
|
||||
import org.qortal.test.common.TransactionUtils;
|
||||
import org.qortal.test.common.transaction.TestTransaction;
|
||||
import org.qortal.transaction.Transaction.ValidationResult;
|
||||
@ -39,7 +38,7 @@ public class OwnerTests extends Common {
|
||||
PrivateKeyAccount bob = Common.getTestAccount(repository, "bob");
|
||||
|
||||
// Create group
|
||||
int groupId = createGroup(repository, alice, "open-group", true);
|
||||
int groupId = GroupUtils.createGroup(repository, alice, "open-group", true);
|
||||
|
||||
// Attempt to promote non-member
|
||||
ValidationResult result = addGroupAdmin(repository, alice, groupId, bob.getAddress());
|
||||
@ -83,7 +82,7 @@ public class OwnerTests extends Common {
|
||||
PrivateKeyAccount bob = Common.getTestAccount(repository, "bob");
|
||||
|
||||
// Create group
|
||||
int groupId = createGroup(repository, alice, "open-group", true);
|
||||
int groupId = GroupUtils.createGroup(repository, alice, "open-group", true);
|
||||
|
||||
// Attempt to demote non-member
|
||||
ValidationResult result = removeGroupAdmin(repository, alice, groupId, bob.getAddress());
|
||||
@ -133,19 +132,6 @@ public class OwnerTests extends Common {
|
||||
}
|
||||
}
|
||||
|
||||
private Integer createGroup(Repository repository, PrivateKeyAccount owner, String groupName, boolean isOpen) throws DataException {
|
||||
String description = groupName + " (description)";
|
||||
|
||||
ApprovalThreshold approvalThreshold = ApprovalThreshold.ONE;
|
||||
int minimumBlockDelay = 10;
|
||||
int maximumBlockDelay = 1440;
|
||||
|
||||
CreateGroupTransactionData transactionData = new CreateGroupTransactionData(TestTransaction.generateBase(owner), groupName, description, isOpen, approvalThreshold, minimumBlockDelay, maximumBlockDelay);
|
||||
TransactionUtils.signAndMint(repository, transactionData, owner);
|
||||
|
||||
return repository.getGroupRepository().fromGroupName(groupName).getGroupId();
|
||||
}
|
||||
|
||||
private ValidationResult joinGroup(Repository repository, PrivateKeyAccount joiner, int groupId) throws DataException {
|
||||
JoinGroupTransactionData transactionData = new JoinGroupTransactionData(TestTransaction.generateBase(joiner), groupId);
|
||||
ValidationResult result = TransactionUtils.signAndImport(repository, transactionData, joiner);
|
||||
|
@ -25,6 +25,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -98,7 +101,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -29,6 +29,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -101,7 +104,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -28,6 +28,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -101,7 +104,12 @@
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"penaltyFixHeight": 5
|
||||
"penaltyFixHeight": 5,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -103,7 +106,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -29,6 +29,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 2 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
@ -118,8 +126,12 @@
|
||||
{ "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": "CREATE_GROUP", "creatorPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupName": "MINTER", "description": "Minter 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": "UPDATE_GROUP", "ownerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupId": 2, "newOwner": "QdSnUy6sUiEnaN87dWmE92g1uQjrvPgrWG", "newDescription": "Minter group", "newIsOpen": true, "newApprovalThreshold": "PCT40", "minimumBlockDelay": 1, "maximumBlockDelay": 1440 },
|
||||
|
||||
{ "type": "JOIN_GROUP", "joinerPublicKey": "2tiMr5LTpaWCgbRvkPK8TFd7k63DyHJMMFFsz9uBf1ZP", "groupId": 2},
|
||||
|
||||
{ "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 },
|
||||
@ -134,6 +146,7 @@
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "level": 5 },
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "QaUpHNhT3Ygx6avRiKobuLdusppR5biXjL", "level": 5 },
|
||||
{ "type": "ACCOUNT_LEVEL", "target": "Qci5m9k4rcwe4ruKrZZQKka4FzUUMut3er", "level": 6 }
|
||||
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -30,6 +30,9 @@
|
||||
"blockRewardBatchStartHeight": 999999000,
|
||||
"blockRewardBatchSize": 10,
|
||||
"blockRewardBatchAccountsBlockCount": 3,
|
||||
"mintingGroupIds": [
|
||||
{ "height": 0, "ids": [ 1 ]}
|
||||
],
|
||||
"rewardsByHeight": [
|
||||
{ "height": 1, "reward": 100 },
|
||||
{ "height": 11, "reward": 10 },
|
||||
@ -102,7 +105,12 @@
|
||||
"onlyMintWithNameHeight": 9999999999990,
|
||||
"groupMemberCheckHeight": 9999999999999,
|
||||
"decreaseOnlineAccountsDifficultyTimestamp": 9999999999999,
|
||||
"removeOnlyMintWithNameHeight": 9999999999999
|
||||
"removeOnlyMintWithNameHeight": 9999999999999,
|
||||
"fixBatchRewardHeight": 9999999999999,
|
||||
"adminsReplaceFoundersHeight": 9999999999999,
|
||||
"ignoreLevelForRewardShareHeight": 9999999999999,
|
||||
"nullGroupMembershipHeight": 20,
|
||||
"adminQueryFixHeight": 9999999999999
|
||||
},
|
||||
"genesisInfo": {
|
||||
"version": 4,
|
||||
|
@ -16,5 +16,6 @@
|
||||
"listsPath": "lists-test",
|
||||
"storagePolicy": "FOLLOWED_OR_VIEWED",
|
||||
"maxStorageCapacity": 104857600,
|
||||
"arrrDefaultBirthday": 1900000
|
||||
"arrrDefaultBirthday": 1900000,
|
||||
"archivingPause": 5
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user