Skip to content

Commit

Permalink
Merge branch 'fix/walletconnect-fix' into 'develop'
Browse files Browse the repository at this point in the history
fix/walletconnect-fix

See merge request papers/airgap/airgap-wallet!734
  • Loading branch information
godenzim committed Jan 26, 2024
2 parents d48394c + 6d535e4 commit 5066a9f
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 25 deletions.
52 changes: 47 additions & 5 deletions src/app/pages/walletconnect/handler/walletconnect-v2.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ export class WalletconnectV2Handler implements WalletconnectHandler<Walletconnec
}

// eslint-disable-next-line prettier/prettier
const requiredEthNamespace: Web3WalletTypes.SessionProposal['params']['requiredNamespaces'][string] =
(proposal.params.requiredNamespaces ?? {})[Namespace.ETH] ?? { methods: [], events: [] }
const requiredEthNamespace: Web3WalletTypes.SessionProposal['params']['requiredNamespaces'][string] = (proposal.params
.requiredNamespaces ?? {})[Namespace.ETH] ?? { methods: [], events: [] }
// eslint-disable-next-line prettier/prettier
const optionalEthNamespace: Web3WalletTypes.SessionProposal['params']['optionalNamespaces'][string] =
(proposal.params.optionalNamespaces ?? {})[Namespace.ETH] ?? { methods: [], events: [] }
const optionalEthNamespace: Web3WalletTypes.SessionProposal['params']['optionalNamespaces'][string] = (proposal.params
.optionalNamespaces ?? {})[Namespace.ETH] ?? { methods: [], events: [] }

// for now, let's use the selected account for all required chains
if (ethAccounts.length === 1) {
Expand Down Expand Up @@ -147,12 +147,54 @@ export class WalletconnectV2Handler implements WalletconnectHandler<Walletconnec
case EthMethods.WALLET_SWITCH_ETHEREUM_CHAIN:
return this.readWalletSwitchEthereumChain(request, client)
case EthMethods.ETH_SIGN_TYPED_DATA:
return { type: 'unsupported', namespace: Namespace.ETH, method: EthMethods.ETH_SIGN_TYPED_DATA }
case EthMethods.ETH_SIGN_TYPED_DATA_V3:
case EthMethods.ETH_SIGN_TYPED_DATA_V4:
return this.readEthSignTypedData(request, client)
case EthMethods.ETH_SIGN:
return this.readEthSign(request, client)
// return { type: 'unsupported', namespace: Namespace.ETH, method: EthMethods.ETH_SIGN_TYPED_DATA }
default:
return { type: 'unsupported', namespace: Namespace.ETH }
}
}

private readEthSign(request: Web3WalletTypes.SessionRequest, client: V2Client): WalletconnectMessage {
request.params.request.params = [request.params.request.params[1], request.params.request.params[0]]
return {
type: 'signRequest',
version: 2,
namespace: Namespace.ETH,
chain: request.params.chainId,
request: {
id: `${request.id}:${request.topic}`,
method: EthMethods.ETH_SIGN,
params: request.params.request.params
},
cancel: async (): Promise<void> => {
rejectRequest(client, request.id, request.topic)
}
}
}

private readEthSignTypedData(request: Web3WalletTypes.SessionRequest, client: V2Client): WalletconnectMessage {
request.params.request.params = [request.params.request.params[1], request.params.request.params[0]]

return {
type: 'signRequest',
version: 2,
namespace: Namespace.ETH,
chain: request.params.chainId,
request: {
id: `${request.id}:${request.topic}`,
method: EthMethods.ETH_SIGN_TYPED_DATA,
params: request.params.request.params
},
cancel: async (): Promise<void> => {
rejectRequest(client, request.id, request.topic)
}
}
}

private readEthSendTransaction(request: Web3WalletTypes.SessionRequest, client: V2Client): WalletconnectMessage {
return {
type: 'signRequest',
Expand Down
2 changes: 1 addition & 1 deletion src/app/pages/walletconnect/walletconnect.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
</div>
</div>

<div *ngIf="mode === Mode.SIGN_MESSAGE">
<div *ngIf="mode === Mode.SIGN_MESSAGE || mode === Mode.ETH_SIGN_TYPED_DATA || mode === Mode.ETH_SIGN">
<ion-row class="rawdata--container">
<ion-col class="ion-no-padding">
<pre class="ion-no-margin">{{ beaconRequest | json }}</pre>
Expand Down
49 changes: 31 additions & 18 deletions src/app/pages/walletconnect/walletconnect.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ enum Mode {
PERMISSION_REQUEST = 'permissionRequest',
SIGN_TRANSACTION = 'signTransaction',
SIGN_MESSAGE = 'signMessage',
SWITCH_ACCOUNT = 'switchAccount'
SWITCH_ACCOUNT = 'switchAccount',
ETH_SIGN_TYPED_DATA = 'eth_signTypedData',
ETH_SIGN = 'eth_sign'
}

@Component({
Expand Down Expand Up @@ -137,24 +139,35 @@ export class WalletconnectPage implements OnInit {
await this.permissionRequest(this.message)
}

if (
this.message.type === 'signRequest' &&
this.message.namespace === Namespace.ETH &&
this.message.request.method === EthMethods.ETH_SENDTRANSACTION
) {
this.mode = Mode.SIGN_TRANSACTION
this.title = this.translateService.instant('walletconnect.new_transaction')
await this.operationRequest(this.message as WalletconnectSignRequest<EthTx>)
}
if (this.message.type === 'signRequest' && this.message.namespace === Namespace.ETH) {
if (this.message.request.method === EthMethods.ETH_SENDTRANSACTION) {
this.mode = Mode.SIGN_TRANSACTION
this.title = this.translateService.instant('walletconnect.new_transaction')
await this.operationRequest(this.message as WalletconnectSignRequest<EthTx>)
}

if (
this.message.type === 'signRequest' &&
this.message.namespace === Namespace.ETH &&
this.message.request.method === EthMethods.PERSONAL_SIGN_REQUEST
) {
this.mode = Mode.SIGN_MESSAGE
this.title = this.translateService.instant('walletconnect.sign_request')
await this.signRequest(this.message as WalletconnectSignRequest<string>)
if (this.message.request.method === EthMethods.PERSONAL_SIGN_REQUEST) {
this.mode = Mode.SIGN_MESSAGE
this.title = this.translateService.instant('walletconnect.sign_request')
await this.signRequest(this.message as WalletconnectSignRequest<string>)
}

if (this.message.request.method === EthMethods.PERSONAL_SIGN_REQUEST) {
this.mode = Mode.SIGN_MESSAGE
this.title = this.translateService.instant('walletconnect.sign_request')
await this.signRequest(this.message as WalletconnectSignRequest<string>)
}

if (this.message.request.method === EthMethods.ETH_SIGN_TYPED_DATA) {
this.mode = Mode.ETH_SIGN_TYPED_DATA
this.title = this.translateService.instant('walletconnect.sign_request')
await this.signRequest(this.message as WalletconnectSignRequest<string>)
}
if (this.message.request.method === EthMethods.ETH_SIGN) {
this.mode = Mode.ETH_SIGN
this.title = this.translateService.instant('walletconnect.sign_request')
await this.signRequest(this.message as WalletconnectSignRequest<string>)
}
}

if (
Expand Down
5 changes: 4 additions & 1 deletion src/app/pages/walletconnect/walletconnect.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,10 @@ export enum EthMethods {
ETH_SENDTRANSACTION = 'eth_sendTransaction',
PERSONAL_SIGN_REQUEST = 'personal_sign',
ETH_SIGN_TYPED_DATA = 'eth_signTypedData',
WALLET_SWITCH_ETHEREUM_CHAIN = 'wallet_switchEthereumChain'
ETH_SIGN_TYPED_DATA_V3 = 'eth_signTypedData_v3',
ETH_SIGN_TYPED_DATA_V4 = 'eth_signTypedData_v4',
WALLET_SWITCH_ETHEREUM_CHAIN = 'wallet_switchEthereumChain',
ETH_SIGN = 'eth_sign'
}

export interface EthTx {
Expand Down

0 comments on commit 5066a9f

Please sign in to comment.