Skip to content

Commit

Permalink
Feat: Add v1 SequencerInbox getters
Browse files Browse the repository at this point in the history
Closes FS-535
  • Loading branch information
chrstph-dvx committed Jun 27, 2024
1 parent 4fedd67 commit 6bbb0dd
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/actions/getMaxTimeVariation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Chain, PublicClient, Transport } from 'viem';
import { sequencerInbox } from '../contracts';
import { ActionParameters } from '../types/Actions';

export type GetMaxTimeVariationParameters<Curried extends boolean = false> = ActionParameters<
{},
'sequencerInbox',
Curried
>;

export type GetMaxTimeVariationReturnType = {
delayBlocks: bigint;
futureBlocks: bigint;
delaySeconds: bigint;
futureSeconds: bigint;
};

export async function getMaxTimeVariation<TChain extends Chain | undefined>(
client: PublicClient<Transport, TChain>,
args: GetMaxTimeVariationParameters<false>,
): Promise<GetMaxTimeVariationReturnType> {
const [delayBlocks, futureBlocks, delaySeconds, futureSeconds] = await client.readContract({
abi: sequencerInbox.abi,
functionName: 'maxTimeVariation',
address: args.sequencerInbox,
});
return {
delayBlocks,
futureBlocks,
delaySeconds,
futureSeconds,
};
}
27 changes: 27 additions & 0 deletions src/actions/isBatchPoster.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { Address, Chain, PublicClient, ReadContractReturnType, Transport } from 'viem';
import { sequencerInbox } from '../contracts';
import { ActionParameters } from '../types/Actions';

type Args = {
batchPoster: Address;
};
type SequencerInboxABI = typeof sequencerInbox.abi;
export type IsBatchPosterParameters<Curried extends boolean = false> = ActionParameters<
Args,
'sequencerInbox',
Curried
>;

export type IsBatchPosterReturnType = ReadContractReturnType<SequencerInboxABI, 'isBatchPoster'>;

export async function isBatchPoster<TChain extends Chain | undefined>(
client: PublicClient<Transport, TChain>,
args: IsBatchPosterParameters,
): Promise<IsBatchPosterReturnType> {
return client.readContract({
abi: sequencerInbox.abi,
functionName: 'isBatchPoster',
address: args.sequencerInbox,
args: [args.batchPoster],
});
}
31 changes: 31 additions & 0 deletions src/actions/isValidKeysetHash.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Chain, Hex, PublicClient, ReadContractReturnType, Transport } from 'viem';
import { sequencerInbox } from '../contracts';
import { ActionParameters } from '../types/Actions';

type Args = {
keysetHash: Hex;
};
type SequencerInboxABI = typeof sequencerInbox.abi;

export type IsValidKeysetHashParameters<Curried extends boolean = false> = ActionParameters<
Args,
'sequencerInbox',
Curried
>;

export type IsValidKeysetHashReturnType = ReadContractReturnType<
SequencerInboxABI,
'isValidKeysetHash'
>;

export async function isValidKeysetHash<TChain extends Chain | undefined>(
client: PublicClient<Transport, TChain>,
args: IsValidKeysetHashParameters,
): Promise<IsValidKeysetHashReturnType> {
return client.readContract({
abi: sequencerInbox.abi,
functionName: 'isValidKeysetHash',
address: args.sequencerInbox,
args: [args.keysetHash],
});
}
24 changes: 24 additions & 0 deletions src/types/Actions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Address } from 'viem';
import { Prettify } from './utils';

type RemoveUndefinedArgs<T> = T extends { args?: undefined } ? Omit<T, 'args'> : T;

/**
* Actions require contract address, but as part of decorators, the address might have been passed already to the decorator.
*
* If the address was passed to the decorator, it's now optional (we still allow overrides of the address per action).
* If the action doesn't have any other parameters beside the contract address, then parameters can either be { contract: address } or void
*/
export type ActionParameters<Args, ContractName extends string, Curried extends boolean> = Prettify<
Curried extends false
? RemoveUndefinedArgs<Args & { [key in ContractName]: Address }>
: Args extends { args?: undefined }
?
| {
[key in ContractName]: Address;
}
| void
: Args & {
[key in ContractName]?: Address;
}
>;

0 comments on commit 6bbb0dd

Please sign in to comment.