aozhiwei f1a7f9e87a 1
2022-04-15 15:00:39 +08:00

250 lines
7.0 KiB
JavaScript

const ethUtil = require('ethereumjs-util');
const sigUtil = require('@metamask/eth-sig-util');
const app = require('j7/app');
const http = require('j7/http');
const utils = require('j7/utils');
const metaFactory = require('../metadata/factory');
const bc = require('../blockchain');
const cmdHash = {};
const BASE_URL = 'https://market-test.kingsome.cn/dev/webapp/index.php';
async function getToken() {
let nonce = '';
const netId = await bc.getNetId();
{
const {err, data} = await http.get(BASE_URL,
{
'c': 'Market',
'a': 'getNonce',
'account': metaFactory.getUserAddress(),
'net_id': netId
});
nonce = '' + data['nonce'];
console.log(err, data);
}
{
const tips = 'hello world';
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: tips,
nonce: nonce
}
};
const signature = sigUtil.signTypedData({
'privateKey': Buffer.from(metaFactory.getPrivateKey(), 'hex'),
'data': msgParams,
'version': "V4"
});
const {err, data} = await http.get(BASE_URL,
{
'c': 'Market',
'a': 'auth',
'account': metaFactory.getUserAddress(),
'tips': tips,
'nonce': nonce,
'signature': signature,
'net_id': netId
});
return data['token'];
}
}
async function login(session, params) {
let nonce = '';
const netId = await bc.getNetId();
{
const {err, data} = await http.get(BASE_URL,
{
'c': 'Market',
'a': 'getNonce',
'account': metaFactory.getUserAddress(),
'net_id': netId
});
nonce = '' + data['nonce'];
console.log(err, data);
}
{
const tips = 'hello world';
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: tips,
nonce: nonce
}
};
const signature = sigUtil.signTypedData({
'privateKey': Buffer.from(metaFactory.getPrivateKey(), 'hex'),
'data': msgParams,
'version': "V4"
});
const {err, data} = await http.get(BASE_URL,
{
'c': 'Market',
'a': 'auth',
'account': metaFactory.getUserAddress(),
'tips': tips,
'nonce': nonce,
'signature': signature,
'net_id': netId
});
console.log(err, data);
}
session.rspOk();
}
async function buyBox(session, params) {
const token = await getToken();
const type = params[0];
const price = params[1];
const paymentTokenAddress = params[2];
const netId = await bc.getNetId();
const nonce = '' + utils.getUtcTime();
let signature = '';
{
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.getContractByName('mall')['address'],
},
message: {
item: type,
token: paymentTokenAddress,
price: price,
salt: nonce
}
};
console.log(msgParams);
signature = sigUtil.signTypedData({
'privateKey': Buffer.from(metaFactory.getPrivateKey(), 'hex'),
'data': msgParams,
'version': "V4"
});
}
{
//console.log('balance', await bc.getBalance(paymentTokenAddress));
await bc.increaseAllowance(paymentTokenAddress, price);
const params =
{
'c': 'Market',
'a': 'buyBox',
'token': token,
'type': type,
'buyer_address': metaFactory.getUserAddress(),
'price': price,
'payment_token_address': paymentTokenAddress,
'nonce': nonce,
'signature': signature,
'net_id': netId
};
const {err, data} = await http.get(BASE_URL, params);
console.log(err, params, data);
}
session.rspOk();
}
async function balance(session, params) {
const paymentTokenAddress = params[0];
console.log('balance', await bc.getBalance(paymentTokenAddress));
}
async function getPastEvents(session, params) {
const instanceName = params[0];
const eventName = params[1];
const fromBlock = params[2];
const toBlock = params[3];
const events = await bc[instanceName].getPastEvents(
eventName,
{
fromBlock: Number(fromBlock),
toBlock: toBlock,
},
);
console.log(events.length, events);
session.rspData({
'count': events.length
});
}
async function getTrans(session, params) {
const data = await bc.web3.eth.getTransaction(params[0]);
console.log(data);
session.rspData({
'data': data
});
}
async function execCmd(session) {
const cmdLine = session.request('cmd').split('.');
const cmd = cmdLine[0];
const params = cmdLine.length > 1 ? cmdLine.slice(1) : [] ;
if (cmdHash[cmd]) {
cmdHash[cmd](session, params);
} else {
session.rspErr(404, 'not found');
}
}
function init() {
app.registerHandler('GM', 'execCmd', execCmd);
cmdHash['login'] = login;
cmdHash['buyBox'] = buyBox;
cmdHash['balance'] = balance;
cmdHash['getPastEvents'] = getPastEvents;
cmdHash['getTrans'] = getTrans;
}
exports.init = init;