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