task.ts 1.57 KB
Newer Older
vicotor's avatar
vicotor committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
import { ethers } from "hardhat";
import { ModuleData } from "./modules";

export const getTaskId = (
  taskCreator: string,
  execAddress: string,
  execSelector: string,
  moduleData: ModuleData,
  feeToken: string
): string => {
  const encoded = ethers.utils.defaultAbiCoder.encode(
    ["address", "address", "bytes4", "tuple(uint8[], bytes[])", "address"],
    [
      taskCreator,
      execAddress,
      execSelector,
      [moduleData.modules, moduleData.args],
      feeToken,
    ]
  );

  const taskId = ethers.utils.keccak256(encoded);
  return taskId;
};

export const getLegacyTaskId = (
  taskCreator: string,
  execAddress: string,
  execSelector: string,
  useTaskTreasuryFunds: boolean,
  feeToken: string,
  resolverHash: string
): string => {
  const encoded = ethers.utils.defaultAbiCoder.encode(
    ["address", "address", "bytes4", "bool", "address", "bytes32"],
    [
      taskCreator,
      execAddress,
      execSelector,
      useTaskTreasuryFunds,
      feeToken,
      resolverHash,
    ]
  );

  const taskId = ethers.utils.keccak256(encoded);
  return taskId;
};

export const getResolverHash = (
  resolverAddress: string,
  resolverData: string
): string => {
  const encoded = ethers.utils.defaultAbiCoder.encode(
    ["address", "bytes"],
    [resolverAddress, resolverData]
  );

  const hash = ethers.utils.keccak256(encoded);
  return hash;
};

export const getSelector = (func: string): string => {
  const funcBytes = ethers.utils.toUtf8Bytes(func);
  const hash = ethers.utils.keccak256(funcBytes);
  const selector = hash.substring(0, 10);
  return selector;
};