@payburner/keyburner-sidewinder-core
Version:
Core library for Keyburner Sidewinder
145 lines • 8.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateTokenTransactionProcessor = void 0;
const npm_1 = require("@payburner/keyburner-sidewinder-model/dist/npm");
const TransactionProcessorBase_1 = require("./TransactionProcessorBase");
const CommonErrorCodes_1 = require("../model/CommonErrorCodes");
class CreateTokenTransactionProcessor extends TransactionProcessorBase_1.TransactionProcessorBase {
constructor(globalAccountService, tokenService) {
super(globalAccountService, tokenService);
}
doProcess(decodedTransaction, items) {
const self = this;
return new Promise((resolve, reject) => {
console.log('Processing create token: ' + decodedTransaction.id);
if (typeof decodedTransaction.payload.initial_amount !== 'undefined' &&
typeof decodedTransaction.payload.initial_amount !== 'number') {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MALFORMED_INITIAL_AMOUNT);
return;
}
const createTokenTransaction = decodedTransaction.payload;
self.getTokenService().getToken(createTokenTransaction.environment, createTokenTransaction.token_symbol)
.then((token) => {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_ALREADY_EXISTS);
}).catch((error) => {
if (typeof createTokenTransaction.maximum_transfer_amount !== 'undefined' &&
typeof createTokenTransaction.minimum_transfer_amount !== 'undefined' &&
(createTokenTransaction.minimum_transfer_amount) > (createTokenTransaction.maximum_transfer_amount)) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MINIMUM_TRANSFER_AMOUNTER_GREATER_THAN_MAXIMUM_TRANSFER_AMOUNT);
return;
}
if (typeof createTokenTransaction.minimum_transfer_amount !== 'undefined' && (createTokenTransaction.minimum_transfer_amount) <= 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MINIMUM_TRANSFER_AMOUNT_LESS_THAN_OR_EQUAL_ZERO);
return;
}
if (typeof createTokenTransaction.maximum_transfer_amount !== 'undefined' && (createTokenTransaction.maximum_transfer_amount) <= 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_MAXIMUM_TRANSFER_AMOUNT_LESS_THAN_OR_EQUAL_ZERO);
return;
}
if (typeof createTokenTransaction.initial_amount === 'undefined' && typeof createTokenTransaction.underlying_address === 'undefined') {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_NO_INITIAL_AMOUNT_AND_NO_UNDERLYING);
return;
}
if (typeof createTokenTransaction.initial_amount !== 'undefined' && (createTokenTransaction.initial_amount) <= 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_INITIAL_LESS_THAN_OR_EQUAL_TO_ZERO);
return;
}
if (createTokenTransaction.decimal_precision < 0 || createTokenTransaction.decimal_precision > 10) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_INVALID_DECIMAL_PRECISION);
return;
}
if ((createTokenTransaction.transaction_fee) < 0) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_INVALID_TRANSACTION_FEE);
return;
}
if ((typeof createTokenTransaction.onramp_fee_multiplier !== 'undefined' || typeof createTokenTransaction.offramp_fee_multiplier !== 'undefined')
&& (typeof createTokenTransaction.underlying_address === 'undefined' || createTokenTransaction.underlying_address === null)) {
resolve(CommonErrorCodes_1.CommonErrorCodes.TOKEN_SETUP_ON_OFF_RAMP_FEES_BUT_NO_UNDERLYING);
return;
}
console.log('The token ' + createTokenTransaction.token_symbol + ' does not exist. Creating.');
const token = {
token_uri: npm_1.AccountUtils.calculateTokenId(createTokenTransaction.environment, createTokenTransaction.token_symbol),
token_symbol: createTokenTransaction.token_symbol,
environment: createTokenTransaction.environment,
token_issuer_address: decodedTransaction.address,
initial_amount: this.formatInt(createTokenTransaction.initial_amount),
transaction_fee: this.formatInt(createTokenTransaction.transaction_fee),
allow_transfers_between_accounts: createTokenTransaction.allow_transfers_between_accounts,
is_permissioned: createTokenTransaction.is_permissioned,
maximum_balance: this.formatInt(createTokenTransaction.maximum_balance),
minimum_transfer_amount: this.formatInt(createTokenTransaction.minimum_transfer_amount),
maximum_transfer_amount: this.formatInt(createTokenTransaction.maximum_transfer_amount),
frozen: createTokenTransaction.frozen,
decimal_precision: this.formatInt(createTokenTransaction.decimal_precision),
underlying_currency: createTokenTransaction.underlying_currency,
underlying_account_id: createTokenTransaction.underlying_address
};
if (typeof createTokenTransaction.underlying_address !== 'undefined' && createTokenTransaction.underlying_address !== null) {
if (typeof createTokenTransaction.onramp_fee_multiplier !== 'undefined' && createTokenTransaction.onramp_fee_multiplier !== null) {
token.onramp_fee_multiplier = createTokenTransaction.onramp_fee_multiplier;
}
else {
token.onramp_fee_multiplier = 0;
}
if (typeof createTokenTransaction.offramp_fee_multiplier !== 'undefined' && createTokenTransaction.offramp_fee_multiplier !== null) {
token.offramp_fee_multiplier = createTokenTransaction.offramp_fee_multiplier;
}
else {
token.offramp_fee_multiplier = 0;
}
if (typeof createTokenTransaction.underlying_currency_multiplier !== 'undefined' && createTokenTransaction.underlying_currency_multiplier !== null) {
token.underlying_currency_multiplier = createTokenTransaction.underlying_currency_multiplier;
}
else {
token.underlying_currency_multiplier = 1;
}
}
else {
{
token.underlying_currency_multiplier = 1;
token.onramp_fee_multiplier = 0;
token.offramp_fee_multiplier = 0;
}
}
items.push({
Put: {
TableName: 'sidewinder_token',
Item: token,
ConditionExpression: "attribute_not_exists(token_uri)"
}
});
let ownerAccount = {
token_account_id: npm_1.AccountUtils.calculateTokenAccountId(token.environment, token.token_symbol, decodedTransaction.address),
token_symbol: token.token_symbol,
account_owner_address: decodedTransaction.address,
environment: token.environment,
sequence: 0,
available_balance: createTokenTransaction.initial_amount,
total_balance: createTokenTransaction.initial_amount,
over_balance: 0,
locked_balance: 0,
frozen: false
};
items.push({
Put: {
TableName: 'sidewinder_token_account',
Item: ownerAccount,
ConditionExpression: "attribute_not_exists(token_account_id)"
}
});
resolve({ status: 200 });
}).catch((error) => {
resolve({ status: 500, error });
});
});
}
formatInt(input) {
return typeof input !== 'undefined' ? parseInt((input).toFixed(0)) : undefined;
}
getTransactionType() {
return npm_1.TransactionTypes.CreateToken;
}
}
exports.CreateTokenTransactionProcessor = CreateTokenTransactionProcessor;
//# sourceMappingURL=CreateTokenTransactionProcessor.js.map