Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions mongo/mongoDbDrop.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
db.dropDatabase();
84 changes: 84 additions & 0 deletions mongo/mongoDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
(function prepareDbConfiguration() {
db.setProfilingLevel(1, 100); // log slow queries
})();

(function prepareDbCollections() {
function makeSparse(propertyName) {
return { partialFilterExpression: { [propertyName]: { $exists: true } } };
}

function addCommonTransactionIndexes(collection) {
collection.createIndex({ 'transaction.signerPublicKey': 1, _id: -1 });
collection.createIndex({ 'transaction.recipientAddress': 1, _id: -1 });
collection.createIndex({ 'meta.hash': 1 }, Object.assign({ unique: true }, makeSparse('meta.hash')));
collection.createIndex({ 'meta.addresses': 1 }, makeSparse('meta.addresses'));
collection.createIndex({ 'meta.aggregateId': 1 }, makeSparse('meta.aggregateId'));
}

function addTransactionCollection(collectionName) {
db.createCollection(collectionName);
addCommonTransactionIndexes(db[collectionName]);
db[collectionName].createIndex({ 'meta.aggregateHash': 1 }, makeSparse('meta.aggregateHash'));
}

db.createCollection('blocks');
db.blocks.createIndex({ 'block.signerPublicKey': 1 });
db.blocks.createIndex({ 'block.timestamp': -1 }, { unique: true });
db.blocks.createIndex({ 'block.height': -1 }, { unique: true });
db.blocks.createIndex({ 'block.type': 1, 'block.height': -1 }, { unique: true });
db.blocks.createIndex({ 'block.signerPublicKey': 1, 'block.height': -1 }, { unique: true });
db.blocks.createIndex({ 'block.beneficiaryAddress': 1, 'block.height': -1 }, { unique: true });

db.createCollection('finalizedBlocks');
db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1 });
db.finalizedBlocks.createIndex({ 'block.height': -1 });
db.finalizedBlocks.createIndex({ 'block.finalizationEpoch': -1, 'block.finalizationPoint': -1 }, { unique: true });

db.createCollection('transactions');
addCommonTransactionIndexes(db.transactions);
db.transactions.createIndex({ 'meta.height': -1 });
db.transactions.createIndex({ 'transaction.deadline': -1 });
db.transactions.createIndex({ 'transaction.cosignatures.signerPublicKey': 1 }, makeSparse('transaction.cosignatures.signerPublicKey'));
db.transactions.createIndex({ 'transaction.id': 1, 'transaction.type': 1 }, makeSparse('transaction.id'));

db.createCollection('transactionStatements');
db.transactionStatements.createIndex(
{ 'statement.height': 1, 'statement.source.primaryId': 1, 'statement.source.secondaryId': 1 },
{ unique: true });

['addressResolutionStatements', 'mosaicResolutionStatements'].forEach(collectionName => {
db.createCollection(collectionName);
db[collectionName].createIndex({ 'statement.height': 1, 'statement.unresolved': 1 }, { unique: true });
});

db.createCollection('accounts');
db.accounts.createIndex({ 'account.publicKey': 1 }); // cannot be unique because zeroed public keys are stored
db.accounts.createIndex({ 'account.address': 1 }, { unique: true });

['unconfirmedTransactions', 'partialTransactions'].forEach(addTransactionCollection);

db.createCollection('transactionStatuses', { capped: true, size: 53000000, max: 500000 });
db.transactionStatuses.createIndex({ 'status.hash': 1 }, { unique: true });
db.transactionStatuses.createIndex({ 'status.deadline': -1 });

db.adminCommand( { setFeatureCompatibilityVersion: '7.0', confirm: true } )
})();

(function preparePluginDbCollections() {
const pluginNames = [
'LockHash', 'LockSecret', 'Metadata', 'Mosaic', 'Multisig', 'Namespace', 'RestrictionAccount', 'RestrictionMosaic'
];
pluginNames.forEach(pluginName => {
print(`Loading ${pluginName}`);
load(`mongo${pluginName}DbPrepare.js`);
});
})();

(function printCollectionIndexes() {
db.getCollectionNames().forEach(collectionName => {
print(`===== ${collectionName} INDEXES =====`);
db[collectionName].getIndexes().forEach(index => {
printjson(index.key);
});
});
})();
5 changes: 5 additions & 0 deletions mongo/mongoLockHashDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(function prepareHashLockCollections() {
db.createCollection('hashLocks');
db.hashLocks.createIndex({ 'lock.hash': 1 }, { unique: true });
db.hashLocks.createIndex({ 'lock.ownerAddress': 1 });
})();
5 changes: 5 additions & 0 deletions mongo/mongoLockSecretDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(function prepareSecretLockCollections() {
db.createCollection('secretLocks');
db.secretLocks.createIndex({ 'lock.compositeHash': 1 }, { unique: true });
db.secretLocks.createIndex({ 'lock.ownerAddress': 1 });
})();
6 changes: 6 additions & 0 deletions mongo/mongoMetadataDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(function prepareMetadataCollections() {
db.createCollection('metadata');
db.metadata.createIndex({ 'metadataEntry.compositeHash': 1 }, { unique: true });
db.metadata.createIndex({ 'metadataEntry.sourceAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 });
db.metadata.createIndex({ 'metadataEntry.targetAddress': 1, 'metadataEntry.metadataType': 1, 'metadataEntry.scopedMetadataKey': 1 });
})();
5 changes: 5 additions & 0 deletions mongo/mongoMosaicDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(function prepareMosaicCollections() {
db.createCollection('mosaics');
db.mosaics.createIndex({ 'mosaic.id': 1 }, { unique: true });
db.mosaics.createIndex({ 'mosaic.ownerAddress': 1 });
})();
4 changes: 4 additions & 0 deletions mongo/mongoMultisigDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
(function prepareMultisigCollections() {
db.createCollection('multisigs');
db.multisigs.createIndex({ 'multisig.accountAddress': 1 }, { unique: true });
})();
8 changes: 8 additions & 0 deletions mongo/mongoNamespaceDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
(function prepareNamespaceCollections() {
db.createCollection('namespaces');
db.namespaces.createIndex({ 'namespace.level0': 1, 'meta.index': 1, 'namespace.depth': 1 });
db.namespaces.createIndex({ 'meta.latest': -1, 'meta.index': 1, 'namespace.level0': 1, 'namespace.depth': 1 });
db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level1': 1, 'namespace.depth': 1 });
db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.level2': 1, 'namespace.depth': 1 });
db.namespaces.createIndex({ 'meta.latest': -1, 'namespace.ownerAddress': 1 });
})();
4 changes: 4 additions & 0 deletions mongo/mongoRestrictionAccountDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
(function prepareRestrictionAccountCollections() {
db.createCollection('accountRestrictions');
db.accountRestrictions.createIndex({ 'accountRestrictions.address': 1 }, { unique: true });
})();
4 changes: 4 additions & 0 deletions mongo/mongoRestrictionMosaicDbPrepare.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
(function prepareRestrictionMosaicCollections() {
db.createCollection('mosaicRestrictions');
db.mosaicRestrictions.createIndex({ 'mosaicRestrictionEntry.compositeHash': 1 }, { unique: true });
})();
21 changes: 21 additions & 0 deletions resources/config-database.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[database]

databaseUri = mongodb://db:27017
databaseName = catapult
maxWriterThreads = 8
maxDropBatchSize = 10
writeTimeout = 10m

[plugins]

catapult.mongo.plugins.accountlink = true
catapult.mongo.plugins.aggregate = true
catapult.mongo.plugins.lockhash = true
catapult.mongo.plugins.locksecret = true
catapult.mongo.plugins.metadata = true
catapult.mongo.plugins.mosaic = true
catapult.mongo.plugins.multisig = true
catapult.mongo.plugins.namespace = true
catapult.mongo.plugins.restrictionaccount = true
catapult.mongo.plugins.restrictionmosaic = true
catapult.mongo.plugins.transfer = true
8 changes: 8 additions & 0 deletions resources/config-extensions-broker.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[extensions]

# addressextraction must be first because mongo and zeromq depend on extracted addresses
extension.addressextraction = true
extension.mongo = true
extension.zeromq = true

extension.hashcache = true
9 changes: 9 additions & 0 deletions resources/config-extensions-recovery.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[extensions]

# addressextraction must be first because mongo and zeromq depend on extracted addresses
extension.addressextraction = false
extension.mongo = false
extension.zeromq = false

extension.filespooling = false
extension.hashcache = true
27 changes: 27 additions & 0 deletions resources/config-extensions-server.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[extensions]

# api extensions
extension.filespooling = false
extension.partialtransaction = false

# addressextraction must be first because mongo and zeromq depend on extracted addresses
extension.addressextraction = false
extension.mongo = false
extension.zeromq = false

# p2p extensions
extension.harvesting = true
extension.syncsource = true

# common extensions
extension.diagnostics = true
extension.finalization = true
extension.hashcache = true
extension.networkheight = false
extension.nodediscovery = true
extension.packetserver = true
extension.pluginhandlers = true
extension.sync = true
extension.timesync = true
extension.transactionsink = true
extension.unbondedpruning = true
83 changes: 83 additions & 0 deletions resources/config-finalization.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
[finalization]

enableVoting = false
enableRevoteOnBoot = false

size = 10'000
threshold = 6'700
stepDuration = 5m

shortLivedCacheMessageDuration = 10m
messageSynchronizationMaxResponseSize = 20MB

maxHashesPerPoint = 256
prevoteBlocksMultiple = 4

unfinalizedBlocksDuration = 10m

treasuryReissuanceEpoch = 481

[treasury_reissuance_epoch_ineligible_voter_addresses]

ND6667LJBJJ6UMJSZKN2BLHQCS3WNZ3W4UGCFKI = true
NCKAC225JEFJTB3EO64MIVYF5D7YGZM2ZFXRJNI = true
NACXOOKIDID7S75S4FFSC7KBBIBHOBUXB5VSE7A = true
NCVQPB2LZ6UCYKGYJAMCC7V4JGXA35BBY44BMHY = true
NDSQX6J2QALD2XTU5NQ4FWA2MMEFKBOBEB2BIOQ = true
NDLFVQ3C25P5VO2VWP6AMHPIJT6FZYTXNJD4ZAY = true
NCXX3KEIEZ3NABMUU45GM7X7BLMPMQHFOZMMF4Q = true
NDF4ZCXFKIU5DSJEVBOOI2BDZMDKJTGJVBD6JRY = true
NCTTMDTZUUQVN4OKTSF3FTEHJQL2QOGAV25MDCA = true
NDLORKVADZSXTIVAA2FYLDMM7I32AIWE7HDWGUQ = true
NCQADXOA7ZHLUW2567H33HNNEKCOCN2OJ53PXIQ = true
NDX4GP6OL32EOSGXSB5FTGKXDJZP4D535ZZYDFI = true
NCE3EP762222D5D2UAF6KIFL7XZ7U4TPFWBYVHA = true
NDRLHNV4W7W2M527QOIP35OI3HOMAGTCJDPFDEQ = true
NDNGH7WJHSMULMCKYE333V6WU4CQDWXZIJK2VCY = true
NB5NIEQF7FM7LLSFASHOQF4X3F6IPDYSIGR3UVA = true
NDC3U2UERNMRYFQA45XC74TEEETTZPRUVWKFPAY = true
NBNCW3DUUHGBCVJ53LYSYYNMKJ52TLR33C5U53A = true
NCAXT7RH6SUPXEU75EIPAPF7DM4VWUBC5AW2L4Q = true
NALOQMBU45WOLZ4BCBYZX3N2Y2VSYQFOXGAO34A = true
NA2KVKEQDZZMM3NGXYVBHZ46JHM46UWIX3KJ4AY = true
NBI2NEBVAD45WWV44H3A53AQ5675Z4G3ZDGDYLI = true
NB5ORUTTH2QYHEVTDBB5WPQI4US22FNMODFRK5Y = true
NDMR4GMUWGMODWY4FF2VZ3CEC2F56HTD3T6EJYY = true
NCBLL63WUAL7FBNPZQISGJR4WZNB7RVWCWG25MI = true
NBGGUKW3GEUFHKTO4DYSGDTHIVPKAME3T2XSCGY = true
NCASTBFHXMHGQB2UJVUDSW7ZI4N2FDW54OTSHKQ = true
ND726EB3B2VG77J3EEQSGNGUX3SS6L2IEBS7PIY = true
ND2MRMODKMLCFJWPFJ4MDFI76R7FLZVKIIVKD3A = true
NDG6ORUW4PVWVQJRQ5AXADQBUQVL3KBX7AW7MUY = true
NBQS3VKGOJ3YNIABN4Y4SFUDBDQHARUIVS6IMGQ = true
NCC3VKV3V2HCAP2KTXJUWSXCJ3B6U32EKR6VU5I = true
NBUW4OTD42VHELNPCLPQCUHNBHR47PQKLP2EKXA = true
NDBKLXZWYBMUUTNRRZ5ESRAJYMQIMHGLGAYLTGY = true
NABH3A5VDLYAVA73OV246JTVMAIPD2WEMAQL27I = true
NCVG74MGUGR3PLVBWVNNACD6R37JA4RCQMXY3DY = true
NDQLBLKXVOK2YS5G7J3AYYKTNW3S3RRK6RQONAQ = true
NDTNPG2NUA3MPVDXHLC6D5PSKM4JLLTMQJ5HEDY = true
ND4MLYCECHPACYSDDQUFMPXONSIQLPAWNVBWSIA = true
NCNRS6KDPHV4MNMXOEGYD6LNRBMWUR7NT4SZI7I = true
NBRENIWJUCSUU7RJ5S2DEJVXAOJOTZZDKEFOC3I = true
NA7YZPY222RVYQMUM65ZSVFSPAHL55UWO3S35FY = true
NCVR72OUOHVGTVLYBKI7PLUDTIAYPRUWPMJJP3Q = true
NDE57ICE4UOAPUV3E4CYU3PBA2X4ABUGRGKDFBA = true
NBBBCIKJV45U7PNYTNXETH2UFZLJ3C6TJKLJDQQ = true
NCRLDB2O2QDPU57PEG3D3AIFSGPGCZU7VVTKBUY = true
NC7QENF6OO2FRYV7Q4B5Q74LRSC54Y3YNYN5O3Y = true
NAL4XHZU6MANNNFQI4Z2WNMU3KRI2YW2MRRMHLI = true
NC5CFRDWEZVCMGQ4Y77OEFSQLMQ3V4EL7JERY2A = true
NAIPUZBSDXZIHQKKILAFT3F43IQPS4LOZCH2H4Q = true
ND6ZNSQG3I7VWLWSJ3DTYVPEZSJRGSEERW2F7DI = true
NC54KVIISZCMMB3ABAMV6NQ6DAUIYYVKQ23S73Q = true
NBNRFJSGE53UNHBGZIHYZXPG7SHLQISJN5REGIY = true
NCFFJV3VTAK6BJZNV6ZRUZKUJPOWST6MYFAAK5A = true
NAAZKYH4V6SARDIJRGFXYEZIHVRWY7R2T62QFYA = true
NAGCLXJZHZSBM5ILN4LQBDKU4NYVHB6ZLGRTKJI = true
NBGEJ36QK43DR4MYB6XFUFLSVFLULX3HBVNRCVY = true
NCGCVCURBA2GCKPEGEA2Q6HKFEHYITKUNWRLMEA = true
NA5ZUGHBUUHO63E5OQQND7CYK7UZ3HVQONR2O6Y = true
NC2GXL6FQXZY3FXZAYJLBDQHBKSANZLGP4PL7VA = true
NB3WMVRI4RM3O3NUSWBZM7U4EZMKADSOFDPPJRQ = true
NCFH35TMUJ5QJL6LTBYRBO7ERMM4NIBH7TL6TFY = true
9 changes: 9 additions & 0 deletions resources/config-harvesting.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[harvesting]

harvesterSigningPrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
harvesterVrfPrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

enableAutoHarvesting = false
maxUnlockedAccounts = 10
delegatePrioritizationPolicy = Importance
beneficiaryAddress =
Loading