This commit is contained in:
aozhiwei 2023-07-10 17:05:00 +08:00
parent 911c2572ac
commit 9712ad3914
3 changed files with 108 additions and 0 deletions

View File

@ -0,0 +1,108 @@
const ethUtil = require('ethereumjs-util');
const sigUtil = require('@metamask/eth-sig-util');
const app = require('j7/app');
const utils = require('j7/utils');
const bcutils = require('j7/bcutils');
const bc = require('../blockchain');
const metaFactory = require('../metadata/factory');
async function activate721Nft(session) {
try {
const accountId = session.request('account_id');
const account = session.request('account');
const sessionId = session.request('session_id');
const tokenId = session.request('token_id');
const tokenType = session.request('token_type');
const itemUniId = session.request('item_uniid');
const itemId = session.request('item_id');
const nftAddress = bc.getNftAddress(tokenType);
const userAddress = metaFactory.getUserAddress();
{
const itemMeta = metaFactory.getMetaByKey('Item', itemId);
if (!itemMeta) {
session.rspErr(101, 'item_id param error');
return;
}
if (itemMeta.getNftType() != tokenType) {
session.rspErr(101, 'item_id param error');
return;
}
if (!(itemMeta.getNftType() == bcutils.HERO_TYPE ||
itemMeta.getNftType() == bcutils.EQUIP_TYPE ||
itemMeta.getNftType() == bcutils.CHIP_TYPE)) {
session.rspErr(101, 'token_type param error');
return;
}
}
{
if (!nftAddress) {
session.rspErr(101, 'token_type param error');
return;
}
}
const transModel = session.createModel('Transaction');
const {err, seqId} = await transModel.add(account, session.requestToJson());
if (err) {
session.rspErr(500, 'server internal error');
return;
}
const nowTime = utils.getUtcTime();
const transId = bcutils.genTransId
(
bcutils.BC_TRANS_FUNC_ACTIVATE,
nowTime,
seqId,
[
itemUniId,
itemId
]
);
await transModel.update
(
seqId,
[
['trans_id', transId]
]);
const nonce = transId;
const tokenIds = [tokenId];
utils.arrayToStrings(tokenIds);
let signStr = await bc.web3.utils.soliditySha3
(
account,
nftAddress,
nowTime,
nonce,
...tokenIds
);
let signature = await bc.web3.eth.sign(signStr, userAddress);
signature = signature.replace(/00$/, "1b").replace(/01$/, "1c");
const rspParams = [
nftAddress,
utils.jsonEncode(tokenIds),
nowTime,
nonce,
signature
];
utils.arrayToStrings(rspParams);
session.rspData({
'trans_id' : transId,
'params': rspParams
});
} catch (e) {
session.rspErr(1, 1);
console.log(e);
}
}
function init() {
app.registerHandler('BcService', 'activate721Nft', activate721Nft);
}
exports.init = init;