# (DEPRECATED) @edgeandnode/contract-utils (will be removed after Horizon releases)

Exposes contract utils to interact with The Graph Network contracts.

## Usage

```bash
# install the dependency

## pnpm
pnpm add @edgeandnode/contract-utils
## yarn
yarn add @edgeandnode/contract-utils
## bun
bun add @edgeandnode/contract-utils
```

Retrieve the contract address of a Graph Network contract on the specified network

```ts
import { resolveContractAddress } from '@edgeandnode/contract-utils'

// retrieve correct GNS address for arbitrum
const L2GNSAddress = resolveContractAddress({ network: 42161, contract: 'GNS' })
// retrieve correct GraphToken address for sepolia
const SepoliaGraphTokenAddress = resolveContractAddress({
  network: 11155111,
  contract: 'GraphToken',
})
```

Call the `mintSignal` L2GNS contract function from the generated actions.

```ts
import { createClient } from 'viem'
import { createConfig, http } from 'wagmi'
import { arbitrum, arbitrumSepolia, mainnet, sepolia } from 'wagmi/chains'
import { coinbaseWallet, injected, safe, walletConnect } from 'wagmi/connectors'

import { buildConfig, writeL2GnsMintSignal } from '@edgeandnode/contract-utils'

async function mint() {
  const config = createConfig({
    chains: [arbitrum, arbitrumSepolia, mainnet, sepolia],
    ssr,
    client({ chain }) {
      return createClient({ chain, transport: http() })
    },
    connectors: [
      coinbaseWallet({ appName: 'The Graph' }),
      injected(),
      safe({ allowedDomains: [/app.safe.global$/] }),
      walletConnect({
        projectId: 'WALLETCONNECT_PROJECT_ID',
        metadata: {
          name: 'The Graph',
          description: 'The Graph Network suite of apps wallet integration',
          url: 'https://thegraph.com',
          icons: [''],
        },
        qrModalOptions: {
          themeMode: 'dark',
        },
      }),
    ],
  })

  const mintTx = await writeL2GnsMintSignal(config, {
    account: `0x`,
    args: [0n, 0n, 0n],
  })
}
```

## Generating wagmi types

```bash
# required a `.env.local` file with env vars (see below)
pnpm generate
# or
pnpm wagmi generate
```

> You might get `Max calls per sec rate limit reached (5/sec)` when running the commands above. Since wagmi CLI caches the contract ABIs you can just keep re-running the command and the CLI will fetch more and more ABIs and eventually generates the utils.

## Env vars (used to run wagmi generate)

You can just create free API keys and they will work with wagmi CLI:

- `ARBISCAN_KEY` -> api key for reading contract ABIs from [arbiscan.io](https://arbiscan.io/myapikey)
- `ETHERSCAN_KEY` -> api key for reading contract ABIs from [etherscan.io](https://etherscan.io/myapikey)

## References

- [wagmi cli](https://wagmi.sh/cli/getting-started)
