# Chainlink Functions package

This package is an contains the comands necessary for interacting with the Chainlink Functions contracts

## Handling contract updates
Whenever a contract is changed, the ABI and build must be updated this Gauntlet package.

#### Prerequisites:
First, ensure that [Foundry](https://github.com/foundry-rs/foundry) is installed

In your local environment set the following environment variable to tell Foundry to use the Functions profile:
```
export FOUNDRY_PROFILE=functions
```

#### To update an ABI:

1. From the [@chainlink](https://github.com/smartcontractkit/chainlink) repository go to `/contracts`.
2. Run `forge build`
3. In the folder `./contracts/foundry-artifacts/<contract name>/<contract name>.json` there will be artifacts. Find the relevant contracts and copy the ABI.

#### To regenerate the `FunctionsContracts.build.json` file:

1. From the [@chainlink](https://github.com/smartcontractkit/chainlink) repository go to `/contracts`.
2. In `foundry.toml` the `[profile.functions]` temporarily update `test` to point only to the 
```
test = 'src/v0.8/functions/tests/v1_X/testhelpers/FunctionsClientUpgradeHelper.sol'
```
3. Run:
```
forge build --build-info --build-info-path=./info
```
4. You will notice a new folder in `./contracts/info`. Verify that it looks as expected, then copy the contents into `FunctionsContracts.build.json`

*If using Linux, remove the `.Linux.gcc` suffix from the end of the field "solcLongVersion"

## Using a local build

There are scenarios such as when testing new code or deploying to a staging DON that you may want to make changes and use them through the Gauntlet package.

The proper way to do this would be:
1. Make experimental changes
2. Bump the version here in `gauntlet-evm`'s `@chainlink/evm-gauntlet-functions` package.json
3. Run `yarn build` from the `gauntlet-evm` respository
4. Now in the `gauntlet` repository link local package version using `npm link [path to gauntlet-evm's @chainlink/evm-gauntlet-functions package.json]`
5. Change `gauntlet`'s package.json to depend on the local version that was bumped to in `gauntlet-evm`'s `@chainlink/evm-gauntlet-functions` package.json
6. Run `yarn install` from the `gauntlet` repository
7. Run `yarn build` from the `gauntlet` repository
8. To verify, the `gauntlet` repository's `node_modules` should have `@chainlink/evm-gauntlet-functions` with the version that you set locally and running `npm ls -g` should show the local package version
9. Now that the packages are linked any hot changes to `gauntlet-evm` can be reloaded by running `yarn build` in `gauntlet-evm` and then again in `gauntlet`