2022-04-20 20:59:35 +08:00

125 lines
3.3 KiB
JavaScript

const ethUtil = require('ethereumjs-util');
const sigUtil = require('@metamask/eth-sig-util');
const app = require('j7/app');
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: '0xF278ff771F9E24968083B0bA54Cb42eb4B23C2d7',
},
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);
}
}
function openBoxSignature(session) {
const userAddress = session.request('account');
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
});
}
function init() {
app.registerHandler('BcService', 'authVerifySignature', authVerifySignature);
app.registerHandler('BcService', 'buyBoxVerifySignature', buyBoxVerifySignature);
app.registerHandler('BcService', 'openBoxSignature', openBoxSignature);
}
exports.init = init;