type RolesForContract<TContract extends ContractWithRoles> = TContract extends SmartContract ? Role | (string & {}) : NonNullable<Exclude<TContract, SmartContract>["roles"]>["roles"][number];