512 lines
12 KiB
JavaScript
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));
|
|
}
|