const ethUtil = require('ethereumjs-util'); const sigUtil = require('@metamask/eth-sig-util'); const utils = require('../utils'); const bc = require('../blockchain'); const metamgr = require('../metamgr'); async function authVerifySignature(req, rsp) { try { const netId = await bc.getNetId(); const msgParams = JSON.stringify({ types: { EIP712Domain: [ { name: 'name', type: 'string' }, { name: 'version', type: 'string' }, { name: 'chainId', type: 'uint256' }, ], set: [ ] }, primaryType: 'set', domain: { name: req.name, version: req.version, chainId: netId, }, message: {} }); const recovered = sigUtil.recoverTypedSignature( {data: msgParams, signature: req.signature, version: 'V4'}); utils.rspData( rsp, { 'recovered': recovered }); } catch (err) { utils.rspErr(rsp, 1, err); } } async function buyBoxVerifySignature(req, rsp) { try { const netId = await bc.getNetId(); const msgParams = JSON.stringify({ 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: req.name, version: req.version, chainId: netId, verifyingContract: metamgr['mallInstance'].address }, message: { item: req.type, token: req.paymentTokenAddress, price: req.price, salt: req.nonce } }); const recovered = sigUtil.recoverTypedSignature( {data: msgParams, signature: req.signature, version: 'V4'}); utils.rspData( rsp, { 'recovered': recovered }); } catch (err) { utils.rspErr(rsp, 1, err); } } function init() { utils.registerHandler('BcService', 'authVerifySignature', authVerifySignature); utils.registerHandler('BcService', 'buyBoxVerifySignature', buyBoxVerifySignature); } exports.init = init;