From 9712ad3914335ee38ed6f92cc7ad1e07eb61171f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 10 Jul 2023 17:05:00 +0800 Subject: [PATCH] 1 --- server/web3sign/controllers/activate.js | 108 ++++++++++++++++++ server/web3sign/controllers/game_item_mall.js | 0 .../web3sign/controllers/game_item_market.js | 0 3 files changed, 108 insertions(+) create mode 100644 server/web3sign/controllers/activate.js create mode 100644 server/web3sign/controllers/game_item_mall.js create mode 100644 server/web3sign/controllers/game_item_market.js diff --git a/server/web3sign/controllers/activate.js b/server/web3sign/controllers/activate.js new file mode 100644 index 0000000..a70ead6 --- /dev/null +++ b/server/web3sign/controllers/activate.js @@ -0,0 +1,108 @@ +const ethUtil = require('ethereumjs-util'); +const sigUtil = require('@metamask/eth-sig-util'); + +const app = require('j7/app'); +const utils = require('j7/utils'); +const bcutils = require('j7/bcutils'); +const bc = require('../blockchain'); +const metaFactory = require('../metadata/factory'); + +async function activate721Nft(session) { + try { + const accountId = session.request('account_id'); + const account = session.request('account'); + const sessionId = session.request('session_id'); + const tokenId = session.request('token_id'); + const tokenType = session.request('token_type'); + const itemUniId = session.request('item_uniid'); + const itemId = session.request('item_id'); + + const nftAddress = bc.getNftAddress(tokenType); + const userAddress = metaFactory.getUserAddress(); + + { + const itemMeta = metaFactory.getMetaByKey('Item', itemId); + if (!itemMeta) { + session.rspErr(101, 'item_id param error'); + return; + } + if (itemMeta.getNftType() != tokenType) { + session.rspErr(101, 'item_id param error'); + return; + } + if (!(itemMeta.getNftType() == bcutils.HERO_TYPE || + itemMeta.getNftType() == bcutils.EQUIP_TYPE || + itemMeta.getNftType() == bcutils.CHIP_TYPE)) { + session.rspErr(101, 'token_type param error'); + return; + } + } + { + if (!nftAddress) { + session.rspErr(101, 'token_type param error'); + return; + } + } + + const transModel = session.createModel('Transaction'); + const {err, seqId} = await transModel.add(account, session.requestToJson()); + if (err) { + session.rspErr(500, 'server internal error'); + return; + } + + const nowTime = utils.getUtcTime(); + const transId = bcutils.genTransId + ( + bcutils.BC_TRANS_FUNC_ACTIVATE, + nowTime, + seqId, + [ + itemUniId, + itemId + ] + ); + await transModel.update + ( + seqId, + [ + ['trans_id', transId] + ]); + const nonce = transId; + const tokenIds = [tokenId]; + utils.arrayToStrings(tokenIds); + let signStr = await bc.web3.utils.soliditySha3 + ( + account, + nftAddress, + nowTime, + nonce, + ...tokenIds + ); + let signature = await bc.web3.eth.sign(signStr, userAddress); + signature = signature.replace(/00$/, "1b").replace(/01$/, "1c"); + + const rspParams = [ + nftAddress, + utils.jsonEncode(tokenIds), + nowTime, + nonce, + signature + ]; + utils.arrayToStrings(rspParams); + + session.rspData({ + 'trans_id' : transId, + 'params': rspParams + }); + } catch (e) { + session.rspErr(1, 1); + console.log(e); + } +} + +function init() { + app.registerHandler('BcService', 'activate721Nft', activate721Nft); +} + +exports.init = init; diff --git a/server/web3sign/controllers/game_item_mall.js b/server/web3sign/controllers/game_item_mall.js new file mode 100644 index 0000000..e69de29 diff --git a/server/web3sign/controllers/game_item_market.js b/server/web3sign/controllers/game_item_market.js new file mode 100644 index 0000000..e69de29