271 lines
9.3 KiB
PHP
Executable File
271 lines
9.3 KiB
PHP
Executable File
<?php
|
|
|
|
// when db schema modifications are done, this function is run.
|
|
$dbversion = intval($_config['dbversion']);
|
|
|
|
$db->beginTransaction();
|
|
if ($dbversion == 0) {
|
|
$db->run("
|
|
CREATE TABLE `accounts` (
|
|
`id` varbinary(128) NOT NULL,
|
|
`public_key` varbinary(1024) NOT NULL,
|
|
`block` varbinary(128) NOT NULL,
|
|
`balance` decimal(20,8) NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;");
|
|
|
|
$db->run("CREATE TABLE `blocks` (
|
|
`id` varbinary(128) NOT NULL,
|
|
`generator` varbinary(128) NOT NULL,
|
|
`height` int(11) NOT NULL,
|
|
`date` int(11) NOT NULL,
|
|
`nonce` varbinary(128) NOT NULL,
|
|
`signature` varbinary(256) NOT NULL,
|
|
`difficulty` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
|
`argon` varbinary(128) NOT NULL,
|
|
`transactions` INT NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
|
|
|
$db->run("CREATE TABLE `config` (
|
|
`cfg` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
|
`val` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
|
|
|
|
|
$db->run("INSERT INTO `config` (`cfg`, `val`) VALUES
|
|
('hostname', '');");
|
|
|
|
$db->run("INSERT INTO `config` (`cfg`, `val`) VALUES
|
|
('dbversion', '1');");
|
|
|
|
$db->run("CREATE TABLE `mempool` (
|
|
`id` varbinary(128) NOT NULL,
|
|
`height` int(11) NOT NULL,
|
|
`src` varbinary(128) NOT NULL,
|
|
`dst` varbinary(128) NOT NULL,
|
|
`val` decimal(20,8) NOT NULL,
|
|
`fee` decimal(20,8) NOT NULL,
|
|
`signature` varbinary(256) NOT NULL,
|
|
`version` tinyint(4) NOT NULL,
|
|
`message` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '',
|
|
`public_key` varbinary(1024) NOT NULL,
|
|
`date` bigint(20) NOT NULL,
|
|
`peer` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
|
|
|
$db->run("CREATE TABLE `peers` (
|
|
`id` int(11) NOT NULL,
|
|
`hostname` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
|
`blacklisted` int(11) NOT NULL DEFAULT 0,
|
|
`ping` int(11) NOT NULL,
|
|
`reserve` tinyint(4) NOT NULL DEFAULT 1,
|
|
`ip` varchar(45) NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
|
|
|
|
|
$db->run("CREATE TABLE `transactions` (
|
|
`id` varbinary(128) NOT NULL,
|
|
`block` varbinary(128) NOT NULL,
|
|
`height` int(11) NOT NULL,
|
|
`dst` varbinary(128) NOT NULL,
|
|
`val` decimal(20,8) NOT NULL,
|
|
`fee` decimal(20,8) NOT NULL,
|
|
`signature` varbinary(256) NOT NULL,
|
|
`version` tinyint(4) NOT NULL,
|
|
`message` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '',
|
|
`date` int(11) NOT NULL,
|
|
`public_key` varbinary(1024) NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
|
|
|
|
$db->run("ALTER TABLE `peers`
|
|
ADD PRIMARY KEY (`id`);");
|
|
$db->run("ALTER TABLE `peers`
|
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;");
|
|
|
|
$db->run("ALTER TABLE `accounts`
|
|
ADD PRIMARY KEY (`id`),
|
|
ADD KEY `accounts` (`block`);");
|
|
|
|
$db->run("ALTER TABLE `blocks`
|
|
ADD PRIMARY KEY (`id`),
|
|
ADD UNIQUE KEY `height` (`height`);");
|
|
|
|
$db->run("ALTER TABLE `config` ADD PRIMARY KEY (`cfg`);");
|
|
|
|
$db->run("ALTER TABLE `mempool`
|
|
ADD PRIMARY KEY (`id`),
|
|
ADD KEY `height` (`height`);");
|
|
|
|
$db->run("ALTER TABLE `peers`
|
|
ADD UNIQUE KEY `hostname` (`hostname`),
|
|
ADD UNIQUE KEY `ip` (`ip`),
|
|
ADD KEY `blacklisted` (`blacklisted`),
|
|
ADD KEY `ping` (`ping`),
|
|
ADD KEY `reserve` (`reserve`);");
|
|
|
|
$db->run("ALTER TABLE `transactions`
|
|
ADD PRIMARY KEY (`id`),
|
|
ADD KEY `block_id` (`block`);");
|
|
|
|
$db->run("ALTER TABLE `accounts`
|
|
ADD CONSTRAINT `accounts` FOREIGN KEY (`block`) REFERENCES `blocks` (`id`) ON DELETE CASCADE;");
|
|
|
|
$db->run("ALTER TABLE `transactions`
|
|
ADD CONSTRAINT `block_id` FOREIGN KEY (`block`) REFERENCES `blocks` (`id`) ON DELETE CASCADE;");
|
|
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 1) {
|
|
$db->run("INSERT INTO `config` (`cfg`, `val`) VALUES ('sanity_last', '0');");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 2) {
|
|
$db->run("INSERT INTO `config` (`cfg`, `val`) VALUES ('sanity_sync', '0');");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 3) {
|
|
$dbversion++;
|
|
}
|
|
|
|
if ($dbversion == 4) {
|
|
$db->run("ALTER TABLE `mempool` ADD INDEX(`src`);");
|
|
$db->run("ALTER TABLE `mempool` ADD INDEX(`peer`); ");
|
|
$db->run("ALTER TABLE `mempool` ADD INDEX(`val`); ");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 5) {
|
|
$db->run("ALTER TABLE `peers` ADD `fails` TINYINT NOT NULL DEFAULT '0' AFTER `ip`; ");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 6) {
|
|
$db->run("ALTER TABLE `peers` ADD `stuckfail` TINYINT(4) NOT NULL DEFAULT '0' AFTER `fails`, ADD INDEX (`stuckfail`); ");
|
|
$db->run("ALTER TABLE `accounts` ADD `alias` VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL AFTER `balance`; ");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 7) {
|
|
$db->run("ALTER TABLE `accounts` ADD INDEX(`alias`); ");
|
|
$db->run("ALTER TABLE `transactions` ADD KEY `dst` (`dst`), ADD KEY `height` (`height`), ADD KEY `public_key` (`public_key`);");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 8) {
|
|
$db->run("CREATE TABLE `masternode` (
|
|
`public_key` varchar(128) COLLATE utf8mb4_bin NOT NULL,
|
|
`height` int(11) NOT NULL,
|
|
`ip` varchar(16) COLLATE utf8mb4_bin NOT NULL,
|
|
`last_won` int(11) NOT NULL DEFAULT '0',
|
|
`blacklist` int(11) NOT NULL DEFAULT '0',
|
|
`fails` int(11) NOT NULL DEFAULT '0',
|
|
`status` tinyint(4) NOT NULL DEFAULT '1'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;");
|
|
|
|
$db->run("ALTER TABLE `masternode`
|
|
ADD PRIMARY KEY (`public_key`),
|
|
ADD KEY `last_won` (`last_won`),
|
|
ADD KEY `status` (`status`),
|
|
ADD KEY `blacklist` (`blacklist`),
|
|
ADD KEY `height` (`height`);");
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 9) {
|
|
//dev only
|
|
$dbversion++;
|
|
}
|
|
if ($dbversion == 10) {
|
|
//assets system
|
|
$db->run("
|
|
CREATE TABLE `assets` (
|
|
`id` varbinary(128) NOT NULL,
|
|
`max_supply` bigint(18) NOT NULL DEFAULT '0',
|
|
`tradable` tinyint(1) NOT NULL DEFAULT '1',
|
|
`price` decimal(20,8) NOT NULL DEFAULT '0.00000000',
|
|
`dividend_only` tinyint(1) NOT NULL DEFAULT '0',
|
|
`auto_dividend` tinyint(1) NOT NULL DEFAULT '0',
|
|
`allow_bid` tinyint(1) NOT NULL DEFAULT '1',
|
|
`height` int(11) NOT NULL DEFAULT '0'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
|
");
|
|
$db->run("
|
|
ALTER TABLE `assets`
|
|
ADD PRIMARY KEY (`id`)
|
|
");
|
|
$db->run("
|
|
CREATE TABLE `assets_market` (
|
|
`id` varchar(128) COLLATE utf8mb4_bin NOT NULL,
|
|
`account` varbinary(128) NOT NULL,
|
|
`asset` varbinary(128) NOT NULL,
|
|
`price` decimal(20,8) NOT NULL,
|
|
`date` int(11) NOT NULL,
|
|
`status` tinyint(1) NOT NULL DEFAULT '0',
|
|
`type` enum('bid','ask') COLLATE utf8mb4_bin NOT NULL DEFAULT 'bid',
|
|
`val` bigint(18) NOT NULL,
|
|
`val_done` bigint(18) NOT NULL DEFAULT '0',
|
|
`cancelable` tinyint(1) NOT NULL DEFAULT '1'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
|
");
|
|
$db->run("
|
|
ALTER TABLE `assets_market`
|
|
ADD PRIMARY KEY (`id`);
|
|
");
|
|
$db->run("CREATE TABLE `assets_balance` (
|
|
`account` varbinary(128) NOT NULL,
|
|
`asset` varbinary(128) NOT NULL,
|
|
`balance` bigint(128) NOT NULL DEFAULT '0'
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|
|
");
|
|
|
|
$db->run("
|
|
ALTER TABLE `assets_balance`
|
|
ADD PRIMARY KEY (`account`,`asset`);
|
|
");
|
|
|
|
$dbversion++;
|
|
}
|
|
|
|
if ($dbversion == 11) {
|
|
$db->run("ALTER TABLE `transactions` ADD INDEX(`version`); ");
|
|
$db->run("ALTER TABLE `transactions` ADD INDEX(`message`); ");
|
|
$db->run("
|
|
CREATE TABLE `logs` (
|
|
`id` int(11) NOT NULL,
|
|
`transaction` varbinary(128) NULL DEFAULT NULL,
|
|
`block` VARBINARY(128) NULL DEFAULT NULL,
|
|
`json` text DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;");
|
|
$db->run("ALTER TABLE `logs`
|
|
ADD PRIMARY KEY (`id`),
|
|
ADD INDEX(`transaction`),
|
|
ADD INDEX(`block`);");
|
|
$db->run("ALTER TABLE `logs` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;");
|
|
|
|
$db->run("ALTER TABLE `masternode` ADD `vote_key` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL AFTER `status`, ADD INDEX(`vote_key`);");
|
|
$db->run("ALTER TABLE `masternode` ADD `cold_last_won` INT NOT NULL DEFAULT '0' AFTER `vote_key`, ADD INDEX(`cold_last_won`); ");
|
|
$db->run("ALTER TABLE `masternode` ADD `voted` TINYINT NOT NULL DEFAULT '0' AFTER `cold_last_won`, ADD INDEX (`voted`); ");
|
|
|
|
|
|
|
|
$db->run("CREATE TABLE `votes` (
|
|
`id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
|
`nfo` varchar(64) NOT NULL,
|
|
`val` int(11) NOT NULL DEFAULT 0
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;");
|
|
|
|
|
|
|
|
$db->run("INSERT INTO `votes` (`id`, `nfo`, `val`) VALUES
|
|
('coldstacking', 'Enable cold stacking for inactive masternodes', 1),
|
|
('emission30', 'Emission reduction by 30 percent', 1),
|
|
('endless10reward', 'Minimum reward to be 10 aro forever', 0),
|
|
('masternodereward50', 'Masternode reward to be 50 percent of the block reward', 1);");
|
|
|
|
$db->run("ALTER TABLE `votes` ADD PRIMARY KEY (`id`);");
|
|
|
|
$dbversion++;
|
|
}
|
|
|
|
|
|
|
|
// update the db version to the latest one
|
|
if ($dbversion != $_config['dbversion']) {
|
|
$db->run("UPDATE config SET val=:val WHERE cfg='dbversion'", [":val" => $dbversion]);
|
|
}
|
|
$db->commit();
|