Skip to content

Commit

Permalink
update rk connector for transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
coffeexcoin committed Sep 18, 2024
1 parent c8b4679 commit 8ae3082
Show file tree
Hide file tree
Showing 5 changed files with 5,093 additions and 6,953 deletions.
2 changes: 1 addition & 1 deletion packages/agw-react/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@abstract-foundation/agw-react",
"description": "Abstract Global Wallet React Components",
"version": "0.0.1-alpha.7",
"version": "0.0.1-alpha.8",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions packages/agw-react/src/abstractWallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ import { abstractWalletConnector } from './abstractWalletConnector.js';
*/
const abstractWallet = (): Wallet => {
return {
id: 'abstract',
id: "abstract",
name: 'Abstract',
iconUrl:
'https://ipfs.io/ipfs/QmSpL14zz76qGCvxD5rd3SLTmQUmruY3DEZAw3a9GebZ4S',
iconBackground: '#ffffff',
installed: true,
shortName: 'Abstract',
createConnector: () => abstractWalletConnector(),
createConnector: (rkDetails) => abstractWalletConnector(rkDetails)
};
};

Expand Down
79 changes: 67 additions & 12 deletions packages/agw-react/src/abstractWalletConnector.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
'use client';
import { createAbstractClient, getSmartAccountAddressFromInitialSigner } from '@abstract-foundation/agw-sdk';
import { toPrivyWalletConnector } from '@privy-io/cross-app-connect';
import type { WalletDetailsParams } from '@rainbow-me/rainbowkit';
import { type CreateConnectorFn } from '@wagmi/core';
import {
createPublicClient,
createWalletClient,
custom,
type CustomSource,
type EIP1193EventMap,
type EIP1193RequestFn,
type EIP1474Methods,
http,
} from 'viem';
import { toAccount } from 'viem/accounts';
import { abstractTestnet } from 'viem/chains';

import { AGW_APP_ID } from './constants.js';

Expand Down Expand Up @@ -33,7 +43,7 @@ import { AGW_APP_ID } from './constants.js';
* ssr: true,
* });
*/
function abstractWalletConnector(): CreateConnectorFn<
function abstractWalletConnector(rkDetails?: WalletDetailsParams): CreateConnectorFn<
{
on: <event extends keyof EIP1193EventMap>(
event: event,
Expand All @@ -48,32 +58,77 @@ function abstractWalletConnector(): CreateConnectorFn<
Record<string, unknown>,
Record<string, unknown>
> {
return (params) => {
console.log('Creating abstract wallet connector');

return (params) => {
const connector = toPrivyWalletConnector({
iconUrl:
'https://ipfs.io/ipfs/QmSpL14zz76qGCvxD5rd3SLTmQUmruY3DEZAw3a9GebZ4S',
id: AGW_APP_ID,
name: 'Abstract',
})(params);

const getProvider = connector.getProvider;
const getAbstractProvider = async (
parameters?: { chainId?: number | undefined } | undefined,
) => {
const provider = await getProvider(parameters);
const provider = await connector.getProvider(parameters);
const providerHandleRequest = provider.request;
const handler: EIP1193RequestFn<EIP1474Methods> = async (e: any) => {

Check warning on line 75 in packages/agw-react/src/abstractWalletConnector.ts

View workflow job for this annotation

GitHub Actions / publish

Unexpected any. Specify a different type

Check warning on line 75 in packages/agw-react/src/abstractWalletConnector.ts

View workflow job for this annotation

GitHub Actions / publish

Unexpected any. Specify a different type
const { method } = e;
console.log('Abstract provider processing', method);
const { method, params } = e;
switch (method) {
case 'eth_accounts':
{
const accounts = await connector.getAccounts();
const publicClient = createPublicClient({
chain: abstractTestnet,
transport: http()
});

if (accounts?.[0] === undefined) {
return [];
}
const smartAccount = await getSmartAccountAddressFromInitialSigner(accounts[0], publicClient);
return [smartAccount]
}
case 'eth_signTransaction':
case 'eth_sendTransaction': {
console.log('Fetching accounts');
const accounts = await connector.getAccounts();
console.log('Accounts:', accounts);
return await providerHandleRequest(e);

if (accounts[0] == undefined) {
throw new Error("Account not found")
}

const transport = custom(provider)

const wallet = createWalletClient({
account: accounts[0],
transport
});

const signer = toAccount({
address: accounts[0],
signMessage: wallet.signMessage,
signTransaction: wallet.signTransaction as CustomSource["signTransaction"],
signTypedData: wallet.signTypedData as CustomSource["signTypedData"]
})

const abstractClient = await createAbstractClient({
chain: abstractTestnet,
signer,
transport
})

if (method === "eth_signTransaction") {
console.trace("Signing transaction with abstract client", params)
return await abstractClient.signTransaction({
...params[0]
}) as any;

Check warning on line 124 in packages/agw-react/src/abstractWalletConnector.ts

View workflow job for this annotation

GitHub Actions / publish

Unexpected any. Specify a different type

Check warning on line 124 in packages/agw-react/src/abstractWalletConnector.ts

View workflow job for this annotation

GitHub Actions / publish

Unexpected any. Specify a different type
} else if (method === "eth_sendTransaction") {
console.trace("Sending transaction with abstract client", params)
return await abstractClient.sendTransaction({
...params[0]
}) as any

Check warning on line 129 in packages/agw-react/src/abstractWalletConnector.ts

View workflow job for this annotation

GitHub Actions / publish

Unexpected any. Specify a different type

Check warning on line 129 in packages/agw-react/src/abstractWalletConnector.ts

View workflow job for this annotation

GitHub Actions / publish

Unexpected any. Specify a different type
}
throw new Error("Should not have reached this point");
}
default: {
return await providerHandleRequest(e);
Expand All @@ -87,13 +142,13 @@ function abstractWalletConnector(): CreateConnectorFn<
request: handler,
};
};

const abstractConnector = {
...connector,
...rkDetails,
getProvider: getAbstractProvider,
type: 'abstract',
};
console.log('Abstract connector:', abstractConnector);
return abstractConnector;
};
}
Expand Down
1 change: 1 addition & 0 deletions packages/agw-react/src/exports/connectors.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
'use client';
export { abstractWallet } from '../abstractWallet.js';
export { abstractWalletConnector } from '../abstractWalletConnector.js';
Loading

0 comments on commit 8ae3082

Please sign in to comment.