# Pyth Starknet Contract

This directory contains the Pyth contract on [Starknet](https://www.starknet.io/).

## Installation

1. Install Scarb (the Cairo and Starknet development toolchain) by following [the installation instructions](https://docs.swmansion.com/scarb/download).
2. Install Starknet Foundry by following [the installation instructions](https://foundry-rs.github.io/starknet-foundry/getting-started/installation.html).

The `.tool-versions` file in this directory specifies the tool versions used by the contract.

## Testing

Run `snforge test` in this directory to run the contract unit tests and integration tests.

The `tests/data.cairo` file contains input data that was generated with `test_vaas` tool.
To regenerate it, run the following commands from the repository root (requires Rust installation):

```
cd target_chains/starknet/tools/test_vaas
cargo run --bin generate_test_data > ../../contracts/tests/data.cairo
```

## Formatting

Run `scarb fmt` to automatically format the source code.

## Local deployment

1. Install Starkli (a cli tool for Starknet) by following [the installation instructions](https://github.com/xJonathanLEI/starkli).
2. Install Katana (a local Starknet node) by following [the installation instructions](https://book.starknet.io/ch02-04-katana.html).
3. Run the deployment script:

```bash
deploy/deploy.sh > ~/pyth.env
```

This generates `~/pyth.env` file that should contain the address of the deployed contract, for example:

```bash
$ cat ~/pyth.env
PYTH_WORMHOLE_ADDRESS=0x07fa5a689a768982ecb60ed05f39ca8f6efe623dd32ee6f3608662e3452a104c
PYTH_CONTRACT_ADDRESS=0x00f61bf0314a478bfc865c71d33cc53c77d0f994ea4a228ccf888d14435a8821
```

Apply these variables to your current shell with:

```bash
export $(xargs < ~/pyth.env)
```
