增加sign with apple

This commit is contained in:
cebgcontract 2022-11-29 14:21:20 +08:00
parent 062f2e4852
commit f38a4354fd
8 changed files with 108 additions and 64 deletions

22
src/JCWallet.d.ts vendored
View File

@ -12,4 +12,26 @@ declare namespace jc {
export const wallet: JCWallet;
}
declare namespace jsb {
export function walletSign(str: string);
export function loadLocalStorage(key: string);
export function signWithGoogle(id: number);
export function signWithApple(id: number);
export function signOutGoogle(id: number);
export function scanQRCode(id: number, title: string);
export function restoreKey(id: number, oid: string);
export function generateWallet(idHash: string, seedHash: string);
export function prepareWallet(
idHash: string,
seedHash: string,
key_master: string
);
export function restoreWallet(
idHash: string,
seedHash: string,
key_master: string,
key_restore: any
);
}
declare let window: Window;

View File

@ -6,12 +6,18 @@ export function googleAuth(idToken: string) {
return POST_JSON(url, { token: idToken });
}
export function appleAuth(idToken: string) {
const url = `${WALLET_API_HOST}/wallet/login/apple`;
return POST_JSON(url, { token: idToken });
}
export function getWalletInfo() {
const url = `${WALLET_API_HOST}/wallet/info`;
return GET_JSON(url);
}
export function uploadWalletInfo(data) {
console.log("uploadWalletInfo: " + data);
const url = `${WALLET_API_HOST}/wallet/info`;
return POST_JSON(url, data);
}

View File

@ -94,13 +94,13 @@ export const DEFALUT_TOKENS = {
},
{
type: "erc20",
address: "0x89c320c75520777AB36f4924cE57c65960370fE1",
address: "0x9561C133DD8580860B6b7E504bC5Aa500f0f06a7",
symbol: "CEC",
decimal: 18,
},
{
type: "erc20",
address: "0x070a69230a08B93807c43a96327ff091aE7fC04D",
address: "0x59d3631c86BbE35EF041872d502F218A39FBa150",
symbol: "CEG",
decimal: 18,
},
@ -182,19 +182,19 @@ export const DEFAULT_NFT_TYPES = {
},
1338: {
hero: {
address: "0xE9809Eb4231EE76963842A4cd8c89bD06dF5F09E",
address: "0x9b1f7F645351AF3631a656421eD2e40f2802E6c0",
type: "erc721",
},
weapon: {
address: "0x6E62eFEAb443bd1B233C4DF795Da4794511a8907",
address: "0x2612Af3A521c2df9EAF28422Ca335b04AdF3ac66",
type: "erc721",
},
chip: {
address: "0xAE3b465F19Bf5B0B2ef94A1acFd41b412b1D36b2",
address: "0x26b4AFb60d6C903165150C6F0AA14F8016bE4aec",
type: "erc1155",
},
shard: {
address: "0x7B08143e8B24F98Bc48D432f52C29b3cE15Ba78A",
address: "0x0E696947A06550DEf604e82C26fd9E493e576337",
type: "erc1155",
},
},
@ -223,9 +223,9 @@ export const JC_CONTRACTS = {
chipLocker: "0x4Ef766854EE104053cF2D243620b7A643fCC2B54",
},
1338: {
nftMall: "0x24eB97E328d7D513a9eb4AA91206d0cF2Ab78Ee0",
evolveFactory: "0x12F2df43A6385B8D5D6730822A09a2D6c42b61c0",
minterFactory: "0x0Ca8A551544d39eb71BD0F70Af22e126C263409A",
chipLocker: "0x757dbc31BB286832d21C505F1D80FbcfF6756e49",
nftMall: "0x5017A545b09ab9a30499DE7F431DF0855bCb7275",
evolveFactory: "0xaD888d0Ade988EbEe74B8D4F39BF29a8d0fe8A8D",
minterFactory: "0x6eD79Aa1c71FD7BdBC515EfdA3Bd4e26394435cC",
chipLocker: "0xFF6049B87215476aBf744eaA3a476cBAd46fB1cA",
},
};

View File

@ -110,8 +110,8 @@ export default class JCWallet {
}
}
public async initInternalWallet() {
let address: string = await loadInternalWallet();
public async initInternalWallet(channel: number) {
let address: string = await loadInternalWallet(channel);
this.nativeAccount = address;
console.log("native wallet address: " + address);
var start = Date.now();

View File

@ -2,7 +2,12 @@ import { hdkey } from "ethereumjs-wallet";
import { generateMnemonic, mnemonicToSeedSync } from "bip39";
import { loadMnemonic, saveMnemonic } from "./DataManage";
import { NativeSvr } from "../services/NativeSvr";
import { getWalletInfo, googleAuth, uploadWalletInfo } from "../api/WalletApi";
import {
appleAuth,
getWalletInfo,
googleAuth,
uploadWalletInfo,
} from "../api/WalletApi";
import { WalletEnv } from "../config/WalletEnv";
import { md5Hash, sha1Hash } from "../util/crypto.util";
import { retry } from "../util/promise.util";
@ -30,11 +35,19 @@ export function restoreWalletByMnemonic(mnemonic: string, password: string) {
saveMnemonic(mnemonic, password);
}
export async function loadInternalWallet() {
let res: any = await new NativeSvr().signWithGoogle();
console.log("native res: " + res);
let tokenRes = await googleAuth(res);
export async function loadInternalWallet(channel: number) {
let tokenRes: any;
if (channel == 1) {
let res: any = await new NativeSvr().signWithApple();
console.log("native apple res: " + res);
tokenRes = await appleAuth(res);
} else {
let res: any = await new NativeSvr().signWithGoogle();
console.log("native google res: " + res);
tokenRes = await googleAuth(res);
}
console.log("wallet token: " + tokenRes.data?.token);
console.log(tokenRes);
if (tokenRes.errcode || !tokenRes.data?.token) {
return;
}
@ -60,33 +73,31 @@ export async function loadInternalWallet() {
let idHash = md5Hash(infoRes.data.oid);
if (!infoRes.data.key) {
let time = Date.now();
//@ts-ignore
console.log(jsb.generateWallet);
//@ts-ignore
let strWallet = jsb.generateWallet(idHash, seedHash);
console.log("generate wallet cost: " + (Date.now() - time) / 1000);
window.debug && console.log("native wallet info " + strWallet);
let walletInfo = JSON.parse(strWallet);
address = walletInfo.address;
setImmediate(function () {
retry(
() => uploadWalletInfo({ key: walletInfo.master }),
MAX_UPLOAD_COUNT
);
});
// setImmediate(function () {
// });
retry(() => uploadWalletInfo({ key: walletInfo.master }), MAX_UPLOAD_COUNT);
} else {
let localSKey = localStorage.getItem("cebg_wallet_s_" + idHash);
let localBKey = localStorage.getItem("cebg_wallet_b_" + idHash);
let localSKey, localBKey;
if (jsb.loadLocalStorage) {
localSKey = jsb.loadLocalStorage("cebg_wallet_s_" + idHash);
localBKey = jsb.loadLocalStorage("cebg_wallet_b_" + idHash);
} else {
localSKey = localStorage.getItem("cebg_wallet_s_" + idHash);
localBKey = localStorage.getItem("cebg_wallet_b_" + idHash);
}
if (localSKey || localBKey) {
//@ts-ignore
let strWallet = jsb.prepareWallet(idHash, seedHash, infoRes.data.key);
let walletInfo = JSON.parse(strWallet);
address = walletInfo.address;
} else {
let qrResult = await new NativeSvr().restoreKey(idHash);
// let qrResult =
// "cd00eb0126aeed39762579ce94c90a04695ad17fbd5e79aa4e9fc4a34ba32a5";
//@ts-ignore
let strWallet = jsb.restoreWallet(
idHash,
seedHash,
@ -108,7 +119,6 @@ export async function loadInternalWallet() {
}
export function walletSign(str: string) {
//@ts-ignore
let result = jsb.walletSign(str);
return result;
}

View File

@ -30,28 +30,30 @@ export class NativeSvr {
public signWithGoogle() {
let id = payloadId();
//@ts-ignore
jsb.signWithGoogle(id);
return this._subscribeToCallResponse(id);
}
public signWithApple() {
let id = payloadId();
jsb.signWithApple(id);
return this._subscribeToCallResponse(id);
}
public signOutGoogle() {
let id = payloadId();
//@ts-ignore
jsb.signOutGoogle(id);
return this._subscribeToCallResponse(id);
}
public scanQRCode(title: string) {
let id = payloadId();
//@ts-ignore
jsb.scanQRCode(id, title);
return this._subscribeToCallResponse(id);
}
public restoreKey(oid: string) {
let id = payloadId();
//@ts-ignore
jsb.restoreKey(id, oid);
return this._subscribeToCallResponse(id);
}

View File

@ -53,15 +53,9 @@ export class JCStandard {
jumpToWallet();
}, 1500);
}
let result;
try {
result = await contract.methods
.buy721NFT(addresses, values, signature)
.send({ gas: (gas * 1.1) | 0 });
} catch (err) {
console.log(JSON.stringify(err));
}
return result;
return contract.methods
.buy721NFT(addresses, values, signature)
.send({ gas: (gas * 1.1) | 0 });
}
async buyNft1155({

View File

@ -1,29 +1,33 @@
import { signTypedData, SignTypedDataVersion, TypedMessage } from "@metamask/eth-sig-util"
import {
signTypedData,
SignTypedDataVersion,
TypedMessage,
} from "@metamask/eth-sig-util";
export function buildLoginSignMsg(nonce: string, tips: string) {
const signMsg = {
tips,
nonce,
}
};
const signObj = {
types: {
EIP712Domain: [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' }
],
set: [
{ name: 'tips', type: 'string' },
{ name: 'nonce', type: 'string' }
]
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'
name: "Auth",
version: "1",
},
message: signMsg
}
return signObj
message: signMsg,
};
return signObj;
}
export function signLogin(nonce: string, tips: string, privateKey: string) {
@ -31,7 +35,13 @@ export function signLogin(nonce: string, tips: string, privateKey: string) {
return signTypedData({
//@ts-ignore
data: signObj,
privateKey: Buffer.from(privateKey.replace('0x', ''), 'hex'),
version: SignTypedDataVersion.V4
})
privateKey: Buffer.from(privateKey.replace("0x", ""), "hex"),
version: SignTypedDataVersion.V4,
});
}
const REG_KEY = /^[0-9a-fA-F]{63,64}$/;
export function isEncrypt(msg: string) {
return !REG_KEY.test(msg);
}