# ethers-proxies

> Detect proxy contracts and their target addresses using ethers

Latest version **1.0.0** (published 2021-12-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install ethers-proxies
pnpm add ethers-proxies
yarn add ethers-proxies
bun add ethers-proxies
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2021-12-23 |
| First published | 2021-12-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 6 |
| Unpacked size | 42.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 110 |
| Author | Jan-Felix |
| Maintainers | jfschwarz |

## Links

- npm: https://www.npmjs.com/package/ethers-proxies
- Repository: https://github.com/gnosis/ethers-proxies
- Homepage: https://github.com/gnosis/ethers-proxies#readme
- Issues: https://github.com/gnosis/ethers-proxies/issues
- npm.io page: https://npm.io/package/ethers-proxies

## Dependencies (6)

- [@ethersproject/abi](https://npm.io/package/@ethersproject/abi.md) ^5.0.0
- [@ethersproject/bytes](https://npm.io/package/@ethersproject/bytes.md) ^5.5.0
- [@ethersproject/address](https://npm.io/package/@ethersproject/address.md) ^5.0.0
- [@ethersproject/bignumber](https://npm.io/package/@ethersproject/bignumber.md) ^5.0.0
- [@ethersproject/contracts](https://npm.io/package/@ethersproject/contracts.md) ^5.0.0
- [@ethersproject/abstract-provider](https://npm.io/package/@ethersproject/abstract-provider.md) ^5.0.0

## Recent versions

- 1.0.0 (latest) — 2021-12-23

## README

# ethers-proxies

Detect proxy contracts and their target addresses using ethers

This package offers a utility function for checking if a smart contract at a given address implements one of the known proxy patterns.
It detects the following kinds of proxies:

- [EIP-1167](https://eips.ethereum.org/EIPS/eip-1167) Minimal Proxy Contract
- [EIP-1967](https://eips.ethereum.org/EIPS/eip-1967) Transparent Proxy Pattern
- [EIP-897](https://eips.ethereum.org/EIPS/eip-897) Delegate Proxy Pattern
- [EIP-1822](https://eips.ethereum.org/EIPS/eip-1822) Universal Upgradeable Proxy Standard
- OpenZeppelin Proxy Pattern
- Gnosis Safe Proxy Contract

## Installation

This module is distributed via npm. For adding it to your project, run:

```
npm install --save ethers-proxies
```

To install it using yarn, run:

```
yarn add ethers-proxies
```

## How to use

The function needs an ethers provider it uses to run a set of checks against the given address.
It returns a promise that resolves to the proxy target address, i.e., the address of the contract implementing the logic.
The promise resolves to `null` if no proxy can be detected.

```ts
import { InfuraProvider } from '@ethersproject/providers'
import detectProxyTarget from 'ethers-proxies'

const provider = new InfuraProvider(1, process.env.INFURA_API_KEY)
const target = await detectProxyTarget('0xA7AeFeaD2F25972D80516628417ac46b3F2604Af', provider)
console.log(target)  // logs "0x4bd844F72A8edD323056130A86FC624D0dbcF5b0"
```


## API

```ts
detectProxyTarget(address: string, provider: Provider, blockTag?: BlockTag): Promise<string | null>
```

**Arguments**
- `address` (string): The address of the proxy contract
- `provider` (Provider): An ethers Provider instance
- `blockTag` (optional: BlockTag): Any ethers [BlockTag](https://docs.ethers.io/v5/api/providers/types/#providers-BlockTag), default is `"latest"`

The function returns a promise that will generally resolve to either the detected target contract address or `null` if it couldn't detect one.

---
_Source: https://npm.io/package/ethers-proxies · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
