j7/bcutils.js
aozhiwei ce0b30e27a 1
2023-07-15 15:51:47 +08:00

187 lines
5.2 KiB
JavaScript

const utils = require('./utils');
const BC_BASE_GAME_ID = 2005;
const BC_FUNC_CREATION = 1;
const BC_FUNC_GUILD = 3;
const BC_FUNC_BLIND_BOX = 5;
const BC_FUNC_PRESENT = 6;
const BC_FUNC_COMMON = 7;
const BC_MAX_TOKEN_IDX = 99999;
const BC_TRANSID_MAX_PARAMS_NUM = 3;
const BC_TRANSID_MAX_SEQID = 9999999;
const BC_TRANS_FUNC_ACTIVATE = 1;
const BC_TRANS_FUNC_MINT_SHARD = 2;
const BC_TRANS_FUNC_EVOLVE = 3;
const BC_TRANS_FUNC_PLUGIN = 4;
const BC_TRANS_FUNC_COMMON = 5;
const BC_EPOCH = 1643212800;
const NONE_TYPE = 0;
const HERO_TYPE = 1;
const EQUIP_TYPE = 2;
const CHIP_TYPE = 3;
const BLIND_BOX_TYPE = 4;
const FRAGMENT_TYPE = 5;
const CLAIM_BOX_TYPE = 6;
function isValidBcGameId(gameId) {
return gameID > BASE_BC_GAME_ID && gameID < BC_BASE_GAME_ID + 99;
}
function isValidBcTime(time) {
return time >= BC_EPOCH && time < BC_EPOCH + 3600 * 24 * 365 * 20;
}
function isValidBcFuncId(funcId) {
return funcId > 0 && funcId < 10;
}
function toBcTime(time) {
return time - BC_EPOCH;
}
function toBcGameId(gameId) {
return gameId - BC_BASE_GAME_ID;
}
function toNormalAddress(address) {
return address.toLowerCase();
}
function genTokenId(gameId, funcId, time, subIdx, idx) {
const tokenId =
funcId.toString() +
//utils.pad(toBcGameId(gameId), 2) +
utils.pad(toBcTime(time), 9) +
utils.pad(subIdx, 1) +
utils.pad(1 + (idx % BC_MAX_TOKEN_IDX), 5);
return tokenId;
}
function isValidOldTokenId(tokenId) {
return utils.isPureNumberStr(tokenId.toString()) && tokenId.toString().length == 18;
}
function isValidTokenId(tokenId) {
return utils.isPureNumberStr(tokenId.toString()) && tokenId.toString().length == 16;
}
function isSameAddress(a, b) {
return a.toLowerCase() == b.toLowerCase();
}
/*
max(uint64): 18446744073709551615 = len(20)
max(uint256): 115792089237316195423570985008687907853269984665640564039457584007913129639935 = len(78)
max(int32): 2147483648 = len(10)
len(tokenid) = 16
transHead: funcId(2)|time(9)|seqId(7) = len(18)
*/
function genTransId(funcId, time, seqId, params) {
let transId =
utils.pad(funcId, 1) +
utils.pad(toBcTime(time), 9) +
utils.pad(seqId % BC_TRANSID_MAX_SEQID, 7);
params.forEach
(
(element) => {
transId += utils.pad(element, 20);
}
);
for (let i = 0; i < BC_TRANSID_MAX_PARAMS_NUM - params.length; ++i) {
transId += utils.pad(0, 20);
}
return transId;
}
function isValidTransId(transId) {
return utils.isPureNumberStr(transId.toString()) &&
(transId.toString().length == 77 || transId.toString().length == 78);
}
function extractParamsFromTransId(transId) {
if (!isValidTransId(transId)) {
return null;
}
const transIdStr = transId.toString();
const params = [];
for (let i = 0; i < 3; ++i) {
const param = transId.substr(transIdStr.length - 20 * (3 - i), 20);
params.push(utils.removeLeadZero(param));
}
return params;
}
function extractSubParams(param) {
const subParams = [0, 0];
if (param.toString().length < 20) {
param = utils.pad(param, 20);
}
if (param.toString().length > 20) {
throw 'extractSubparams error to long:' + param;
} else {
subParams[0] = param.toString().substr(0, 10);
subParams[1] = param.toString().substr(10);
}
subParams[0] = utils.removeLeadZero(subParams[0]);
subParams[1] = utils.removeLeadZero(subParams[1]);
return subParams;
}
function isEmptyAddress(address) {
return address.toString().length < 10;
}
function isValidAddress(address) {
if (address == '0x0000000000000000000000000000000000000000') {
return false;
}
return address.toString().length > 10;
}
function isSysAddress(address) {
return toNormalAddress(address) == '0x0000000000000000000000000000000000000000';
}
exports.BC_BASE_GAME_ID = BC_BASE_GAME_ID;
exports.BC_FUNC_CREATION = BC_FUNC_CREATION;
exports.BC_FUNC_GUILD = BC_FUNC_GUILD;
exports.BC_FUNC_BLIND_BOX = BC_FUNC_BLIND_BOX;
exports.BC_FUNC_PRESENT = BC_FUNC_PRESENT;
exports.BC_FUNC_COMMON = BC_FUNC_COMMON;
exports.BC_EPOCH = BC_EPOCH;
exports.BC_MAX_TOKEN_IDX = BC_MAX_TOKEN_IDX;
exports.BC_TRANSID_MAX_PARAMS_NUM = BC_TRANSID_MAX_PARAMS_NUM;
exports.BC_TRANS_FUNC_ACTIVATE = BC_TRANS_FUNC_ACTIVATE;
exports.BC_TRANS_FUNC_MINT_SHARD = BC_TRANS_FUNC_MINT_SHARD;
exports.BC_TRANS_FUNC_EVOLVE = BC_TRANS_FUNC_EVOLVE;
exports.BC_TRANS_FUNC_PLUGIN = BC_TRANS_FUNC_PLUGIN;
exports.BC_TRANS_FUNC_COMMON = BC_TRANS_FUNC_COMMON;
exports.NONE_TYPE = NONE_TYPE;
exports.HERO_TYPE = HERO_TYPE;
exports.EQUIP_TYPE = EQUIP_TYPE;
exports.CHIP_TYPE = CHIP_TYPE;
exports.BLIND_BOX_TYPE = BLIND_BOX_TYPE;
exports.FRAGMENT_TYPE = FRAGMENT_TYPE;
exports.CLAIM_BOX_TYPE = CLAIM_BOX_TYPE;
exports.isValidBcGameId = isValidBcGameId;
exports.isValidBcTime = isValidBcTime;
exports.isValidBcFuncId = isValidBcFuncId;
exports.toBcTime = toBcTime;
exports.toBcGameId = toBcGameId;
exports.toNormalAddress = toNormalAddress;
exports.genTokenId = genTokenId;
exports.isValidTokenId = isValidTokenId;
exports.isSameAddress = isSameAddress;
exports.genTransId = genTransId;
exports.isValidTransId = isValidTransId;
exports.extractParamsFromTransId = extractParamsFromTransId;
exports.extractSubParams = extractSubParams;
exports.isEmptyAddress = isEmptyAddress;
exports.isValidAddress = isValidAddress;
exports.isSysAddress = isSysAddress;