diff --git a/args/schema.sql b/args/schema.sql new file mode 100644 index 0000000..84188ce --- /dev/null +++ b/args/schema.sql @@ -0,0 +1,255 @@ +/* Blockchain Data */ + +CREATE TABLE LastTx( + floID CHAR(34) NOT NULL, + txid VARCHAR(128), + PRIMARY KEY(floID) +); + +CREATE TABLE NodeList( + floID CHAR(34) NOT NULL, + uri TINYTEXT, + PRIMARY KEY(floID) +); + +CREATE TABLE AssetList ( + asset VARCHAR(64) NOT NULL, + isTradeable BOOLEAN NOT NULL, + PRIMARY KEY(asset) +); + +/* User Data */ + +CREATE TABLE UserSession ( + id INT NOT NULL AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + proxyKey CHAR(66) NOT NULL, + session_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + KEY (id), + PRIMARY KEY(floID) +); + +CREATE TABLE UserBalance ( + id INT NOT NULL AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + asset VARCHAR(64) NOT NULL, + quantity DECIMAL(16, 8) NOT NULL DEFAULT 0, + PRIMARY KEY(floID, asset), + KEY(id) +); + +/* User Requests */ + +CREATE TABLE RequestLog( + id INT NOT NULL AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + request TEXT NOT NULL, + sign VARCHAR(160) NOT NULL, + proxy BOOLEAN NOT NULL, + request_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(id), + UNIQUE (sign) +); + +CREATE TABLE SellOrder ( + id INT NOT NULL AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + asset VARCHAR(64) NOT NULL, + quantity DECIMAL(16, 8) NOT NULL, + price DECIMAL(16, 8) NOT NULL, + time_placed TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(id), + FOREIGN KEY (asset) REFERENCES AssetList(asset) +); + +CREATE TABLE BuyOrder ( + id INT NOT NULL AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + asset VARCHAR(64) NOT NULL, + quantity DECIMAL(16, 8) NOT NULL, + maxPrice DECIMAL(16, 8) NOT NULL, + time_placed TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(id), + FOREIGN KEY (asset) REFERENCES AssetList(asset) +); + +CREATE TABLE VaultTransactions ( + id INT NOT NULL AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + mode TINYINT NOT NULL, + asset_type TINYINT NOT NULL, + asset VARCHAR(32), + amount DECIMAL(16, 8), + txid VARCHAR(128), + locktime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + r_status TINYINT NOT NULL, + PRIMARY KEY(id) +); + +/* Transaction Data */ + +CREATE TABLE PriceHistory ( + id INT NOT NULL AUTO_INCREMENT, + asset VARCHAR(64) NOT NULL, + rate DECIMAL(16, 8) NOT NULL, + rec_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(id), + FOREIGN KEY (asset) REFERENCES AssetList(asset) +); + +CREATE TABLE TransferTransactions ( + id INT NOT NULL AUTO_INCREMENT, + sender CHAR(34) NOT NULL, + receiver TEXT NOT NULL, + asset VARCHAR(64) NOT NULL, + totalAmount DECIMAL(16, 8) NOT NULL, + tx_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + txid VARCHAR(66) NOT NULL, + KEY(id), + PRIMARY KEY(txid) +); + +CREATE TABLE TradeTransactions ( + id INT NOT NULL AUTO_INCREMENT, + seller CHAR(34) NOT NULL, + buyer CHAR(34) NOT NULL, + asset VARCHAR(64) NOT NULL, + quantity DECIMAL(16, 8) NOT NULL, + unitValue DECIMAL(16, 8) NOT NULL, + tx_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + txid VARCHAR(66) NOT NULL, + KEY(id), + PRIMARY KEY(txid), + FOREIGN KEY (asset) REFERENCES AssetList(asset) +); + +CREATE TABLE AuditTrade( + id INT NOT NULL AUTO_INCREMENT, + rec_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + unit_price DECIMAL(16, 8) NOT NULL, + quantity DECIMAL(16, 8) NOT NULL, + total_cost DECIMAL(16, 8) NOT NULL, + asset VARCHAR(64) NOT NULL, + sellerID CHAR(34) NOT NULL, + seller_old_asset DECIMAL(16, 8) NOT NULL, + seller_new_asset DECIMAL(16, 8) NOT NULL, + seller_old_cash DECIMAL(16, 8) NOT NULL, + seller_new_cash DECIMAL(16, 8) NOT NULL, + buyerID CHAR(34) NOT NULL, + buyer_old_asset DECIMAL(16, 8) NOT NULL, + buyer_new_asset DECIMAL(16, 8) NOT NULL, + buyer_old_cash DECIMAL(16, 8) NOT NULL, + buyer_new_cash DECIMAL(16, 8) NOT NULL, + PRIMARY KEY(id), + FOREIGN KEY (asset) REFERENCES AssetList(asset) +); + +/* Backup Feature (Tables & Triggers) */ + +CREATE TABLE _backup ( + t_name VARCHAR(64), + id INT, + mode BOOLEAN DEFAULT TRUE, + u_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(t_name, id) +); + +CREATE table _backupCache( + id INT AUTO_INCREMENT, + t_name VARCHAR(64), + data_cache LONGTEXT, + fail BOOLEAN, + PRIMARY KEY(id) +); + +CREATE TABLE sinkShares( + num INT UNSIGNED NOT NULL AUTO_INCREMENT, + share TEXT, + time_stored TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY(num) +); + +CREATE TABLE discardedSinks( + id INT AUTO_INCREMENT, + floID CHAR(34) NOT NULL, + discard_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + KEY(id), + PRIMARY KEY(floID) +); + +CREATE TRIGGER discardedSinks_I AFTER INSERT ON discardedSinks +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('discardedSinks', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER discardedSinks_U AFTER UPDATE ON discardedSinks +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('discardedSinks', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER discardedSinks_D AFTER DELETE ON discardedSinks +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('discardedSinks', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER RequestLog_I AFTER INSERT ON RequestLog +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('RequestLog', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER RequestLog_U AFTER UPDATE ON RequestLog +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('RequestLog', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER RequestLog_D AFTER DELETE ON RequestLog +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('RequestLog', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER UserSession_I AFTER INSERT ON UserSession +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('UserSession', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER UserSession_U AFTER UPDATE ON UserSession +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('UserSession', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER UserSession_D AFTER DELETE ON UserSession +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('UserSession', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER UserBalance_I AFTER INSERT ON UserBalance +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('UserBalance', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER UserBalance_U AFTER UPDATE ON UserBalance +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('UserBalance', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER UserBalance_D AFTER DELETE ON UserBalance +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('UserBalance', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER SellOrder_I AFTER INSERT ON SellOrder +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('SellOrder', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER SellOrder_U AFTER UPDATE ON SellOrder +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('SellOrder', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER SellOrder_D AFTER DELETE ON SellOrder +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('SellOrder', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER BuyOrder_I AFTER INSERT ON BuyOrder +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('BuyOrder', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER BuyOrder_U AFTER UPDATE ON BuyOrder +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('BuyOrder', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER BuyOrder_D AFTER DELETE ON BuyOrder +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('BuyOrder', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER VaultTransactions_I AFTER INSERT ON VaultTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('VaultTransactions', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER VaultTransactions_U AFTER UPDATE ON VaultTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('VaultTransactions', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER VaultTransactions_D AFTER DELETE ON VaultTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('VaultTransactions', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER PriceHistory_I AFTER INSERT ON PriceHistory +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('PriceHistory', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER PriceHistory_U AFTER UPDATE ON PriceHistory +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('PriceHistory', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER PriceHistory_D AFTER DELETE ON PriceHistory +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('PriceHistory', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER AuditTrade_I AFTER INSERT ON AuditTrade +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('AuditTrade', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER AuditTrade_U AFTER UPDATE ON AuditTrade +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('AuditTrade', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER AuditTrade_D AFTER DELETE ON AuditTrade +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('AuditTrade', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER TradeTransactions_I AFTER INSERT ON TradeTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('TradeTransactions', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER TradeTransactions_U AFTER UPDATE ON TradeTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('TradeTransactions', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER TradeTransactions_D AFTER DELETE ON TradeTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('TradeTransactions', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; + +CREATE TRIGGER TransferTransactions_I AFTER INSERT ON TransferTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('TransferTransactions', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER TransferTransactions_U AFTER UPDATE ON TransferTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('TransferTransactions', NEW.id) ON DUPLICATE KEY UPDATE mode=TRUE, u_time=DEFAULT; +CREATE TRIGGER TransferTransactions_D AFTER DELETE ON TransferTransactions +FOR EACH ROW INSERT INTO _backup (t_name, id) VALUES ('TransferTransactions', OLD.id) ON DUPLICATE KEY UPDATE mode=NULL, u_time=DEFAULT; \ No newline at end of file