const ethUtil = require('ethereumjs-util'); const sigUtil = require('@metamask/eth-sig-util'); const app = require('j7/app'); const utils = require('j7/utils'); const bc = require('../blockchain'); const metaFactory = require('../metadata/factory'); async function authVerifySignature(session) { try { const netId = await bc.getNetId(); const msgParams = { types: { EIP712Domain: [ { name: 'name', type: 'string' }, { name: 'version', type: 'string' }, ], set: [ { name: 'tips', type: 'string' }, { name: 'nonce', type: 'string' }, ] }, primaryType: 'set', domain: { name: 'Auth', version: '1', }, message: { tips: session.request('tips'), nonce: session.request('nonce') } }; const recovered = sigUtil.recoverTypedSignature( {data: msgParams, signature: session.request('signature'), version: 'V4'}); session.rspData( { 'recovered': recovered }); } catch (err) { session.rspErr(1, err); } } async function buyBoxVerifySignature(session) { try { const netId = await bc.getNetId(); const msgParams = { types: { EIP712Domain: [ { name: 'name', type: 'string' }, { name: 'version', type: 'string' }, { name: 'chainId', type: 'uint256' }, { name: 'verifyingContract', type: 'address' } ], set: [ { name: 'item', type: 'uint256' }, { name: 'token', type: 'address' }, { name: 'price', type: 'uint256' }, { name: 'salt', type: 'uint256' } ] }, primaryType: 'set', domain: { name: 'BEBoxMall', version: '1', chainId: netId, verifyingContract: metaFactory.getMetaByKey('Contract', 'mall')['address'], }, message: { item: session.request('type'), token: session.request('paymentTokenAddress'), price: session.request('price'), salt: session.request('nonce') } }; const recovered = sigUtil.recoverTypedSignature( {data: msgParams, signature: session.request('signature'), version: 'V4'}); console.log(recovered); session.rspData( { 'recovered': recovered }); } catch (err) { console.log(err); session.rspErr(1, err); } } async function openBoxSignature(session) { const userAddress = metaFactory.getUserAddress(); const boxId = session.request('box_token_id'); const tokenIds = []; tokenIds.push(session.request('token_id1')); tokenIds.push(session.request('token_id2')); tokenIds.push(session.request('token_id3')); let nonce = utils.getUtcTime(); let signStr = bc.web3.utils.soliditySha3( boxId, tokenIds[0], tokenIds[1], tokenIds[2], nonce ); let signature = await bc.web3.eth.sign(signStr, userAddress); signature = signature.replace(/00$/, "1b").replace(/01$/, "1c"); console.log('openLuckyBox||sign: ', signature, userAddress, boxId, tokenIds, nonce); session.rspData({ 'nonce': nonce, 'signature': signature }); } async function activateNftSignature(session) { const userAddress = metaFactory.getUserAddress(); const account = session.request('account'); const oldTokenId = session.request('old_token_id'); const oldTokenType = session.request('old_token_type'); const newTokenId = session.request('new_token_id'); let nonce = utils.getUtcTime(); let signStr = bc.web3.utils.soliditySha3( account, oldTokenId, newTokenId, oldTokenType, nonce ); let signature = await bc.web3.eth.sign(signStr, userAddress); signature = signature.replace(/00$/, "1b").replace(/01$/, "1c"); console.log('activateNftSignature||sign: ', signature, userAddress, oldTokenId, newTokenId, oldTokenType, nonce); session.rspData({ 'nonce': nonce, 'signature': signature }); } function init() { app.registerHandler('BcService', 'authVerifySignature', authVerifySignature); app.registerHandler('BcService', 'buyBoxVerifySignature', buyBoxVerifySignature); app.registerHandler('BcService', 'openBoxSignature', openBoxSignature); app.registerHandler('BcService', 'activateNftSignature', activateNftSignature); } exports.init = init;