require('dotenv').config() // Mainnet process.env.DEBUG = '0' const fs = require('fs') const { logMessage, errorMessage } = require('../lib/logger') const { tronWeb, setDefaultPrivateKey, contractData, feeLimit, sunToTrx, addressToBase58 } = require('../lib/tron') const { sleep } = require('../lib/utils') // Binary data of the contract and ABI const bytecode = contractData.bytecode const abi = contractData.abi logMessage('1_deploy_on_mainnet', 'Bytecode and ABI loaded') // Get TRX balance const getTrxBalance = async (address) => { const balance = sunToTrx(await tronWeb.trx.getBalance(address)) logMessage('1_deploy_on_mainnet', `TRX balance: ${balance} TRX`) return balance } async function deployContract() { try { setDefaultPrivateKey() logMessage('1_deploy_on_mainnet', 'Deploying contract...') // Get TRX balance const address = tronWeb.defaultAddress.base58 const balance = await getTrxBalance(address) if (balance < 200) { throw new Error('Insufficient TRX balance to deploy the contract') } // Sign transaction const unsignedTxn = await tronWeb.transactionBuilder.createSmartContract({ abi, bytecode, feeLimit, callValue: 0, // TRX sent to the contract parameters: [process.env.CHAINLINK_USD_PRICE_FEED] }) const signedTxn = await tronWeb.trx.sign(unsignedTxn) logMessage('1_deploy_on_mainnet', 'Transaction signed') // Broadcast transaction const tx = await tronWeb.trx.sendRawTransaction(signedTxn) logMessage('1_deploy_on_mainnet', `Transaction ID: ${tx.txid}`) logMessage('1_deploy_on_mainnet', 'Contract deployed') // Get contract address let contractAddress = {} do { await sleep(5) // Wait 5 seconds contractAddress = await tronWeb.trx.getTransactionInfo(tx.txid) } while (!contractAddress.contract_address) logMessage( '1_deploy_on_mainnet', `Contract address: ${contractAddress.contract_address}` ) // Add/Change into .env let envContent = fs.readFileSync('.env', 'utf8') if (/CONTRACT_ADDRESS=/.test(envContent)) { envContent = envContent.replace( /CONTRACT_ADDRESS=.*/, `CONTRACT_ADDRESS=${addressToBase58(contractAddress.contract_address)}` ) } else { envContent += `\n\n# Contract address\nCONTRACT_ADDRESS=${addressToBase58( contractAddress.contract_address )}` } fs.writeFileSync('.env', envContent) process.exit(0) } catch (error) { errorMessage( '1_deploy_on_mainnet', `ERROR: ${error.message || JSON.stringify(error)}` ) } } deployContract()