Skip to content

Commit

Permalink
Merge pull request #182 from AElfProject/feature/tg-acceleration
Browse files Browse the repository at this point in the history
feat: tg acceleration for multi-guardian
  • Loading branch information
aelf-lxy authored Nov 14, 2024
2 parents b508bae + fd27dcf commit c77d742
Show file tree
Hide file tree
Showing 24 changed files with 478 additions and 322 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,4 @@ package.json.lerna_backup

*.crt
*.pem
.eslintcache
4 changes: 4 additions & 0 deletions .stylelintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
**/*.js
**/*.jsx
**/*.ts
**/*.tsx
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"conventionalCommits.scopes": ["workspace", "web3", "icons", "common"],
"cSpell.words": ["Hevlvetica"]
"cSpell.words": ["Hevlvetica"],
"typescript.tsdk": "node_modules/typescript/lib"
}
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**aelf-web-login**: Modular React wallet collection and components for aelf applications.

**website**: https://aelf-web-login.vercel.app/
**website**: <https://aelf-web-login.vercel.app/>

<p>
<a href="https://nodejs.org/download/">
Expand Down Expand Up @@ -681,6 +681,8 @@ cd packages/starter
pnpm dev
```

OR directly filter workspace package `pnpm --filter "@aelf-web-login/doc-site" dev`

# Publish

1. Upgrade the version numbers of each sub package
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"devDependencies": {
"@babel/parser": "^7.24.0",
"@biomejs/biome": "^1.4.1",
"@changesets/changelog-git": "^0.2.1-alpha.3",
"@changesets/changelog-git": "^0.2.0",
"@changesets/cli": "^2.27.1",
"@ianvs/prettier-plugin-sort-imports": "^4.1.1",
"@testing-library/react": "^14.1.2",
Expand Down
6 changes: 3 additions & 3 deletions packages/base/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
"@babel/core": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-typescript": "^7.24.7",
"@portkey/did-ui-react": "^2.14.0-alpha.6",
"@portkey/types": "^2.14.0-alpha.6",
"@portkey/did-ui-react": "^2.15.9",
"@portkey/types": "^2.15.9",
"@types/jest": "^29.5.12",
"babel-jest": "^29.7.0",
"jest": "^29.7.0",
Expand All @@ -44,7 +44,7 @@
"typescript": "^5.3.3"
},
"peerDependencies": {
"@portkey/did-ui-react": "^2.14.0-alpha.6"
"@portkey/did-ui-react": "^2.15.9"
},
"publishConfig": {
"registry": "https://registry.npmjs.org",
Expand Down
2 changes: 1 addition & 1 deletion packages/base/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export interface IWalletAdapter<Name extends string = string> {
onUnlock?: (pin: string) => Promise<TWalletInfo>;
lock?: () => void;
loginWithAcceleration?: (createPendingInfo: CreatePendingInfo) => Promise<TWalletInfo>;
loginCompletely?: (arg: DIDWalletInfo) => Promise<void>;
onLoginComplete?: (arg: DIDWalletInfo) => Promise<void>;
sendMultiTransaction?<T>(params: IMultiTransactionParams<T>): Promise<IMultiTransactionResult>;
}

Expand Down
5 changes: 4 additions & 1 deletion packages/base/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { SendOptions, IContract, LoginStatusEnum } from '@portkey/types';
import { BaseGuardianItem } from '@portkey/did-ui-react';
import { IContract, LoginStatusEnum, SendOptions } from '@portkey/types';

export enum WalletStateEnum {
// Wallet plug-in detected
Expand Down Expand Up @@ -52,10 +53,12 @@ export interface ICallContractParams<T> {
args: T;
chainId?: TChainId;
sendOptions?: SendOptions;
approvedGuardians?: BaseGuardianItem[];
}

export interface ISendOrViewAdapter<T> extends ICallContractParams<T> {
caContract: IContract;
approvedGuardians: ICallContractParams<T>['approvedGuardians'];
type?: string;
}

Expand Down
9 changes: 5 additions & 4 deletions packages/bridge/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,23 @@
},
"dependencies": {
"@aelf-web-login/wallet-adapter-base": "workspace:*",
"@portkey/services": "^2.14.0-alpha.6",
"@portkey/services": "^2.15.9",
"@reduxjs/toolkit": "^2.2.3",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
"devDependencies": {
"@portkey/types": "^2.14.0-alpha.6",
"@portkey/did-ui-react": "^2.14.0-alpha.6",
"@portkey/types": "^2.15.9",
"@portkey/did-ui-react": "^2.15.9",
"@portkey/utils": "^2.15.9",
"@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0",
"antd": "4.24.14",
"father": "^4.3.8",
"typescript": "^5.3.3"
},
"peerDependencies": {
"@portkey/did-ui-react": "^2.14.0-alpha.6"
"@portkey/did-ui-react": "^2.15.9"
},
"publishConfig": {
"registry": "https://registry.npmjs.org",
Expand Down
69 changes: 61 additions & 8 deletions packages/bridge/src/bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,19 @@ import {
setLoginError,
clearLoginError,
setLoginOnChainStatus,
store,
IsManagerReadOnlyStatusEnum,
setIsManagerReadOnlyStatus,
} from './store';
import { CreatePendingInfo, DIDWalletInfo, TelegramPlatform } from '@portkey/did-ui-react';
import { IBaseConfig } from '.';
import {
clearManagerReadonlyStatusInMainChain,
clearManagerReadonlyStatusInSideChain,
EE,
SET_GUARDIAN_APPROVAL_MODAL,
SET_GUARDIAN_APPROVAL_PAYLOAD,
} from './utils';

const { isPortkeyApp } = utils;
let isDisconnectClicked = false;
Expand All @@ -41,9 +51,11 @@ class Bridge {
private _logoutReject: (arg: boolean) => void;
private _eventMap: Record<keyof IWalletAdapterEvents, any> = {} as IWalletAdapterEvents;
private _noCommonBaseModal: boolean;
private _sideChainId: TChainId;

constructor(wallets: WalletAdapter[], { noCommonBaseModal = false }: IBaseConfig) {
constructor(wallets: WalletAdapter[], { sideChainId, noCommonBaseModal = false }: IBaseConfig) {
this._noCommonBaseModal = noCommonBaseModal;
this._sideChainId = sideChainId;
this._wallets = wallets;
this._activeWallet = undefined;
this._loginResolve = () => {};
Expand Down Expand Up @@ -170,8 +182,43 @@ class Bridge {
) {
return null as R;
}
const rs = await this.activeWallet?.callSendMethod(props);
return rs as R;
const { isManagerReadOnlyStatus } = store.getState();
if (
this.isAAWallet &&
isManagerReadOnlyStatus === IsManagerReadOnlyStatusEnum.TRUE &&
props.methodName !== 'Approve'
) {
EE.emit(SET_GUARDIAN_APPROVAL_MODAL, true);
const { guardians, caHash, caAddress } = await this.getApprovalModalGuardians();
console.log('intg----getApprovalModalGuardians', guardians, caHash, caAddress);
const rs = await this.activeWallet?.callSendMethod({
...props,
approvedGuardians: guardians,
});
console.log('intg---rs of callSendMethod', rs);
dispatch(setIsManagerReadOnlyStatus(false));
if (props.chainId === 'AELF') {
clearManagerReadonlyStatusInSideChain(this._sideChainId, caAddress, caHash, guardians);
} else {
clearManagerReadonlyStatusInMainChain(caAddress, caHash, guardians);
}
return rs as R;
} else {
const rs = await this.activeWallet?.callSendMethod(props);
return rs as R;
}
};

getApprovalModalGuardians = async (): Promise<{
guardians: any[];
caHash: string;
caAddress: string;
}> => {
return new Promise((resolve) => {
EE.once(SET_GUARDIAN_APPROVAL_PAYLOAD, (result) => {
resolve(result);
});
});
};

sendMultiTransaction = async <T>(
Expand Down Expand Up @@ -339,20 +386,26 @@ class Bridge {
}
};

onPortkeyAAWalletLoginFinishedWithAcceleration = (didWalletInfo: DIDWalletInfo) => {
onPortkeyAAWalletLoginWithAccelerationFinished = (didWalletInfo: DIDWalletInfo) => {
try {
if (
!this.activeWallet?.loginCompletely ||
typeof this.activeWallet.loginCompletely !== 'function'
!this.activeWallet?.onLoginComplete ||
typeof this.activeWallet.onLoginComplete !== 'function'
) {
return;
}
this.activeWallet.loginCompletely(didWalletInfo);
this.activeWallet.onLoginComplete(didWalletInfo);
} catch (error) {
console.log('onPortkeyAAWalletLoginFinishedWithAcceleration', error);
console.log('onPortkeyAAWalletLoginWithAccelerationFinished', error);
}
};

/**
* @deprecated use onPortkeyAAWalletLoginWithAccelerationFinished
*/
onPortkeyAAWalletLoginFinishedWithAcceleration =
this.onPortkeyAAWalletLoginWithAccelerationFinished;

onPortkeyAAWalletLoginFinished = async (didWalletInfo: DIDWalletInfo) => {
try {
this.closeLoginPanel();
Expand Down
1 change: 1 addition & 0 deletions packages/bridge/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type BaseConfigProviderProps = Omit<React.ComponentProps<typeof PortkeyProvider>
export interface IBaseConfig {
networkType: NetworkEnum;
chainId: TChainId;
sideChainId: TChainId;
keyboard?: boolean;
design?: SignInDesignEnum;
iconSrcForSocialDesign?: string;
Expand Down
25 changes: 23 additions & 2 deletions packages/bridge/src/store.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
import { createSlice, configureStore, EnhancedStore } from '@reduxjs/toolkit';
import { TWalletInfo, WalletTypeEnum, TWalletError } from '@aelf-web-login/wallet-adapter-base';
import { TWalletError, TWalletInfo, WalletTypeEnum } from '@aelf-web-login/wallet-adapter-base';
import { BaseGuardianItem } from '@portkey/did-ui-react';
import { LoginStatusEnum } from '@portkey/types';
import { configureStore, createSlice, EnhancedStore } from '@reduxjs/toolkit';

export enum IsManagerReadOnlyStatusEnum {
INIT = 'INIT',
TRUE = 'TRUE',
FALSE = 'FALSE',
}

type TState = {
walletInfo: TWalletInfo;
isLocking: boolean;
walletType: WalletTypeEnum;
loginError: TWalletError | null;
loginOnChainStatus: LoginStatusEnum;
approvedGuardians: BaseGuardianItem[];
isManagerReadOnlyStatus: IsManagerReadOnlyStatusEnum;
};

const initialState: TState = {
Expand All @@ -16,6 +25,8 @@ const initialState: TState = {
walletType: WalletTypeEnum.unknown,
loginError: null,
loginOnChainStatus: LoginStatusEnum.INIT,
approvedGuardians: [],
isManagerReadOnlyStatus: IsManagerReadOnlyStatusEnum.INIT,
};

const aelfWebLoginSlice = createSlice({
Expand Down Expand Up @@ -46,6 +57,14 @@ const aelfWebLoginSlice = createSlice({
setLoginOnChainStatus: (state, action) => {
state.loginOnChainStatus = action.payload;
},
setApprovedGuardians: (state, action) => {
state.approvedGuardians = action.payload;
},
setIsManagerReadOnlyStatus: (state, action) => {
state.isManagerReadOnlyStatus = action.payload
? IsManagerReadOnlyStatusEnum.TRUE
: IsManagerReadOnlyStatusEnum.FALSE;
},
},
});

Expand Down Expand Up @@ -86,6 +105,8 @@ export const {
setLoginError,
clearLoginError,
setLoginOnChainStatus,
setApprovedGuardians,
setIsManagerReadOnlyStatus,
} = aelfWebLoginSlice.actions;

export type AppDispatch = typeof store.dispatch;
Expand Down
Loading

0 comments on commit c77d742

Please sign in to comment.