diff --git a/src/actions/addExecutor.ts b/src/actions/addExecutor.ts new file mode 100644 index 00000000..f4f5ca37 --- /dev/null +++ b/src/actions/addExecutor.ts @@ -0,0 +1,50 @@ +import { + Address, + Chain, + PrepareTransactionRequestParameters, + PrepareTransactionRequestReturnType, + PublicClient, + Transport, + encodeFunctionData, +} from 'viem'; +import { upgradeExecutor } from '../contracts'; +import { ActionParameters, WithAccount } from '../types/Actions'; +import { Prettify } from '../types/utils'; +import { UPGRADE_EXECUTOR_ROLE_EXECUTOR } from '../upgradeExecutorEncodeFunctionData'; + +export type AddExecutorParameters = Prettify< + WithAccount< + ActionParameters< + { + address: Address; + }, + 'upgradeExecutor', + Curried + > + > +>; + +export type AddExecutorReturnType = PrepareTransactionRequestReturnType; + +function upgradeExecutorFunctionData({ address }: AddExecutorParameters) { + return encodeFunctionData({ + abi: upgradeExecutor.abi, + functionName: 'grantRole', + args: [UPGRADE_EXECUTOR_ROLE_EXECUTOR, address], + }); +} + +export async function addExecutor( + client: PublicClient, + args: AddExecutorParameters, +): Promise { + const data = upgradeExecutorFunctionData(args); + + return client.prepareTransactionRequest({ + to: args.upgradeExecutor, + value: BigInt(0), + chain: client.chain, + data, + account: args.account, + } satisfies PrepareTransactionRequestParameters); +} diff --git a/src/actions/removeExecutor.ts b/src/actions/removeExecutor.ts new file mode 100644 index 00000000..71249d26 --- /dev/null +++ b/src/actions/removeExecutor.ts @@ -0,0 +1,50 @@ +import { + Address, + Chain, + PrepareTransactionRequestParameters, + PrepareTransactionRequestReturnType, + PublicClient, + Transport, + encodeFunctionData, +} from 'viem'; +import { upgradeExecutor } from '../contracts'; +import { ActionParameters, WithAccount } from '../types/Actions'; +import { Prettify } from '../types/utils'; +import { UPGRADE_EXECUTOR_ROLE_EXECUTOR } from '../upgradeExecutorEncodeFunctionData'; + +export type RemoveExecutorParameters = Prettify< + WithAccount< + ActionParameters< + { + address: Address; + }, + 'upgradeExecutor', + Curried + > + > +>; + +export type RemoveExecutorReturnType = PrepareTransactionRequestReturnType; + +function upgradeExecutorFunctionData({ address }: RemoveExecutorParameters) { + return encodeFunctionData({ + abi: upgradeExecutor.abi, + functionName: 'revokeRole', + args: [UPGRADE_EXECUTOR_ROLE_EXECUTOR, address], + }); +} + +export async function removeExecutor( + client: PublicClient, + args: RemoveExecutorParameters, +): Promise { + const data = upgradeExecutorFunctionData(args); + + return client.prepareTransactionRequest({ + to: args.upgradeExecutor, + value: BigInt(0), + chain: client.chain, + data, + account: args.account, + } satisfies PrepareTransactionRequestParameters); +}