@rsksmart/rif-storage-pinning
Version:
Application for providing your storage space to other to use in exchange of RIF Tokens
262 lines (261 loc) • 9.47 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const sequelize_1 = __importDefault(require("sequelize"));
function migrationCommands(transaction) {
return [
{
fn: 'createTable',
params: [
'event',
{
id: {
type: sequelize_1.default.INTEGER,
field: 'id',
autoIncrement: true,
primaryKey: true,
allowNull: false
},
blockNumber: {
type: sequelize_1.default.INTEGER,
field: 'blockNumber'
},
transactionHash: {
type: sequelize_1.default.STRING(66),
field: 'transactionHash'
},
logIndex: {
type: sequelize_1.default.INTEGER,
field: 'logIndex'
},
targetConfirmation: {
type: sequelize_1.default.INTEGER,
field: 'targetConfirmation'
},
contractAddress: {
type: sequelize_1.default.STRING(66),
field: 'contractAddress'
},
event: {
type: sequelize_1.default.TEXT,
field: 'event'
},
content: {
type: sequelize_1.default.TEXT,
field: 'content'
},
emitted: {
type: sequelize_1.default.BOOLEAN,
field: 'emitted',
defaultValue: false
},
createdAt: {
type: sequelize_1.default.DATE,
field: 'createdAt',
allowNull: false
},
updatedAt: {
type: sequelize_1.default.DATE,
field: 'updatedAt',
allowNull: false
}
},
{
transaction: transaction
}
]
},
{
fn: 'createTable',
params: [
'storage_agreement',
{
agreementReference: {
type: sequelize_1.default.STRING(67),
field: 'agreementReference',
allowNull: false,
primaryKey: true
},
dataReference: {
type: sequelize_1.default.STRING,
field: 'dataReference',
allowNull: false
},
consumer: {
type: sequelize_1.default.STRING(64),
field: 'consumer',
allowNull: false
},
size: {
type: sequelize_1.default.STRING,
field: 'size',
allowNull: false
},
isActive: {
type: sequelize_1.default.BOOLEAN,
field: 'isActive',
defaultValue: true
},
billingPeriod: {
type: sequelize_1.default.STRING,
field: 'billingPeriod',
allowNull: false
},
billingPrice: {
type: sequelize_1.default.STRING,
field: 'billingPrice',
allowNull: false
},
availableFunds: {
type: sequelize_1.default.STRING,
field: 'availableFunds',
allowNull: false
},
lastPayout: {
type: sequelize_1.default.DATE,
field: 'lastPayout',
allowNull: false
},
expiredAtBlockNumber: {
type: sequelize_1.default.NUMBER,
field: 'expiredAtBlockNumber'
}
},
{
transaction: transaction
}
]
},
{
fn: 'createTable',
params: [
'jobs',
{
id: {
type: sequelize_1.default.INTEGER,
field: 'id',
autoIncrement: true,
primaryKey: true,
allowNull: false
},
name: {
type: sequelize_1.default.STRING,
field: 'name',
allowNull: false
},
state: {
type: sequelize_1.default.ENUM('created', 'backoff', 'running', 'errored', 'finished'),
field: 'state',
defaultValue: 'created',
allowNull: false
},
tries: {
type: sequelize_1.default.INTEGER,
field: 'tries',
defaultValue: 1,
allowNull: false
},
type: {
type: sequelize_1.default.STRING,
field: 'type'
},
start: {
type: sequelize_1.default.DATE,
field: 'start'
},
finish: {
type: sequelize_1.default.DATE,
field: 'finish'
},
retry: {
type: sequelize_1.default.STRING,
field: 'retry'
},
errorMessage: {
type: sequelize_1.default.STRING,
field: 'errorMessage'
}
},
{
transaction: transaction
}
]
},
{
fn: 'addIndex',
params: [
'event',
['transactionHash', 'logIndex'],
{
indexName: 'event_transaction_hash_log_index',
name: 'event_transaction_hash_log_index',
indicesType: 'UNIQUE',
type: 'UNIQUE',
transaction: transaction
}
]
}
];
}
function rollbackCommands(transaction) {
return [
{
fn: 'dropTable',
params: [
'event', {
transaction: transaction
}
]
},
{
fn: 'dropTable',
params: [
'storage_agreement', {
transaction: transaction
}
]
},
{
fn: 'dropTable',
params: [
'jobs', {
transaction: transaction
}
]
}
];
}
function run(queryInterface, _commands) {
return function (transaction) {
return __awaiter(this, void 0, void 0, function* () {
for (const command of _commands(transaction)) {
// @ts-ignore: QueryInterface not typed correctly
// eslint-disable-next-line prefer-spread
yield queryInterface[command.fn].apply(queryInterface, command.params);
}
});
};
}
exports.default = {
up(queryInterface, sequelize) {
return __awaiter(this, void 0, void 0, function* () {
yield queryInterface.sequelize.transaction(run(queryInterface, migrationCommands));
});
},
down(queryInterface, sequelize) {
return __awaiter(this, void 0, void 0, function* () {
yield queryInterface.sequelize.transaction(run(queryInterface, rollbackCommands));
});
}
};