250 lines
7.0 KiB
JavaScript
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;
|