Skip to content

Commit

Permalink
remove function signature, cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
karooolis committed Oct 27, 2024
1 parent 83c54c2 commit 8597f4d
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@ import {
Transaction,
TransactionReceipt,
decodeFunctionData,
getAbiItem,
getAddress,
parseAbi,
parseEventLogs,
} from "viem";
import { UserOperation, entryPoint07Abi, entryPoint07Address } from "viem/account-abstraction";
import { formatAbiItem } from "viem/utils";
import { useConfig, useWatchBlocks } from "wagmi";
import { getTransaction, simulateContract, waitForTransactionReceipt } from "wagmi/actions";
import { useStore } from "zustand";
Expand Down Expand Up @@ -61,31 +59,28 @@ export function TransactionsWatcher() {

const { functionName: decodedFunctionName, args: decodedArgs } = decodedSmartAccountCall;
const calls = getCalls(decodedFunctionName, decodedArgs, transaction);
const logs = parseEventLogs({
abi: [...abi, userOperationEventAbi],
logs: receipt.logs,
});

console.log("calls", calls);

setTransaction({
hash,
writeId: writeId ?? hash,
from: transaction.from,
timestamp,
transaction,
status: "pending",
calls,
value: transaction.value,
});

const logs = parseEventLogs({
abi: [...abi, userOperationEventAbi],
logs: receipt.logs,
});

updateTransaction(hash, {
receipt,
logs,
value: transaction.value,
status: receipt.status, // TODO: correct status check
error: undefined, // TODO: transactionError as BaseError,
});
},
[abi, setTransaction, updateTransaction],
[abi, setTransaction],
);

const handleUserOperations = useCallback(
Expand All @@ -106,10 +101,10 @@ export function TransactionsWatcher() {
handleUserOperation({ hash, writeId, timestamp, receipt, transaction, userOperation });
}
},
[abi, observerWrites, handleUserOperation],
[abi, observerWrites, handleUserOperation, wagmiConfig],

Check warning on line 104 in packages/explorer/src/app/(explorer)/[chainName]/worlds/[worldAddress]/observe/TransactionsWatcher.tsx

View workflow job for this annotation

GitHub Actions / Run lint

React Hook useCallback has an unnecessary dependency: 'observerWrites'. Either exclude it or remove the dependency array
);

const handleRegularTransaction = useCallback(
const handleAuthenticTransaction = useCallback(
async ({
writeId,
hash,
Expand Down Expand Up @@ -145,7 +140,6 @@ export function TransactionsWatcher() {
status: "pending",
calls: {
to: transaction.to,
functionSignature: formatAbiItem(getAbiItem({ abi, name: functionName, args })!),
functionName,
args,
},
Expand Down Expand Up @@ -199,14 +193,13 @@ export function TransactionsWatcher() {
if (!abi) return;

const transaction = await getTransaction(wagmiConfig, { hash });

if (transaction.to && getAddress(transaction.to) === getAddress(entryPoint07Address)) {
handleUserOperations({ writeId, timestamp, transaction });
} else if (transaction.to && getAddress(transaction.to) === getAddress(worldAddress)) {
handleRegularTransaction({ hash, writeId, timestamp, transaction });
handleAuthenticTransaction({ hash, writeId, timestamp, transaction });
}
},
[abi, wagmiConfig, worldAddress, handleUserOperations, handleRegularTransaction],
[abi, wagmiConfig, worldAddress, handleUserOperations, handleAuthenticTransaction],
);

useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Address, Hex, Transaction, decodeFunctionData, getAbiItem } from "viem";
import { formatAbiItem } from "viem/utils";
import { Address, Hex, Transaction, decodeFunctionData } from "viem";
import { doomWorldAbi } from "./abis";

export function getCalls(decodedFunctionName: string, decodedArgs: readonly unknown[], transaction: Transaction) {
Expand Down Expand Up @@ -28,15 +27,8 @@ function getCall(target: Address, data: Hex, transaction: Transaction) {
functionName = transaction.input.length > 10 ? transaction.input.slice(0, 10) : "unknown";
}

const functionAbiItem = getAbiItem({
abi: doomWorldAbi,
name: functionName,
args,
} as never);

return {
to: target,
functionSignature: functionAbiItem ? formatAbiItem(functionAbiItem) : "unknown",
functionName,
args,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ export function useObservedTransactions() {

for (const write of Object.values(observerWrites)) {
// if (write.address.toLowerCase() !== worldAddress.toLowerCase()) continue; // TODO: filter entrypoint

const writeResult = write.events.find((event): event is Message<"write:result"> => event.type === "write:result");
const receiptEvent = write.events.find(
(event): event is Message<"waitForTransactionReceipt:result"> | Message<"waitForUserOperationReceipt:result"> =>
Expand Down
29 changes: 4 additions & 25 deletions packages/explorer/src/observer/decorator.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Account, Chain, Client, Hex, Transport, WalletActions, getAbiItem } from "viem";
import { Account, Chain, Client, Hex, Transport, WalletActions } from "viem";
import { BundlerActions, sendUserOperation, waitForUserOperationReceipt } from "viem/account-abstraction";
import { waitForTransactionReceipt, writeContract } from "viem/actions";
import { formatAbiItem, getAction } from "viem/utils";
import { getAction } from "viem/utils";
import { isDefined } from "@latticexyz/common/utils";
import { createBridge } from "./bridge";
import { ReceiptSummary } from "./common";
Expand Down Expand Up @@ -35,23 +35,10 @@ export function observer({ explorerUrl = "http://localhost:13690", waitForTransa
if ("calls" in args && args.calls) {
calls = args.calls
.map((call) => {
if (
call &&
typeof call === "object" &&
"abi" in call &&
"functionName" in call &&
"args" in call &&
"to" in call
) {
const functionAbiItem = getAbiItem({
abi: call.abi,
name: call.functionName,
args: call.args,
} as never)!;

// TODO: make this nicer
if (call && typeof call === "object" && "functionName" in call && "args" in call && "to" in call) {
return {
to: call.to,
functionSignature: formatAbiItem(functionAbiItem), // TODO: is it needed?
functionName: call.functionName,
args: call.args,
} as UserOperationCall;
Expand Down Expand Up @@ -92,20 +79,12 @@ export function observer({ explorerUrl = "http://localhost:13690", waitForTransa
const writeId = `${client.uid}-${++writeCounter}`;
const write = getAction(client, writeContract, "writeContract")(args);

// `writeContract` above will throw if this isn't present
const functionAbiItem = getAbiItem({
abi: args.abi,
name: args.functionName,
args: args.args,
} as never)!;

emit("write", {
writeId,
from: client.account!.address,
calls: [
{
to: args.address,
functionSignature: formatAbiItem(functionAbiItem),
functionName: args.functionName,
args: (args.args ?? []) as never,
},
Expand Down
1 change: 0 additions & 1 deletion packages/explorer/src/observer/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { ReceiptSummary } from "./common";
// TODO: fix type, move elsewhere
export type UserOperationCall = {
to: Address | null;
functionSignature: string;
functionName: string;
args: unknown;
};
Expand Down
8 changes: 4 additions & 4 deletions packages/explorer/src/observer/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ channel.addEventListener("message", ({ data }: MessageEvent<Message>) => {
const write = data.type === "write" ? ({ ...data, events: [] } satisfies Write) : state.writes[data.writeId];
if (!write) return state;

return {
...state,
writes: {},
};
// return {
// ...state,
// writes: {},
// };

let hash = write.hash;
if (data.type === "waitForTransactionReceipt") {
Expand Down

0 comments on commit 8597f4d

Please sign in to comment.