123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- import WalletM from "../api/WalletM";
- import LoginM from "../mgr/LoginM";
- import Utils from "../utils/Utils";
- import { Web3Result } from "./Contract";
- import { Web3Networks } from "./Web3Networks";
- declare global {
- interface Window {
- ethers: any;
- PogAdapter: {
- create: (config: PogAdapterConfig) => any;
- };
- }
- interface PogAdapterConfig {
- logOpen: boolean;
- projectId: string;
- onAccountChange: (state: any, nameSpace: any) => void;
- onNetworkChange: (state: any) => void;
- onProvidersChange: (state: any) => void;
- customNetworks: any[];
- features: {
- email: false;
- socials: [];
- analytics: true;
- emailShowWallets: false; // default to true
- };
- defaultNetwork: any;
- metadata: {
- name: string;
- description: string;
- icons: string[];
- url: string;
- };
- themeMode: any;
- }
- }
- export interface WalletListener {
- onLoginSuccess(account: string, balance: number): void;
- OnWalletDisconnected(): void;
- }
- export class WalletManager {
- async signMessage(signFullMessage: string): Promise<any> {
- if (!this.evmProvider || !this.evmProvider.provider) {
- console.error("No EVM provider available");
- return null;
- }
- let signature = null;
- try {
- signature = await this.evmProvider.provider.request({
- method: "personal_sign",
- params: [signFullMessage, this.address],
- });
- if (!signature) {
- console.error("sign message error", "signature is null");
- return null;
- }
- } catch (error) {
- console.error("sign message error", error);
- return null;
- }
- console.warn("sign message signature", signature);
- return signature;
- }
- private static _ins: WalletManager = null!;
- public address: any;
- appKitProvider: any;
- private constructor() {}
- public static get ins(): WalletManager {
- return (WalletManager._ins ??= new WalletManager());
- }
- private walletListener: WalletListener = null!;
- // private projectId = "b56e18d47c72ab683b10814fe9495694";
- private projectId = "bdbdb3ba190e30b9a9800c501848c96f";
- public init(walletListener: WalletListener) {
- this.walletListener = walletListener;
- this.initAppKit();
- }
- private pogAdapter: any = null;
- private evmProvider: any = null;
- private signer: any = null;
- public getWeb3Result() {
- let web3Result = new Web3Result();
- web3Result.evmProvider = this.evmProvider;
- web3Result.signer = this.signer;
- web3Result.account = this.address;
- return web3Result;
- }
- public getSigner() {
- if (!this.evmProvider) {
- console.error("没有evmProvider");
- return null;
- }
- if (!this.signer) {
- console.error("没有signer");
- return null;
- }
- return this.signer;
- }
- public async isConnected() {
- if (!this.evmProvider) {
- return false;
- }
- if (!this.address) {
- return false;
- }
- try {
- await this.evmProvider.getBalance(this.address);
- return true;
- } catch (error) {
- return false;
- }
- }
- public async getBalance() {
- if (!this.evmProvider) {
- return 0;
- }
- if (!this.address) {
- return 0;
- }
- let balance = await this.evmProvider.getBalance(this.address);
- return await Web3Result.formatEther(balance);
- }
- private verifySignature(signature: string) {}
- private initAppKit() {
- let self = this;
- let config: PogAdapterConfig = {
- projectId: this.projectId,
- logOpen: true,
- onAccountChange: (state, nameSpace) => {
- console.log("onAccountChange", state, nameSpace);
- },
- onNetworkChange: (state) => {
- console.log("onNetworkChange", state);
- // this.displayBalance(state);
- },
- onProvidersChange: async (state) => {
- console.log("onProvidersChange", state);
- let provider = state["eip155"];
- if (provider) {
- this.appKitProvider = provider;
- let address = await this.initProvider();
- if (address) {
- this.onWalletConnected(address);
- }
- }
- },
- customNetworks: [Web3Networks.kaia, Web3Networks.base],
- features: {
- email: false,
- socials: [],
- analytics: true,
- emailShowWallets: false, // default to true
- },
- defaultNetwork: Web3Networks.kaia,
- metadata: {
- name: "Telgather Portal",
- description: "Telgather Portal",
- icons: ["https://portal.telgather.com/h/imgs/icon_tog.png"],
- // url: window.location.href,
- url: "https://portal.telgather.com",
- },
- themeMode: "light",
- };
- this.pogAdapter = window.PogAdapter.create(config);
- }
- async onWalletConnected(address: string) {
- this.walletListener.onLoginSuccess(address, 0);
- }
- // async displayBalance(state: any) {
- // await this.initProvider();
- // if (!this.evmProvider) {
- // return;
- // }
- // if (!this.signer) {
- // return;
- // }
- // if (!this.address) {
- // return;
- // }
- // try {
- // let balance = await this.evmProvider.getBalance(this.address);
- // console.log("balance", balance);
- // let balanceNumber = await Web3Result.formatEther(balance);
- // console.log("balanceNumber", balanceNumber);
- // this.walletListener.onLoginSuccess(this.address, balanceNumber);
- // } catch (error) {
- // console.error("error", error);
- // this.walletListener.OnWalletDisconnected();
- // }
- // }
- private async initProvider(): Promise<string | null> {
- if (!this.appKitProvider) {
- console.error("没有appKitProvider");
- return;
- }
- this.evmProvider = new window.ethers.providers.Web3Provider(
- this.appKitProvider
- );
- console.log("33333", await this.evmProvider.provider.enable());
- this.signer = await this.evmProvider.getSigner();
- this.address = await this.signer.getAddress();
- return this.address;
- // console.log("signer", this.signer);
- // console.log("evmProvider", this.evmProvider);
- // console.log("address", this.address);
- // console.warn("evm provider创建成功", this.address);
- }
- public open() {
- this.pogAdapter.open();
- }
- public disconnect() {
- this.pogAdapter.disconnect();
- }
- public async switchNetwork(network: any) {
- await this.pogAdapter.switchNetwork(network);
- console.log("switchNetwork", network);
- }
- }
|