2023-05-16 19:43:14 +08:00

512 lines
12 KiB
JavaScript

console.log(">> begin load wallet main file.");
function promiseCb(funId, promiseFun, dataParser) {
dataParser = dataParser || ((v) => v);
promiseFun
.then((result) => {
jsb.jcCallback(
funId,
JSON.stringify({ errcode: 0, data: dataParser(result) })
);
})
.catch((err) => {
let code = err.statusCode || 1;
jsb.jcCallback(
funId,
JSON.stringify({ errcode: code, errmsg: err.message || err })
);
});
}
/**
* oauth login before init internal wallet
* @param {*} channel 0: google, 1: apple, 2: tiktok, 3: facebook, 4: twitter 5: tg
*/
function walletLogin(funId, channel) {
channel = parseInt(channel);
console.log("walletLogin: " + channel);
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 0 }) : jc.wallet;
promiseCb(funId, wallet.preLogin(channel));
}
/**
* init internal wallet with password
* @param {number | string} chain chain id
* @param {string} pass
*/
function initInternalWallet(funId, chain, pass) {
chain = parseInt(chain);
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 0 }) : jc.wallet;
promiseCb(funId, wallet.initInternalWallet(chain, pass), () => {
return jc.wallet.nativeAccount;
});
}
/**
* verify if password is correct
* compare with local password hash
* @param {string} pass password for wallet
*/
function verifyPassword(funId, pass) {
try {
let result = jsb.verifyLocalPass(pass);
return JSON.stringify({ errcode: 0, data: result });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
/**
* init third party wallet
* @param {number | string} chain chain id
*/
function initThirdPartyWallet(funId, chain) {
chain = parseInt(chain);
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 1 }) : jc.wallet;
promiseCb(funId, wallet.initThirdPartyWallet(chain), () => {
return jc.wallet.currentAccount();
});
}
/**
* current account for internal wallet
*/
function currentAccount(funId) {
try {
let data = jc.wallet.currentAccountData;
return JSON.stringify({ errcode: 0, data });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
/**
* all chain list we supported
*/
function chainList(funId) {
try {
let data = jc.wallet.chainList;
return JSON.stringify({ errcode: 0, data });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
/**
* chain active
*/
function currentChain(funId) {
try {
let data = jc.wallet.currentChain;
return JSON.stringify({ errcode: 0, data });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
/**
* [BOTH]change chain
*/
function changeChain(funId, chainId) {
chainId = parseInt(chainId);
promiseCb(funId, jc.wallet.updateCurrentChain(chainId));
}
/**
* [BOTH] get sign for login
* @param {string} nonce: nonce from server
* @param {string} tips: tips message when sign
*/
function loginSign(funId, nonce, tips) {
promiseCb(funId, jc.wallet.loginSign(nonce, tips));
}
/**
* get balance of ETH
* @param {string} account: account
* if account is null, we`ll query for current account of wallet
*/
function getEthBalance(funId, account) {
promiseCb(funId, jc.wallet.getBalance(account));
}
/**
* send ETH from current account
* @param {string} to: target account
* @param {string} amount:
* @param {number} estimate: 1: only estimate gas price
*/
function sendEth(funId, to, amount, estimate) {
estimate = (estimate || "0") | 0;
promiseCb(funId, jc.wallet.sendEth(to, amount, estimate));
}
/**
* [BOTH] generate ICON with hashed message
* @param {string} msg:
* @param {string} diameter: size of icon
*/
function generateIcon(funId, msg, diameter) {
try {
diameter = parseFloat(diameter);
let result = jc.wallet.generateIconData(msg, diameter);
return JSON.stringify({ errcode: 0, data: result });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
/**
* get symbol and decimal of ERC20, symbol and decimal
* @param {string} address: address of ERC20
*/
function erc20Info(funId, address) {
promiseCb(funId, jc.wallet.erc20Info(address));
}
/**
* get balance of ERC20
* @param {string} address:
* @param {string} account:
*/
function erc20Balance(funId, address, account) {
promiseCb(funId, jc.wallet.erc20Balance(address, account));
}
/**
* send ERC20 token to to
*/
function sendErc20(funId, address, to, amount, estimate) {
estimate = (estimate || "0") | 0;
promiseCb(funId, jc.wallet.sendErc20(address, to, amount, estimate));
}
/**
* send ERC721 NFT to to
*/
function sendErc721(funId, address, to, tokenId, estimate) {
estimate = (estimate || "0") | 0;
promiseCb(funId, jc.wallet.sendNFT(address, to, tokenId, estimate));
}
/**
* get balance of ERC1155
* @param {string} address:
* @param {string} account:
* @param {string} tokenId:
*/
function erc1155Balance(funId, address, account, tokenId) {
promiseCb(funId, jc.wallet.erc1155Balance(address, account, tokenId));
}
/**
* send ERC1155 to to
*/
function sendErc1155(funId, address, to, tokenIds, amounts, estimate) {
tokenIds = JSON.parse(tokenIds);
amounts = JSON.parse(amounts);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.sendErc1155(address, to, tokenIds, amounts, estimate)
);
}
function showQRCode(funId, content) {
try {
jsb.showQRCode(funId, content);
return JSON.stringify({ errcode: 0, data: 1 });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
function showWebPage(funId, url) {
try {
jsb.showWebPage(funId, url);
// jsb.openURL(url);
return JSON.stringify({ errcode: 0, data: 1 });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
function scanQRCode(funId, title) {
console.log("scanQRCode: " + title);
promiseCb(funId, jc.wallet.nativeSvr.scanQRCode(title));
}
function exportWalletSecKey(funId, pass) {
try {
let key = jsb.walletSecKey(funId);
return JSON.stringify({ errcode: 0, data: key });
} catch (err) {
return JSON.stringify({ errcode: 1, errmsg: err.message || err });
}
}
// ======= begin of interact with contract =======
function buyNft721(funId, addresses, values, signature, estimate) {
addresses = JSON.parse(addresses);
values = JSON.parse(values);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.buyNft721({
addresses,
values,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
function buyNft1155(
funId,
addresses,
values,
ids,
amounts,
signature,
estimate
) {
addresses = JSON.parse(addresses);
values = JSON.parse(values);
ids = JSON.parse(ids);
amounts = JSON.parse(amounts);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.buyNft1155({
addresses,
values,
ids,
amounts,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
function evolveNft721(
funId,
nftAddress,
tokenIds,
startTime,
nonce,
signature,
estimate
) {
tokenIds = JSON.parse(tokenIds);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.evolve721NFT({
nftAddress,
tokenIds,
startTime,
nonce,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
function evolveChip(funId, tokenIds, startTime, nonce, signature, estimate) {
tokenIds = JSON.parse(tokenIds);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.evolveChip({
tokenIds,
startTime,
nonce,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
function mintShardBatchUser(
funId,
tokenIds,
amounts,
startTime,
nonce,
signature,
estimate
) {
tokenIds = JSON.parse(tokenIds);
amounts = JSON.parse(amounts);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.mintShardBatchUser({
tokenIds,
amounts,
startTime,
nonce,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
function shardMixByUser(
funId,
tokenId,
nftType,
payToken,
payAmount,
ids,
amounts,
startTime,
nonce,
signature,
estimate
) {
ids = JSON.parse(ids);
amounts = JSON.parse(amounts);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.shardMixByUser({
tokenId,
nftType,
payToken,
payAmount,
ids,
amounts,
startTime,
nonce,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
// addresses: [nftId, chip, sign_address]
// values: [token_id,salt_nonce,startTime]
// chipIds: [...chipIds]
function pluginChip(
funId,
addresses,
values,
chipIds,
slots,
signature,
estimate
) {
estimate = (estimate || "0") | 0;
addresses = JSON.parse(addresses);
values = JSON.parse(values);
chipIds = JSON.parse(chipIds);
slots = JSON.parse(slots);
promiseCb(
funId,
jc.wallet.jcStandard.pluginChip({
addresses,
values,
chipIds,
slots,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
// addresses: [nftId, chip, sign_address]
// values: [token_id,salt_nonce,startTime]
// chipIds: [...chipIds]
function unplugChip(
funId,
addresses,
values,
chipIds,
slots,
signature,
estimate
) {
addresses = JSON.parse(addresses);
values = JSON.parse(values);
chipIds = JSON.parse(chipIds);
slots = JSON.parse(slots);
estimate = (estimate || "0") | 0;
promiseCb(
funId,
jc.wallet.jcStandard.unplugChip({
addresses,
values,
chipIds,
slots,
signature,
estimate,
}),
(v) => JSON.stringify(v)
);
}
// ======= end of interact with contract =======
// ======= begin of transaction history =======
function ethHistory(funId, start, limit) {
promiseCb(funId, jc.wallet.historySvr.ethRecords(start, limit));
}
function tokenHistory(funId, start, limit, address, tokenId) {
var data = { start, limit, address, tokenId };
promiseCb(funId, jc.wallet.historySvr.tokenRecords(data));
}
// ======= end of transaction history =======
/**
* get email info of current user
*/
function emailInfo(funId) {
promiseCb(funId, jc.wallet.emailVerifySvr.checkEmailVerified());
}
/**
* send code with email
* @param {*} email
* @param {*} type
*/
function sendEmailCode(funId, email, type) {
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 0 }) : jc.wallet;
promiseCb(funId, wallet.emailVerifySvr.sendEmailCode(email, type));
}
/**
* verify email with code, and update email
* @param {*} email
* @param {*} code
*/
function verifyEmail(funId, email, code) {
promiseCb(funId, jc.wallet.emailVerifySvr.updateEmailVerify(email, code));
}
/**
* check if email had already been registed
* @param {*} email
*/
function checkEmailExists(funId, email) {
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 0 }) : jc.wallet;
promiseCb(funId, wallet.emailVerifySvr.isEmailRegister(email));
}
/**
* regist with email
* @param {*} email
* @param {*} password
* @param {*} code
*/
function emailRegist(funId, email, password, code) {
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 0 }) : jc.wallet;
promiseCb(funId, wallet.emailVerifySvr.registByEmail(email, password, code));
}
function emailLogin(funId, email, password) {
const wallet =
!window.jc || !jc.wallet ? new jcwallet.default({ type: 0 }) : jc.wallet;
promiseCb(funId, wallet.emailLogin(email, password));
}