Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor: types/interfaces #627

Merged
merged 5 commits into from
Nov 28, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/nextjs/components/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import { Bars3Icon, BugAntIcon } from "@heroicons/react/24/outline";
import { FaucetButton, RainbowKitCustomConnectButton } from "~~/components/scaffold-eth";
import { useOutsideClick } from "~~/hooks/scaffold-eth";

interface HeaderMenuLink {
type HeaderMenuLink = {
label: string;
href: string;
icon?: React.ReactNode;
}
};

export const menuLinks: HeaderMenuLink[] = [
{
Expand Down
4 changes: 2 additions & 2 deletions packages/nextjs/components/blockexplorer/PaginationButton.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { ArrowLeftIcon, ArrowRightIcon } from "@heroicons/react/24/outline";

interface PaginationButtonProps {
type PaginationButtonProps = {
currentPage: number;
totalItems: number;
setCurrentPage: (page: number) => void;
}
};

const ITEMS_PER_PAGE = 20;

Expand Down
4 changes: 2 additions & 2 deletions packages/nextjs/components/scaffold-eth/Address.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { CheckCircleIcon, DocumentDuplicateIcon } from "@heroicons/react/24/outl
import { BlockieAvatar } from "~~/components/scaffold-eth";
import { getBlockExplorerAddressLink, getTargetNetwork } from "~~/utils/scaffold-eth";

type TAddressProps = {
type AddressProps = {
address?: string;
disableAddressLink?: boolean;
format?: "short" | "long";
Expand All @@ -28,7 +28,7 @@ const blockieSizeMap = {
/**
* Displays an address (or ENS) with a Blockie image and option to copy address.
*/
export const Address = ({ address, disableAddressLink, format, size = "base" }: TAddressProps) => {
export const Address = ({ address, disableAddressLink, format, size = "base" }: AddressProps) => {
const [ens, setEns] = useState<string | null>();
const [ensAvatar, setEnsAvatar] = useState<string | null>();
const [addressCopied, setAddressCopied] = useState(false);
Expand Down
4 changes: 2 additions & 2 deletions packages/nextjs/components/scaffold-eth/Balance.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { useAccountBalance } from "~~/hooks/scaffold-eth";
import { getTargetNetwork } from "~~/utils/scaffold-eth";

type TBalanceProps = {
type BalanceProps = {
address?: string;
className?: string;
};

/**
* Display (ETH & USD) balance of an ETH address.
*/
export const Balance = ({ address, className = "" }: TBalanceProps) => {
export const Balance = ({ address, className = "" }: BalanceProps) => {
const configuredNetwork = getTargetNetwork();
const { balance, price, isError, isLoading, onToggleBalance, isEthBalance } = useAccountBalance(address);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ import {
} from "~~/components/scaffold-eth";
import { notification } from "~~/utils/scaffold-eth";

type TReadOnlyFunctionFormProps = {
type ReadOnlyFunctionFormProps = {
contractAddress: Address;
abiFunction: AbiFunction;
inheritedFrom?: string;
};

export const ReadOnlyFunctionForm = ({ contractAddress, abiFunction, inheritedFrom }: TReadOnlyFunctionFormProps) => {
export const ReadOnlyFunctionForm = ({ contractAddress, abiFunction, inheritedFrom }: ReadOnlyFunctionFormProps) => {
const [form, setForm] = useState<Record<string, any>>(() => getInitialFormState(abiFunction));
const [result, setResult] = useState<unknown>();

Expand Down
4 changes: 2 additions & 2 deletions packages/nextjs/components/scaffold-eth/Input/utils.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
export interface CommonInputProps<T = string> {
export type CommonInputProps<T = string> = {
value: T;
onChange: (newValue: T) => void;
name?: string;
placeholder?: string;
disabled?: boolean;
}
};

export enum IntegerVariant {
UINT8 = "uint8",
Expand Down
63 changes: 13 additions & 50 deletions packages/nextjs/hooks/scaffold-eth/useBurnerWallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ import { WalletClient, usePublicClient } from "wagmi";
const burnerStorageKey = "scaffoldEth2.burnerWallet.sk";

/**
* Is the private key valid
* @internal
* @param pk
* @returns
* Checks if the private key is valid
*/
const isValidSk = (pk: Hex | string | undefined | null): boolean => {
return pk?.length === 64 || pk?.length === 66;
Expand All @@ -19,13 +16,10 @@ const isValidSk = (pk: Hex | string | undefined | null): boolean => {
/**
* If no burner is found in localstorage, we will generate a random private key
*/
const newDefaultPriaveKey = generatePrivateKey();
const newDefaultPrivateKey = generatePrivateKey();

/**
* Save the current burner private key from storage
* Can be used outside of react. Used by the burnerConnector.
* @internal
* @returns
* Save the current burner private key to local storage
*/
export const saveBurnerSK = (privateKey: Hex): void => {
if (typeof window != "undefined" && window != null) {
Expand All @@ -34,10 +28,7 @@ export const saveBurnerSK = (privateKey: Hex): void => {
};

/**
* Gets the current burner private key from storage
* Can be used outside of react. Used by the burnerConnector.
* @internal
* @returns
* Gets the current burner private key from local storage
*/
export const loadBurnerSK = (): Hex => {
let currentSk: Hex = "0x";
Expand All @@ -48,64 +39,36 @@ export const loadBurnerSK = (): Hex => {
if (!!currentSk && isValidSk(currentSk)) {
return currentSk;
} else {
saveBurnerSK(newDefaultPriaveKey);
return newDefaultPriaveKey;
saveBurnerSK(newDefaultPrivateKey);
return newDefaultPrivateKey;
}
};

/**
* #### Summary
* Return type of useBurnerSigner:
*
* ##### ✏️ Notes
* - provides signer
* - methods of interacting with burner signer
* - methods to save and loadd signer from local storage
*
* @category Hooks
*/
export type TBurnerSigner = {
type BurnerAccount = {
walletClient: WalletClient | undefined;
account: PrivateKeyAccount | undefined;
/**
* create a new burner signer
*/
// creates a new burner account
generateNewBurner: () => void;
/**
* explicitly save burner to storage
*/
// explicitly save burner to storage
saveBurner: () => void;
};

/**
* #### Summary
* A hook that creates a burner signer/address and provides ways of interacting with
* and updating the signer
*
* @category Hooks
*
* @param localProvider localhost provider
* @returns IBurnerSigner
* Creates a burner wallet
*/
export const useBurnerWallet = (): TBurnerSigner => {
const [burnerSk, setBurnerSk] = useLocalStorage<Hex>(burnerStorageKey, newDefaultPriaveKey);
export const useBurnerWallet = (): BurnerAccount => {
const [burnerSk, setBurnerSk] = useLocalStorage<Hex>(burnerStorageKey, newDefaultPrivateKey);

const publicClient = usePublicClient();
const [walletClient, setWalletClient] = useState<WalletClient<HttpTransport, Chain, PrivateKeyAccount>>();
const [generatedPrivateKey, setGeneratedPrivateKey] = useState<Hex>("0x");
const [account, setAccount] = useState<PrivateKeyAccount>();
const isCreatingNewBurnerRef = useRef(false);

/**
* callback to save current wallet sk
*/
const saveBurner = useCallback(() => {
setBurnerSk(generatedPrivateKey);
}, [setBurnerSk, generatedPrivateKey]);

/**
* create a new burnerkey
*/
const generateNewBurner = useCallback(() => {
if (publicClient && !isCreatingNewBurnerRef.current) {
console.log("🔑 Create new burner wallet...");
Expand All @@ -125,7 +88,7 @@ export const useBurnerWallet = (): TBurnerSigner => {
setAccount(randomAccount);

setBurnerSk(() => {
console.log("🔥 ...Save new burner wallet");
console.log("🔥 Saving new burner wallet");
isCreatingNewBurnerRef.current = false;
return randomPrivateKey;
});
Expand Down
4 changes: 2 additions & 2 deletions packages/nextjs/services/store/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import create from "zustand";
* Think about it as a global useState.
*/

type TGlobalState = {
type GlobalState = {
nativeCurrencyPrice: number;
setNativeCurrencyPrice: (newNativeCurrencyPriceState: number) => void;
};

export const useGlobalState = create<TGlobalState>(set => ({
export const useGlobalState = create<GlobalState>(set => ({
nativeCurrencyPrice: 0,
setNativeCurrencyPrice: (newValue: number): void => set(() => ({ nativeCurrencyPrice: newValue })),
}));
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@ export const BurnerConnectorErrorList = {
couldNotConnect: "Could not connect to network",
unsupportedBurnerChain: "This network is not supported for burner connector",
chainIdNotResolved: "Cound not resolve chainId",
signerNotResolved: "Cound not resolve signer",
chainNotSupported: "Chain is not supported, check burner wallet config",
} as const;

/**
* A union of all the BurnerConnectorErrorList
*/
export type BurnerConnectorErrorTypes = typeof BurnerConnectorErrorList[keyof typeof BurnerConnectorErrorList];
export type BurnerConnectorErrorTypes = (typeof BurnerConnectorErrorList)[keyof typeof BurnerConnectorErrorList];

export class BurnerConnectorError extends Error {
constructor(errorType: BurnerConnectorErrorTypes, message?: string) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import { getTargetNetwork } from "~~/utils/scaffold-eth";

const { onlyLocalBurnerWallet } = scaffoldConfig;
const targetNetwork = getTargetNetwork();
export interface BurnerWalletOptions {
export type BurnerWalletOptions = {
chains: Chain[];
}
};

const burnerWalletIconBase64 =
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzUzIiBoZWlnaHQ9IjM1MiIgdmlld0JveD0iMCAwIDM1MyAzNTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHg9IjAuNzE2MzA5IiB5PSIwLjMxNzEzOSIgd2lkdGg9IjM1MS4zOTQiIGhlaWdodD0iMzUxLjM5NCIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzNfMTUxKSIvPgo8Y2lyY2xlIGN4PSIzNC40OTUzIiBjeT0iMzQuNDk1MyIgcj0iMzQuNDk1MyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjA3LjAxOCAyNTQuMTIpIiBmaWxsPSIjRkY2NjBBIi8+CjxwYXRoIGQ9Ik0xNTQuMzE4IDMxNy45NTVDMTcxLjI3MyAzMTAuODkgMTc2LjU4MiAyOTAuNzE1IDE3Ni4xNTcgMjgzLjQ4N0wyMDcuMDE4IDI4OC44NjRDMjA3LjAxOCAzMDMuMzE0IDIwMC4yMTIgMzA5LjQwMiAxOTcuODI0IDMxMi40MzNDMTkzLjQ3NCAzMTcuOTU1IDE3My4zNTEgMzMwLjAzIDE1NC4zMTggMzE3Ljk1NVoiIGZpbGw9InVybCgjcGFpbnQxX3JhZGlhbF8zXzE1MSkiLz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZF8zXzE1MSkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIyNy4zNzcgMzAyLjI3NkMyMjYuNDI2IDMwNS44OTcgMjMwLjMxNSAzMDkuNDA1IDIzMy4zOTYgMzA3LjI3OUMyNTQuNTM4IDI5Mi42ODQgMjcwLjQ3OSAyNjkuOTQ1IDI3NC44OSAyNDcuNDg5QzI4Mi4yNCAyMTAuMDcxIDI3Mi4yMzUgMTc1LjcyNyAyMzguMDI4IDE0NS45MjVDMjAwLjg3NCAxMTMuNTU2IDE5MS44NDQgODguNDU2MSAxOTAuMTYyIDUwLjg3MThDMTg5Ljc5NyA0Mi43MjE4IDE4MS42MDQgMzcuMjk0NyAxNzQuODI0IDQxLjgzMTdDMTUyLjY2OCA1Ni42NTc0IDEzMi41MTIgODQuNDk5IDEzOC45MTEgMTIwLjc1OEMxNDEuMDA0IDEzMi42MjEgMTQ2Ljc5NCAxNDEuMDE2IDE1MS45NyAxNDguNTIzQzE1OC40OTEgMTU3Ljk3OCAxNjQuMDM5IDE2Ni4wMjMgMTU5Ljk5NyAxNzcuODFDMTU1LjIwMyAxOTEuNzk0IDEzOS4xMzQgMTk5LjE2MiAxMjguNzQ3IDE5Mi40MjlDMTE0LjE3IDE4Mi45ODEgMTEzLjI1MyAxNjYuNjUxIDExNy45NjkgMTQ5LjQ1NkMxMTguOTAyIDE0Ni4wNTUgMTE1LjQ3MSAxNDMuMjA0IDExMi42OCAxNDUuMzU5QzkxLjM2MDQgMTYxLjgyMSA2OS4xNTMyIDE5OS4yNjcgNzcuNjY0NyAyNDcuNDg5Qzg1Ljk3OTIgMjc2LjIxMiA5Ny45Mjc3IDI5Mi41MzcgMTEwLjk3MSAzMDEuNTQxQzExMy43NjMgMzAzLjQ2OCAxMTcuMTU5IDMwMC42MzEgMTE2LjU5NyAyOTcuMjg2QzExNi4wODEgMjk0LjIxMiAxMTUuODEzIDI5MS4wNTQgMTE1LjgxMyAyODcuODMzQzExNS44MTMgMjU2LjUxMyAxNDEuMjAzIDIzMS4xMjMgMTcyLjUyMyAyMzEuMTIzQzIwMy44NDIgMjMxLjEyMyAyMjkuMjMyIDI1Ni41MTMgMjI5LjIzMiAyODcuODMzQzIyOS4yMzIgMjkyLjgyNCAyMjguNTg3IDI5Ny42NjUgMjI3LjM3NyAzMDIuMjc2WiIgZmlsbD0idXJsKCNwYWludDJfbGluZWFyXzNfMTUxKSIvPgo8L2c+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RfM18xNTEiIHg9IjcyLjExMTIiIHk9IjM2LjQ5NCIgd2lkdGg9IjIwOC43NDIiIGhlaWdodD0iMjc1LjEyIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPgo8ZmVPZmZzZXQvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxLjg0NTA2Ii8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAxIDAgMCAwIDAgMC40MiAwIDAgMCAwIDAgMCAwIDAgMC43IDAiLz4KPGZlQmxlbmQgbW9kZT0ibXVsdGlwbHkiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18zXzE1MSIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18zXzE1MSIgcmVzdWx0PSJzaGFwZSIvPgo8L2ZpbHRlcj4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzNfMTUxIiB4MT0iMTc2LjQxMyIgeTE9IjAuMzE3MTM5IiB4Mj0iMTc2LjQxMyIgeTI9IjM1MS43MTEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZGRjI3OSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRkQzMzYiLz4KPC9saW5lYXJHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsXzNfMTUxIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDIxOC4wNDggMjQ5LjM0Nykgcm90YXRlKDEyNC4wMTgpIHNjYWxlKDg5LjI5NTUgMjY0LjgwOSkiPgo8c3RvcCBvZmZzZXQ9IjAuNjQwODUiIHN0b3AtY29sb3I9IiNGRjY2MEEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZCRTE1Ii8+CjwvcmFkaWFsR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQyX2xpbmVhcl8zXzE1MSIgeDE9IjE3Ni40ODIiIHkxPSI0MC4xODQxIiB4Mj0iMTc2LjQ4MiIgeTI9IjMxNy4yNzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agb2Zmc2V0PSIwLjMzODU0MiIgc3RvcC1jb2xvcj0iI0ZGOEYzRiIvPgo8c3RvcCBvZmZzZXQ9IjAuNjU2MjUiIHN0b3AtY29sb3I9IiNGRjcwMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkYzRDAwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==";
Expand Down
8 changes: 4 additions & 4 deletions packages/nextjs/utils/scaffold-eth/block.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ export type TransactionWithFunction = Transaction & {
functionArgTypes?: string[];
};

interface TransactionReceipts {
type TransactionReceipts = {
[key: string]: TransactionReceipt;
}
};

export interface TransactionsTableProps {
export type TransactionsTableProps = {
blocks: Block[];
transactionReceipts: TransactionReceipts;
}
};
11 changes: 3 additions & 8 deletions packages/nextjs/utils/scaffold-eth/networks.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import * as chains from "viem/chains";
import scaffoldConfig from "~~/scaffold.config";

export type TChainAttributes = {
type ChainAttributes = {
// color | [lightThemeColor, darkThemeColor]
color: string | [string, string];
// Used to fetch price by providing mainnet token address
// for networks having native currency other than ETH
nativeCurrencyTokenAddress?: string;
};

export const NETWORKS_EXTRA_DATA: Record<string, TChainAttributes> = {
const NETWORKS_EXTRA_DATA: Record<string, ChainAttributes> = {
[chains.hardhat.id]: {
color: "#b8af0c",
},
Expand Down Expand Up @@ -58,8 +58,6 @@ export const NETWORKS_EXTRA_DATA: Record<string, TChainAttributes> = {

/**
* Gives the block explorer transaction URL.
* @param network
* @param txnHash
* @dev returns empty string if the network is localChain
*/
export function getBlockExplorerTxLink(chainId: number, txnHash: string) {
Expand Down Expand Up @@ -87,8 +85,6 @@ export function getBlockExplorerTxLink(chainId: number, txnHash: string) {

/**
* Gives the block explorer Address URL.
* @param network - wagmi chain object
* @param address
* @returns block explorer address URL and etherscan URL if block explorer URL is not present for wagmi network
*/
export function getBlockExplorerAddressLink(network: chains.Chain, address: string) {
Expand All @@ -107,8 +103,7 @@ export function getBlockExplorerAddressLink(network: chains.Chain, address: stri
/**
* @returns targetNetwork object consisting targetNetwork from scaffold.config and extra network metadata
*/

export function getTargetNetwork(): chains.Chain & Partial<TChainAttributes> {
export function getTargetNetwork(): chains.Chain & Partial<ChainAttributes> {
const configuredNetwork = scaffoldConfig.targetNetwork;

return {
Expand Down
12 changes: 6 additions & 6 deletions packages/nextjs/utils/scaffold-eth/notification.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,20 @@ import {
} from "@heroicons/react/24/solid";
import { Spinner } from "~~/components/assets/Spinner";

type TPositions = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
type NotificationPositions = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
technophile-04 marked this conversation as resolved.
Show resolved Hide resolved

type TNotificationProps = {
type NotificationProps = {
content: React.ReactNode;
status: "success" | "info" | "loading" | "error" | "warning";
duration?: number;
icon?: string;
position?: TPositions;
position?: NotificationPositions;
};

type NotificationOptions = {
duration?: number;
icon?: string;
position?: TPositions;
position?: NotificationPositions;
};

const ENUM_STATUSES = {
Expand All @@ -34,7 +34,7 @@ const ENUM_STATUSES = {
};

const DEFAULT_DURATION = 3000;
const DEFAULT_POSITION: TPositions = "top-center";
const DEFAULT_POSITION: NotificationPositions = "top-center";

/**
* Custom Notification
Expand All @@ -45,7 +45,7 @@ const Notification = ({
duration = DEFAULT_DURATION,
icon,
position = DEFAULT_POSITION,
}: TNotificationProps) => {
}: NotificationProps) => {
return toast.custom(
t => (
<div
Expand Down