Ali Behjati 0df243ba9e [eth] Add benchmark tests (#368) před 3 roky
..
.openzeppelin a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
contracts 0df243ba9e [eth] Add benchmark tests (#368) před 3 roky
forge-test 0df243ba9e [eth] Add benchmark tests (#368) před 3 roky
lib 1c17499d03 Add foundry base (#362) před 3 roky
migrations a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
networks a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
scripts d3d10f2ce2 Add set fee to tests + add some sanity checks (#350) před 3 roky
test bdc492f919 [eth] Some contract improvements (#356) před 3 roky
.dockerignore 4f4bec508e EVM deployment scripts and documentation (#141) před 3 roky
.env.cluster.mainnet a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
.env.cluster.testnet a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
.env.prod.arbitrum f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.aurora f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.aurora_testnet f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.avalanche f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.bnb f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.bnb_testnet f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.development f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.ethereum f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.fantom f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.fantom_testnet f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.fuji f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.goerli f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.mumbai f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.optimism f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.prod.optimism_goerli a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
.env.prod.polygon f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.env.template a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
.env.test f7958e387f [eth] Add set fee migration step + deployment process improvement (#346) před 3 roky
.gitignore 1c17499d03 Add foundry base (#362) před 3 roky
Deploying.md 62ef9d7d1f Add set fee mainnet deployment info (#349) před 3 roky
README.md 0df243ba9e [eth] Add benchmark tests (#368) před 3 roky
VERIFY.md 05c631b022 Add mainnet networks (#274) před 3 roky
deploy.sh c47199d6cb [eth] contract improvement (#348) před 3 roky
devnet_mnemonic.txt 2ea41b8176 [WIP] Pr/drozdziak1/p2w batching/5e704f8b (#877) před 3 roky
foundry.toml 0df243ba9e [eth] Add benchmark tests (#368) před 3 roky
mine.js da768a09c4 ethereum: mine ganache blocks in the background před 5 roky
package-lock.json a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
package.json a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
remappings.txt 0df243ba9e [eth] Add benchmark tests (#368) před 3 roky
truffle-config.js a9a1fb7b5a Add deployment files of optimism goerli + fix bugs (#364) před 3 roky
truffle-verify-constants.patch 60d313b23c ethereum: Add contract verification instructions (#792) před 3 roky

README.md

Pyth Ethereum Contract

This directory contains The Pyth contract on Ethereum and utilities to deploy it in EVM chains.

Installation

Run the following command to install required dependencies for the contract:

# xc-governance-sdk-js is a local dependency that should be built
# it is used in deployment (truffle migrations) to generate/sanity check
# the governance VAAs 
pushd third_party/pyth/xc-governance-sdk-js && npm ci && popd
npm ci

Deployment

Please refer to Deploying.md for more information.

Foundry

Foundry can be installed by the official installer, or by running our helper script which will automatically pull the correct installation script individually for Foundry and the Solidity compiler for your current OS. This may work better if you are running into networking/firewall issues using Foundry's Solidity installer. To use helper script, run the command below from this directory:

pyth-crosschain/ethereum $ bash ../scripts/install-foundry.sh

You need to install npm dependencies as described in Installation. Also, you need to run the following command to install forge dependencies:

npm run install-forge-deps

After installing the dependencies. Run forge build to build the contracts and forge test to test the contracts using tests in forge-test directory.

Gas Benchmark

You can use foundry to run benchmark tests written in forge-test/GasBenchmark.t.sol. To run the tests with gas report you can run forge test --gas-report --match-contract GasBenchmark. However, as there are multiple benchmarks, this might not be useful. You can run a specific benchmark test by passing the test name using --match-test. A full command to run testBenchmarkUpdatePriceFeedsFresh benchmark test is like this:

forge test --gas-report --match-contract GasBenchmark --match-test testBenchmarkUpdatePriceFeedsFresh

A gas report should have a couple of tables like this:

╭───────────────────────────────────────────────────────────────────────────────────────────┬─────────────────┬────────┬────────┬─────────┬─────────╮
│ node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol:ERC1967Proxy contract ┆                 ┆        ┆        ┆         ┆         │
╞═══════════════════════════════════════════════════════════════════════════════════════════╪═════════════════╪════════╪════════╪═════════╪═════════╡
│ Deployment Cost                                                                           ┆ Deployment Size ┆        ┆        ┆         ┆         │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ 164236                                                                                    ┆ 2050            ┆        ┆        ┆         ┆         │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ Function Name                                                                             ┆ min             ┆ avg    ┆ median ┆ max     ┆ # calls │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ .............                                                                             ┆ .....           ┆ .....  ┆ .....  ┆ .....   ┆ ..      │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ parseAndVerifyVM                                                                          ┆ 90292           ┆ 91262  ┆ 90292  ┆ 138792  ┆ 50      │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ updatePriceFeeds                                                                          ┆ 187385          ┆ 206005 ┆ 187385 ┆ 1118385 ┆ 50      │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
│ .............                                                                             ┆ .....           ┆ .....  ┆ .....  ┆ .....   ┆ ...     │
╰───────────────────────────────────────────────────────────────────────────────────────────┴─────────────────┴────────┴────────┴─────────┴─────────╯

For most of the methods, the median gas usage is an indication of our desired gas usage. Because the calls that store something in the storage for the first time use significantly more gas.

If you like to optimize the contract and measure the gas optimization you can get gas snapshots using forge snapshot and evaluate your optimization with it. For more information, please refer to Gas Snapshots documentation. Once you optimized the code, please share the snapshot difference (generated using forge snapshot --diff <old-snapshot>) in the PR too.