pyth-crosschain/ethereum/Deploying.md

2.0 KiB

Deploying Contracts to Production

Running the Truffle migrations in migrations/prod will deploy the contracts to production. Truffle stores the address of the deployed contracts in the build artifacts, which can make local development difficult. We use truffle-deploy-registry to store the addresses separately from the artifacts, in the networks directory. When we need to perform operations on the deployed contracts, such as performing additional migrations, we can run apply-registry -n networks/$NETWORK to populate the artifacts with the correct addresses.

An example deployment process, for deploying to Binance Smart Chain Testnet:

# Load the configuration environment variables for deploying to BSC Testnet.
rm -f .env; ln -s .env.prod.binance_testnet .env && set -o allexport && source .env set && set +o allexport

# The Secret Recovery Phrase for the wallet the contract will be deployed from.
export MNEMONIC=...

# Ensure that we deploy a fresh build with up-to-date dependencies.
rm -rf build .openzeppelin node_modules && npm install && npx truffle compile --all

# Merge the network addresses into the artifacts, if some contracts are already deployed.
npx apply-registry -n networks/$MIGRATIONS_NETWORK

# Perform the migration
npx truffle migrate --network $MIGRATIONS_NETWORK

# Running the migration will cause a JSON file to be written to the networks/
# directory, with a filename like 1648198934288.json (the Truffle network ID).
# To make it more obvious which network this corresponds to, move this file
# to networks/$MIGRATIONS_NETWORK.
mkdir -p networks/$MIGRATIONS_NETWORK && mv networks/NETWORK__ID.json networks/$MIGRATIONS_NETWORK

As a sanity check, it is recommended to deploy the migrations in migrations/prod to the Truffle development network first. You can do this by using the configuration values in .env.prod.development.