diff --git a/server/web3sign/controllers/game_item_mall.js b/server/web3sign/controllers/game_item_mall.js index 48cc092..cc418dd 100644 --- a/server/web3sign/controllers/game_item_mall.js +++ b/server/web3sign/controllers/game_item_mall.js @@ -3,6 +3,7 @@ const utils = require('j7/utils'); const bcutils = require('j7/bcutils'); const bcconst = require('common/bcconst'); const metaFactory = require('../metadata/factory'); +const serviceFactory = require('../services/factory'); async function buy(session) { try { diff --git a/server/web3sign/controllers/game_item_market.js b/server/web3sign/controllers/game_item_market.js index e69de29..3b67947 100644 --- a/server/web3sign/controllers/game_item_market.js +++ b/server/web3sign/controllers/game_item_market.js @@ -0,0 +1,87 @@ +const app = require('j7/app'); +const utils = require('j7/utils'); +const bcutils = require('j7/bcutils'); +const bcconst = require('common/bcconst'); +const metaFactory = require('../metadata/factory'); +const serviceFactory = require('../services/factory'); + +async function buy(session) { + try { + const account = bcutils.toNormalAddress(session.request('account', '')); + const netId = session.request('net_id'); + const price = session.request('price'); + const bc = serviceFactory.create('BlockChain'); + { + const ret = await bc.init(netId); + if (!ret) { + session.rspErr(500, 'net_id error'); + return; + } + } + { + if (!bc.isValidAddress(account)) { + session.rspErr(500, 'account error'); + return; + } + } + + const currency = ''; + const userAddress = bc.getUserAddress(); + + const transModel = session.createModel('Transaction'); + const usedTokenIdModel = session.createModel('UsedTokenId'); + + const {err, seqId} = await transModel.add(account, session.requestToJson(), netId); + if (err) { + session.rspErr(500, 'server internal error'); + return; + } + + const nowTime = utils.getUtcTime(); + const transId = bcutils.genTransId + ( + bcconst.BC_FUNC_COMMON, + nowTime, + seqId, + [ + ] + ); + await transModel.update + ( + seqId, + [ + ['trans_id', transId] + ]); + const nonce = transId; + const orderId = transId; + const signature = await bc.soliditySha3Sign( + orderId, + account, + currency, + price, + nowTime, + nonce + ); + + const rspParams = [ + 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('GameItemMarket', 'buy', buy); +} + +exports.init = init;