2018-12-17 13:28:37 +00:00
|
|
|
{
|
2019-09-13 14:21:04 +01:00
|
|
|
"maxBalance": "10000000",
|
2018-12-17 13:28:37 +00:00
|
|
|
"blockDifficultyInterval": 10,
|
|
|
|
"minBlockTime": 60,
|
|
|
|
"maxBlockTime": 300,
|
NTP and performance changes + fixes.
New NTP class now runs as a simplistic NTP client, repeatedly polling
several NTP servers and maintaining a more accurate time independent
of operating system.
Several occurrences of System.currentTimeMillis() replaced with NTP.getTime()
particularly where block/transaction/networking is involved.
GET /admin/info now includes "currentTimestamp" as reported from NTP.
Added support for block timestamps determined by generator, instead of
supplied by clock. (BlockChain.newBlockTimestampHeight - not yet activated).
Incorrect timestamps will produce a TIMESTAMP_INCORRECT Block.ValidationResult.
Block.calcMinimumTimestamp repurposed as Block.calcTimestamp for above.
Block timestamps are now allowed to be max 2000ms in the future,
was previously max 500ms.
Block generation prohibited until initial NTP sync.
Instead of deleting INVALID unconfirmed transactions in BlockGenerator,
Controller now deletes EXPIRED unconfirmed transactions every so often.
This also fixes persistent expired unconfirmed transactions on nodes
that do not generate blocks, as BlockGenerator.deleteInvalidTransactions()
was never reached.
Abbreviated block sigs added to log entries declaring a new block is generated
in BlockGenerator.
Controller checks for NTP sync much faster during start-up and SysTray's
tooltip text starts as "Synchronizing clock" until NTP sync occurs.
After NTP sync, Controller logs NTP offset every so often (currently every 5 mins).
When considering synchronizing, Controller skips peers that have the same block sig
as last time when synchronization resulted in no action, e.g. INFERIOR_CHAIN,
NOTHING_TO_DO and also OK. OK is included as another sync attempt would result in
NOTHING_TO_DO.
Previously this skipping check only happened after prior INFERIOR_CHAIN.
During inbound peer handshaking, if we receive a peer ID that matches an existing inbound
peer then send peer ID of all zeros, then close connection.
Remote end should detect this and cleanly close connection instead of waiting for handshake timeout.
Randomly generated peer IDs have lowest bit set to avoid all zeros.
Might need further work.
Networking doesn't connect, or accept, until NTP has synced.
Transaction validation can fail with CLOCK_NOT_SYNCED if NTP not synced.
2019-07-31 16:08:22 +01:00
|
|
|
"blockTimestampMargin": 2000,
|
2018-12-17 13:28:37 +00:00
|
|
|
"maxBytesPerUnitFee": 1024,
|
|
|
|
"unitFee": "1.0",
|
2019-09-13 14:21:04 +01:00
|
|
|
"useBrokenMD160ForAddresses": false,
|
2019-03-04 11:41:30 +00:00
|
|
|
"requireGroupForApproval": false,
|
|
|
|
"defaultGroupId": 0,
|
2019-09-13 14:21:04 +01:00
|
|
|
"oneNamePerAccount": true,
|
|
|
|
"maxProxyRelationships": 20,
|
|
|
|
"onlineAccountSignaturesMinLifetime": 2592000000,
|
|
|
|
"onlineAccountSignaturesMaxLifetime": 3196800000,
|
2019-03-04 11:41:30 +00:00
|
|
|
"genesisInfo": {
|
2019-09-13 14:21:04 +01:00
|
|
|
"version": 4,
|
More work on online accounts / blocks
Block data now includes number of online accounts, as encoded online account indexes can't be
validated by ConciseSet it seems.
Corresponding changes to repository, transformer, block validation, data object, block summaries...
Block timestamps are now calculated using parent block data and generator's public key,
instead of old qora1 generating balance code.
Generators are valid to forge if they have forging flag enabled. This will probably change
to an account-level check in the near future.
Added trimming of old online accounts signatures from blocks.
Tidied up SysTray/BlockGenerator generation enabled/possible flag.
Although we perform online accounts tasks (currently) every 10 seconds,
only broadcast our online accounts every 60 seconds.
In Controller.main(), if args are present then use first as a filename to
settings JSON file (overriding the default filename).
Still to do: change Block/BlockChain/Synchronizer to prefer blocks with more online accounts,
failing that use generator nearest 'ideal', etc.
2019-09-18 14:49:47 +01:00
|
|
|
"timestamp": "1568720000000",
|
2019-09-13 14:21:04 +01:00
|
|
|
"generatingBalance": "100000",
|
2018-12-17 13:28:37 +00:00
|
|
|
"transactions": [
|
2019-09-13 14:21:04 +01:00
|
|
|
{ "type": "ISSUE_ASSET", "owner": "QUwGVHPPxJNJ2dq95abQNe79EyBN2K26zM", "assetName": "QORT", "description": "QORTAL coin", "quantity": 10000000, "isDivisible": true, "fee": 0, "reference": "28u54WRcMfGujtQMZ9dNKFXVqucY7XfPihXAqPFsnx853NPUwfDJy1sMH5boCkahFgjUNYqc5fkduxdBhQTKgUsC", "data": "{}" },
|
|
|
|
{ "type": "GENESIS", "recipient": "QcatTpaU1UneBs3fVHo8QN6mUmuceRVzFY", "amount": "1000000" },
|
|
|
|
{ "type": "GENESIS", "recipient": "QcatoCyyp7dVfMtJ92sgUUPDoBJevaemRX", "amount": "1000000" },
|
|
|
|
{ "type": "GENESIS", "recipient": "QTiga19sttbf6CLQLT83mhCSWEaCvjk8th", "amount": "1000000" },
|
|
|
|
{ "type": "GENESIS", "recipient": "QcrowX39FuycKvMFFBsakyd5HSxe7bxFsn", "amount": "1000000" },
|
|
|
|
{ "type": "ACCOUNT_FLAGS", "target": "QcatTpaU1UneBs3fVHo8QN6mUmuceRVzFY", "andMask": -1, "orMask": 1, "xorMask": 0 },
|
|
|
|
{ "type": "ACCOUNT_FLAGS", "target": "QcatoCyyp7dVfMtJ92sgUUPDoBJevaemRX", "andMask": -1, "orMask": 1, "xorMask": 0 },
|
|
|
|
{ "type": "ACCOUNT_FLAGS", "target": "QTiga19sttbf6CLQLT83mhCSWEaCvjk8th", "andMask": -1, "orMask": 1, "xorMask": 0 },
|
|
|
|
{ "type": "ACCOUNT_FLAGS", "target": "QcrowX39FuycKvMFFBsakyd5HSxe7bxFsn", "andMask": -1, "orMask": 1, "xorMask": 0 },
|
|
|
|
{ "type": "ACCOUNT_LEVEL", "target": "QcatTpaU1UneBs3fVHo8QN6mUmuceRVzFY", "level": 8 },
|
|
|
|
{ "type": "ACCOUNT_LEVEL", "target": "QcatoCyyp7dVfMtJ92sgUUPDoBJevaemRX", "level": 3 },
|
|
|
|
{ "type": "ACCOUNT_LEVEL", "target": "QTiga19sttbf6CLQLT83mhCSWEaCvjk8th", "level": 10 },
|
|
|
|
{ "type": "ACCOUNT_LEVEL", "target": "QcrowX39FuycKvMFFBsakyd5HSxe7bxFsn", "level": 10 },
|
|
|
|
{ "type": "CREATE_GROUP", "creatorPublicKey": "6rNn9b3pYRrG9UKqzMWYZ9qa8F3Zgv2mVWrULGHUusb", "owner": "QcatTpaU1UneBs3fVHo8QN6mUmuceRVzFY", "groupName": "dev-group", "description": "developer group", "isOpen": false, "approvalThreshold": "PCT60", "minimumBlockDelay": 0, "maximumBlockDelay": 1440 },
|
|
|
|
{ "type": "CREATE_GROUP", "creatorPublicKey": "JBNBQQDzZsm5do1BrwWAp53Ps4KYJVt749EGpCf7ofte", "owner": "QTiga19sttbf6CLQLT83mhCSWEaCvjk8th", "groupName": "Tiga", "description": "Tiga's group", "isOpen": true, "approvalThreshold": "PCT20", "minimumBlockDelay": 120, "maximumBlockDelay": 2880 },
|
|
|
|
{ "type": "PROXY_FORGING", "forgerPublicKey": "6rNn9b3pYRrG9UKqzMWYZ9qa8F3Zgv2mVWrULGHUusb", "recipient": "QcatTpaU1UneBs3fVHo8QN6mUmuceRVzFY", "proxyPublicKey": "8X3w1521UNnnonieugAxhfbfvqoRpwPXJrwGQZb5JjQ3", "share": 100 }
|
2018-12-17 13:28:37 +00:00
|
|
|
]
|
|
|
|
},
|
2019-05-14 11:21:40 +01:00
|
|
|
"rewardsByHeight": [
|
2019-09-13 14:21:04 +01:00
|
|
|
{ "height": 1, "reward": 0 },
|
|
|
|
{ "height": 100, "reward": 100 },
|
|
|
|
{ "height": 200, "reward": 20 },
|
|
|
|
{ "height": 1000, "reward": 1 },
|
|
|
|
{ "height": 2000, "reward": 0 }
|
2019-05-14 11:21:40 +01:00
|
|
|
],
|
|
|
|
"forgingTiers": [
|
2019-09-13 14:21:04 +01:00
|
|
|
{ "minBlocks": 50, "maxSubAccounts": 5 },
|
|
|
|
{ "minBlocks": 50, "maxSubAccounts": 1 },
|
2019-05-14 11:21:40 +01:00
|
|
|
{ "minBlocks": 0, "maxSubAccounts": 0 }
|
|
|
|
],
|
More work on online accounts / blocks
Block data now includes number of online accounts, as encoded online account indexes can't be
validated by ConciseSet it seems.
Corresponding changes to repository, transformer, block validation, data object, block summaries...
Block timestamps are now calculated using parent block data and generator's public key,
instead of old qora1 generating balance code.
Generators are valid to forge if they have forging flag enabled. This will probably change
to an account-level check in the near future.
Added trimming of old online accounts signatures from blocks.
Tidied up SysTray/BlockGenerator generation enabled/possible flag.
Although we perform online accounts tasks (currently) every 10 seconds,
only broadcast our online accounts every 60 seconds.
In Controller.main(), if args are present then use first as a filename to
settings JSON file (overriding the default filename).
Still to do: change Block/BlockChain/Synchronizer to prefer blocks with more online accounts,
failing that use generator nearest 'ideal', etc.
2019-09-18 14:49:47 +01:00
|
|
|
"blockTimingsByHeight": [
|
|
|
|
{ "height": 1, "target": 60000, "deviation": 30000, "power": 0.2 }
|
|
|
|
],
|
2018-12-17 13:28:37 +00:00
|
|
|
"featureTriggers": {
|
2019-09-13 14:21:04 +01:00
|
|
|
"messageHeight": 0,
|
|
|
|
"atHeight": 0,
|
|
|
|
"newBlockDistanceHeight": 0,
|
|
|
|
"newBlockTimingHeight": 0,
|
|
|
|
"newBlockTimestampHeight": 0,
|
2019-03-04 11:41:30 +00:00
|
|
|
"assetsTimestamp": 0,
|
2019-09-13 14:21:04 +01:00
|
|
|
"votingTimestamp": 0,
|
|
|
|
"arbitraryTimestamp": 0,
|
|
|
|
"powfixTimestamp": 0,
|
|
|
|
"v2Timestamp": 0,
|
|
|
|
"newAssetPricingTimestamp": 0,
|
|
|
|
"groupApprovalTimestamp": 0
|
2018-12-17 13:28:37 +00:00
|
|
|
}
|
|
|
|
}
|