|
|
@@ -0,0 +1,27 @@
|
|
|
+# Deploying Contracts to Production
|
|
|
+
|
|
|
+Running the Truffle migrations in [`migrations/prod`](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`](https://github.com/MedXProtocol/truffle-deploy-registry) to store the addresses separately from the artifacts, in the [`networks`](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:
|
|
|
+
|
|
|
+```bash
|
|
|
+# Load the configuration environment variables for deploying to BSC Testnet.
|
|
|
+rm -f .env && ln -s .env.prod.development .env & set -o allexport && source .env set && set +o allexport
|
|
|
+
|
|
|
+# 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 run 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`](.env.prod.development).
|