Contract & Graph Deployment Guide

Reference for deploying TalentLayer and related dependencies to a new chain.

Deploy Workflow

To be prepared before deploy

  • Setup local .env file to be able to execute all commands.

    • Be sure you have all variables in the .env.example file

    • Mandatory:

      • MNEMONIC

      • SNOWTRACE_API_KEY & POLYGONSCAN_API_KEY: used to validate the contracts

      • INFURA_API_KEY: used by hardhat to deploy

    • Optional

      • SUBGRAPH_FOLDER: useful to easly copy config into subgraph repo

      • DEPLOY_NETWORK: use by Makefile to define network for all commands

      • INFURA_ID & INFURA_SECRET: use by playground script to post json on IPFS

  • Be sure that your address has enough fund

  • Note: if you have any issue in the command bellow, check the troubleshooting.md

  • Replace the network used in the command bellow by the one you want to deploy to. For this documentation we use polygon.

Step 1: Contract deployment

  • Deploy TL contracts: npx hardhat deploy-full --network polygon --verify

Step 2: Setup initial data

  • Double-check the networkConfig.ts, it contains all setups for the current network

    • multisigAddressList: list of multisig addresses used to receive fee and with ownership of upgradabiltiy

    • allowedTokenList: list of tokens allowed to be used as payment

    • platformList: list of platform name and address used to create our partners platformId

  • Launch the setup command, it will automatically add the multisig addresses, the allowed tokens and the platformIds

    • npx hardhat initial-setup --network polygon

Step 3: Update Subgraph

Update configuration

  • Update the abis from the contract folder to the graph folder

  • configure your env var DEPLOY_NETWORK

  • Update network.json file with the new deployed addresses: make update-graph-config

  • Update the start block in the network.json. Use the block number of the first contract deployed

Deploy your subgraph

  • Update the abis in the subgraph repo

  • Generate code from your GraphQL schema and operations.: graph codegen

  • Copy configuration from network.json and buid graph code: graph build --network polygon

  • Authenticate to the hosted service: graph auth --network polygon --product hosted-service <your access token>

  • Deploy to the hosted service:

    • polygon: graph deploy --product hosted-service talentlayer/talent-layer-polygon

    • fuji: graph deploy --product hosted-service talentlayer/talent-layer-fuji

Step 4: Update Indie Frontend

  • Update the abis in the frontend repo make update-frontend-config

  • Fill the network const with the right deployed addresses in the src > config.ts file

Step 5: Defender

  • Transfer ownership to the multisig for every contracts

    • for ownable contracts:

      • npx hardhat transfer-ownership --contract-name "TalentLayerID" --address 0x0CFF3F17b62704A0fc76539dED9223a44CAf4825 --network polygon

      • npx hardhat transfer-ownership --contract-name "TalentLayerService" --address 0x0CFF3F17b62704A0fc76539dED9223a44CAf4825 --network polygon

      • npx hardhat transfer-ownership --contract-name "TalentLayerReview" --address 0x0CFF3F17b62704A0fc76539dED9223a44CAf4825 --network polygon

      • npx hardhat transfer-ownership --contract-name "TalentLayerEscrow" --address 0x0CFF3F17b62704A0fc76539dED9223a44CAf4825 --network polygon

    • for access control contracts:

      • npx hardhat grant-role --contract-name "TalentLayerPlatformID" --address 0x0CFF3F17b62704A0fc76539dED9223a44CAf4825 --network polygon

Last updated