int-cli
Version:
INT is the new generation of bottom-up created system of IoT and blockchain
225 lines (224 loc) • 8.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
const util_1 = require("util");
function createTokenChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!input.name || !util_1.isString(input.name) || input.name.length > 200) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!input.symbol || !util_1.isString(input.symbol) || input.symbol.length > 50) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
let tokenid = index_1.addressFromPublicKey(index_1.encodeAddressAndNonce(tx.address, tx.nonce));
if (!index_1.isValidAddress(input.tokenid) || tokenid !== input.tokenid) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return checkAmount(input.amount);
}
exports.createTokenChecker = createTokenChecker;
function transferTokenToChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid) || !index_1.isValidAddress(input.to)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return checkAmount(input.amount);
}
exports.transferTokenToChecker = transferTokenToChecker;
function transferFromChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid) || !index_1.isValidAddress(input.from) || !index_1.isValidAddress(input.to)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return checkAmount(input.amount);
}
exports.transferFromChecker = transferFromChecker;
function approveChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid) || !index_1.isValidAddress(input.spender)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return checkAmount(input.amount);
}
exports.approveChecker = approveChecker;
function freezeAccountChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (util_1.isNullOrUndefined(input.freeze) || typeof input.freeze !== 'boolean') {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid) || !index_1.isValidAddress(input.freezeAddress)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.freezeAccountChecker = freezeAccountChecker;
function burnChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return checkAmount(input.amount);
}
exports.burnChecker = burnChecker;
function mintTokenChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return checkAmount(input.amount);
}
exports.mintTokenChecker = mintTokenChecker;
function transferOwnershipChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.tokenid) || !index_1.isValidAddress(input.newOwner)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.transferOwnershipChecker = transferOwnershipChecker;
function transferToChecker(tx) {
let input = tx.input;
if (!input) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.to)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.transferToChecker = transferToChecker;
function voteChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
let candidates = input.candidates;
if (!candidates || !util_1.isArray(candidates) || candidates.length > 20) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
for (let value of input.candidates) {
if (!index_1.isValidAddress(value)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
}
return index_1.ErrorCode.RESULT_OK;
}
exports.voteChecker = voteChecker;
function mortgageChecker(tx) {
let input = tx.input;
if (!input) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
let checkAmountResult = checkAmount(input.amount);
if (checkAmountResult) {
return checkAmountResult;
}
else if (!tx.value.isEqualTo(new index_1.BigNumber(input.amount))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.mortgageChecker = mortgageChecker;
function unmortgageChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
return checkAmount(input.amount);
}
exports.unmortgageChecker = unmortgageChecker;
function registerChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.coinbase)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.registerChecker = registerChecker;
function lockAccountChecker(tx) {
let input = tx.input;
let lockBalance = new index_1.BigNumber(0);
if (!input) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
let contractid = index_1.addressFromPublicKey(index_1.encodeAddressAndNonce(tx.address, tx.nonce));
if (!index_1.isValidAddress(input.contractid) || !index_1.isValidAddress(input.lockaddress) || contractid !== input.contractid) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
if (!input.schedule || !util_1.isArray(input.schedule) || (input.schedule.length > 20)) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
for (let item of input.schedule) {
if (!item || !util_1.isObject(item)) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (util_1.isNullOrUndefined(item.time) || !util_1.isNumber(item.time) || (item.time < Math.pow(10, 12))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
let checkAmountResult = checkAmount(item.value);
if (checkAmountResult) {
return checkAmountResult;
}
lockBalance = lockBalance.plus(new index_1.BigNumber(item.value));
}
if (!tx.value.isEqualTo(lockBalance)) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.lockAccountChecker = lockAccountChecker;
function transferFromLockAccountChecker(tx) {
let input = tx.input;
if (!input || !tx.value.isEqualTo(new index_1.BigNumber(0))) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
if (!index_1.isValidAddress(input.contractid)) {
return index_1.ErrorCode.RESULT_INVALID_ADDRESS;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.transferFromLockAccountChecker = transferFromLockAccountChecker;
function checkAmount(amount) {
if (util_1.isNullOrUndefined(amount) || !util_1.isString(amount)) {
return index_1.ErrorCode.RESULT_INVALID_PARAM;
}
let bigAmount = new index_1.BigNumber(amount);
if (!bigAmount.isInteger()) {
return index_1.ErrorCode.RESULT_NOT_INTEGER;
}
if (bigAmount.isNegative()) {
return index_1.ErrorCode.RESULT_CANT_BE_LESS_THAN_ZERO;
}
if (bigAmount.gt(new index_1.BigNumber(1e+36))) {
return index_1.ErrorCode.RESULT_OUT_OF_RANGE;
}
return index_1.ErrorCode.RESULT_OK;
}
exports.checkAmount = checkAmount;