First commit
This commit is contained in:
		
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
|  | ||||
| src/js/metacoin-config.js | ||||
| node_modules | ||||
| build | ||||
| .env | ||||
| tmp | ||||
| _old | ||||
| .venv | ||||
| *.mnemonic | ||||
| *_wallet.json | ||||
| *.log | ||||
| _contracts_old | ||||
							
								
								
									
										24
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| { | ||||
|   "editor.bracketPairColorization.enabled": true, | ||||
|   "editor.fontFamily": "'Cascadia Code PL', Consolas, 'Courier New', monospace", | ||||
|   "editor.fontLigatures": true, | ||||
|   "editor.guides.bracketPairs": true, | ||||
|   "editor.linkedEditing": true, | ||||
|   "editor.minimap.enabled": false, | ||||
|   "editor.tabSize": 2, | ||||
|   "editor.useTabStops": true, | ||||
|   "editor.formatOnSave": true, | ||||
|   "editor.formatOnPaste": true, | ||||
|   "files.trimTrailingWhitespace": true, | ||||
|   "github.copilot.enable": { | ||||
|     "*": true, | ||||
|     "markdown": false, | ||||
|     "plaintext": false, | ||||
|     "scminput": false | ||||
|   }, | ||||
|   "prettier.semi": false, | ||||
|   "prettier.singleQuote": true, | ||||
|   "prettier.trailingComma": "none", | ||||
|   "terminal.integrated.defaultProfile.linux": "JavaScript Debug Terminal", | ||||
|   "terminal.integrated.defaultProfile.windows": "JavaScript Debug Terminal" | ||||
| } | ||||
							
								
								
									
										21
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| MIT License Copyright (c) 2025 Toni Ramiro <sargatxet@gmail.com> | ||||
|  | ||||
| Permission is hereby granted, free of | ||||
| charge, to any person obtaining a copy of this software and associated | ||||
| documentation files (the "Software"), to deal in the Software without | ||||
| restriction, including without limitation the rights to use, copy, modify, merge, | ||||
| publish, distribute, sublicense, and/or sell copies of the Software, and to | ||||
| permit persons to whom the Software is furnished to do so, subject to the | ||||
| following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice | ||||
| (including the next paragraph) shall be included in all copies or substantial | ||||
| portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF | ||||
| ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO | ||||
| EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||||
| OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||
| FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										19
									
								
								contracts/Migrations.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								contracts/Migrations.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| // SPDX-License-Identifier: MIT | ||||
| pragma solidity >=0.4.22 <0.9.0; | ||||
|  | ||||
| contract Migrations { | ||||
|   address public owner = msg.sender; | ||||
|   uint public last_completed_migration; | ||||
|  | ||||
|   modifier restricted() { | ||||
|     require( | ||||
|       msg.sender == owner, | ||||
|       "This function is restricted to the contract's owner" | ||||
|     ); | ||||
|     _; | ||||
|   } | ||||
|  | ||||
|   function setCompleted(uint completed) public restricted { | ||||
|     last_completed_migration = completed; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										31
									
								
								contracts/SargaTrxUsdPrice.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								contracts/SargaTrxUsdPrice.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| // SPDX-License-Identifier: MIT | ||||
| pragma solidity ^0.8.20; | ||||
|  | ||||
| import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol"; | ||||
|  | ||||
| contract SargaTrxUsdPrice { | ||||
|     AggregatorV3Interface internal _priceFeed; | ||||
|  | ||||
|     /** | ||||
|      * Network: Tron | ||||
|      * Aggregator: TRX/USD | ||||
|      * Address: TC6o8AakUg4Xz9nHY9qXpJNsgF7CQkwBqF | ||||
|      */ | ||||
|     constructor(address priceFeedAddress) { | ||||
|         _priceFeed = AggregatorV3Interface(priceFeedAddress); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns the latest price | ||||
|      */ | ||||
|     function getLatestPrice() public view returns (int) { | ||||
|         ( | ||||
|             , | ||||
|             /* uint80 roundID */ int price /* uint startedAt */ /* uint timeStamp */ /* uint80 answeredInRound */, | ||||
|             , | ||||
|             , | ||||
|  | ||||
|         ) = _priceFeed.latestRoundData(); | ||||
|         return price; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| services: | ||||
|   tron: | ||||
|     image: tronbox/tre | ||||
|     restart: unless-stopped | ||||
|     ports: | ||||
|       - 9090:9090 | ||||
|     # volumes: | ||||
|     #   - ./accounts-data:/config    # node will load these keys | ||||
							
								
								
									
										13
									
								
								lib/logger.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lib/logger.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| 'use strict' | ||||
|  | ||||
| // Log | ||||
| const logMessage = (source, msg) => { | ||||
|   console.log(new Date(), `[${source}]`, msg) | ||||
| } | ||||
|  | ||||
| // Error | ||||
| const errorMessage = (source, msg) => { | ||||
|   console.error(new Date(), `[${source}]`, msg) | ||||
| } | ||||
|  | ||||
| module.exports = { logMessage, errorMessage } | ||||
							
								
								
									
										84
									
								
								lib/tron.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								lib/tron.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | ||||
| 'use strict' | ||||
|  | ||||
| // Environment | ||||
| require('dotenv').config() | ||||
|  | ||||
| // Libraries | ||||
| const path = require('path') | ||||
| const fs = require('fs') | ||||
| const { decryptString } = require('./utils') | ||||
|  | ||||
| // Connect to Tron network | ||||
| const TronWeb = require('tronweb') | ||||
|  | ||||
| // Set Tron connection | ||||
| const API_URL = | ||||
|   process.env.DEBUG === '1' | ||||
|     ? process.env.TRON_NILE_API | ||||
|     : process.env.DEBUG === '2' | ||||
|     ? process.env.TRON_LOCAL_API | ||||
|     : process.env.TRON_MAINNET_API | ||||
| const HttpProvider = TronWeb.providers.HttpProvider | ||||
| const fullNode = new HttpProvider(API_URL) | ||||
| const solidityNode = new HttpProvider(API_URL) | ||||
| const eventServer = API_URL | ||||
| const tronWeb = new TronWeb(fullNode, solidityNode, eventServer) | ||||
| const feeLimit = parseInt(process.env.FEE_LIMIT) | ||||
|  | ||||
| // Set contract data | ||||
| const contractPath = path.join( | ||||
|   __dirname, | ||||
|   `../build/contracts/${process.env.CONTRACT_NAME}.json` | ||||
| ) | ||||
| const contractData = JSON.parse(fs.readFileSync(contractPath)) | ||||
| const contract = tronWeb.contract( | ||||
|   contractData.abi, | ||||
|   process.env.CONTRACT_ADDRESS | ||||
| ) | ||||
|  | ||||
| // TRX to SUN conversion | ||||
| function trxToSun(trx) { | ||||
|   const sun = +(+trx * 1e6).toFixed(0) | ||||
|   return sun | ||||
| } | ||||
|  | ||||
| // SUN to TRX conversion | ||||
| function sunToTrx(sun) { | ||||
|   const trx = +(+sun / 1e6).toFixed(6) | ||||
|   return trx | ||||
| } | ||||
|  | ||||
| // Address to base58 conversion | ||||
| function addressToBase58(address) { | ||||
|   return tronWeb.address.fromHex(address) | ||||
| } | ||||
|  | ||||
| // Set default private key | ||||
| function setDefaultPrivateKey(pk) { | ||||
|   // Decrypt private key | ||||
|   const decPK = | ||||
|     pk || | ||||
|     decryptString(process.env.PRIVATE_KEY_MAINNET, process.env.SEED_PASSWORD) | ||||
|   // Set private key in TronWeb | ||||
|   tronWeb.setPrivateKey(decPK.substring(2)) | ||||
|  | ||||
|   return decPK | ||||
| } | ||||
|  | ||||
| // Get TRX balance | ||||
| const getTrxBalance = async (address) => { | ||||
|   const balance = sunToTrx(await tronWeb.trx.getBalance(address)) | ||||
|   return balance | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|   tronWeb, | ||||
|   setDefaultPrivateKey, | ||||
|   feeLimit, | ||||
|   contractData, | ||||
|   contract, | ||||
|   trxToSun, | ||||
|   sunToTrx, | ||||
|   addressToBase58, | ||||
|   getTrxBalance | ||||
| } | ||||
							
								
								
									
										73
									
								
								lib/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								lib/utils.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| 'use strict' | ||||
|  | ||||
| // Libraries | ||||
| const { customAlphabet } = require('nanoid') | ||||
| const StringCrypto = require('string-crypto') | ||||
| const path = require('path') | ||||
|  | ||||
| // NanoId with custom alphabet | ||||
| const newId = (len) => { | ||||
|   const nanoid = customAlphabet( | ||||
|     'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', | ||||
|     len || 21 | ||||
|   ) | ||||
|   return nanoid() | ||||
| } | ||||
|  | ||||
| // Remove all _id | ||||
| const removeFieldByName = (o, fieldName) => { | ||||
|   delete o[fieldName] | ||||
|   for (let v of Object.values(o)) | ||||
|     if (v instanceof Object) removeFieldByName(v, fieldName) | ||||
| } | ||||
|  | ||||
| // Clean object from unnecesary fields | ||||
| const fieldsToRemove = ['_id'] | ||||
| const cleanObject = (o) => { | ||||
|   const obj = JSON.parse(JSON.stringify(o)) | ||||
|   fieldsToRemove.forEach((f) => { | ||||
|     removeFieldByName(obj, f) | ||||
|   }) | ||||
|   return obj | ||||
| } | ||||
|  | ||||
| // Securize sensible data | ||||
| const cryptoOptions = { | ||||
|   salt: process.env.CRYPTO_SALT, | ||||
|   iterations: parseInt(process.env.CRYPTO_ITERATIONS), | ||||
|   digest: process.env.CRYPTO_DIGEST // one of: 'blake2b512' | 'blake2s256' | 'md4' | 'md5' | 'md5-sha1' | 'mdc2' | 'ripemd160' | 'sha1' | 'sha224' | 'sha256' | 'sha3-224' | 'sha3-256' | 'sha3-384' | 'sha3-512' | 'sha384' | 'sha512' | 'sha512-224' | 'sha512-256' | 'sm3' | 'whirlpool'; | ||||
| } | ||||
| const stringCypto = new StringCrypto(cryptoOptions) | ||||
| const encryptString = (value, password) => { | ||||
|   return stringCypto.encryptString(value, password) | ||||
| } | ||||
|  | ||||
| const decryptString = (value, password) => { | ||||
|   return stringCypto.decryptString(value, password) | ||||
| } | ||||
|  | ||||
| // Split array into pieces | ||||
| const chunk = (arr, size) => | ||||
|   arr.reduce( | ||||
|     (acc, _, i) => (i % size ? acc : [...acc, arr.slice(i, i + size)]), | ||||
|     [] | ||||
|   ) | ||||
|  | ||||
| // Sleep | ||||
| const sleep = (segundos) => { | ||||
|   return new Promise((resolve) => setTimeout(resolve, segundos * 1000)) | ||||
| } | ||||
|  | ||||
| // Get file name | ||||
| const getFileName = (f) => path.basename(f, '.js') | ||||
|  | ||||
| module.exports = { | ||||
|   newId, | ||||
|   removeFieldByName, | ||||
|   cleanObject, | ||||
|   encryptString, | ||||
|   decryptString, | ||||
|   chunk, | ||||
|   sleep, | ||||
|   getFileName | ||||
| } | ||||
							
								
								
									
										7
									
								
								migrations/1_initial_migration.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								migrations/1_initial_migration.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| require('dotenv').config() | ||||
|  | ||||
| var Migrations = artifacts.require('./Migrations.sol') | ||||
|  | ||||
| module.exports = function (deployer) { | ||||
|   deployer.deploy(Migrations) | ||||
| } | ||||
							
								
								
									
										7
									
								
								migrations/2_deploy_contracts.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								migrations/2_deploy_contracts.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| require('dotenv').config() | ||||
|  | ||||
| var MyContract = artifacts.require('./SargaTrxUsdPrice.sol') | ||||
|  | ||||
| module.exports = function (deployer) { | ||||
|   deployer.deploy(MyContract) | ||||
| } | ||||
							
								
								
									
										22
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| { | ||||
|   "name": "sarga_tron_usd_price", | ||||
|   "version": "0.1.0", | ||||
|   "description": "Contract to get TRX/USD value", | ||||
|   "main": "index.js", | ||||
|   "author": "Toni Ramiro <sargatxet@gmail.com>", | ||||
|   "license": "MIT", | ||||
|   "private": true, | ||||
|   "dependencies": { | ||||
|     "@chainlink/contracts": "1.4.0", | ||||
|     "@noble/secp256k1": "1.7.1", | ||||
|     "dotenv": "16.4.7", | ||||
|     "solc": "0.8.20", | ||||
|     "string-crypto": "2.0.2", | ||||
|     "tronbox": "4.1.1", | ||||
|     "tronweb": "5.3.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@openzeppelin/test-helpers": "0.5.16", | ||||
|     "chai": "5.2.0" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										1
									
								
								sample-env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								sample-env
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| export PRIVATE_KEY_SHASTA=0000000000000000000000000000000000000000000000000000000000000001 | ||||
							
								
								
									
										93
									
								
								scripts/1_deploy_on_mainnet.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								scripts/1_deploy_on_mainnet.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| 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() | ||||
							
								
								
									
										1
									
								
								test/.git-folder-keeper
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								test/.git-folder-keeper
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| This is a placeholder file to ensure the parent directory in the git repository. Feel free to remove. | ||||
							
								
								
									
										41
									
								
								test/SargaTrxUsdPrice.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								test/SargaTrxUsdPrice.test.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| // test/SargaTrxUsdPrice.test.js | ||||
|  | ||||
| require('dotenv').config() | ||||
|  | ||||
| const TronWeb = require('tronweb') | ||||
| const HttpProvider = TronWeb.providers.HttpProvider | ||||
| const API_URL = process.env.TRON_API | ||||
| const fullNode = new HttpProvider(API_URL) | ||||
| const solidityNode = new HttpProvider(API_URL) | ||||
| const eventServer = API_URL | ||||
| const tronWeb = new TronWeb(fullNode, solidityNode, eventServer) | ||||
|  | ||||
| let assert | ||||
|  | ||||
| const SargaTrxUsdPrice = artifacts.require('SargaTrxUsdPrice') | ||||
|  | ||||
| contract('SargaTrxUsdPrice', () => { | ||||
|   it('get TRX/USD value', async () => { | ||||
|     // carga Chai como ESM y extrae assert | ||||
|     const chaiModule = await import('chai') | ||||
|     assert = chaiModule.assert | ||||
|  | ||||
|     // 1) Load already deployed contract | ||||
|     const distributor = await SargaTrxUsdPrice.at(process.env.CONTRACT_ADDRESS) | ||||
|  | ||||
|     // 2) Call the getTrxUsdPrice function | ||||
|     const trxUsdPrice = await distributor.getLatestPrice().call() | ||||
|     console.log( | ||||
|       'TRX/USD price:', | ||||
|       parseFloat(trxUsdPrice.toString()) / 10 ** 8, | ||||
|       'USD' | ||||
|     ) | ||||
|  | ||||
|     // 3) Assert the value is greater than 0 | ||||
|     assert.isAbove( | ||||
|       parseFloat(trxUsdPrice), | ||||
|       0, | ||||
|       'TRX/USD price should be greater than 0' | ||||
|     ) | ||||
|   }) | ||||
| }) | ||||
							
								
								
									
										3
									
								
								tronbox-config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								tronbox-config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| module.exports = { | ||||
|  | ||||
| }; | ||||
							
								
								
									
										44
									
								
								tronbox-evm-config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								tronbox-evm-config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| module.exports = { | ||||
|   networks: { | ||||
|     bttc: { | ||||
|       // Don't put your private key here: | ||||
|       privateKey: process.env.PRIVATE_KEY_BTTC, | ||||
|       /* | ||||
| Create a .env file (it must be gitignored) containing something like | ||||
|  | ||||
|   export PRIVATE_KEY_BTTC=4E7FEC...656243 | ||||
|  | ||||
| Then, run the migration with: | ||||
|  | ||||
|   source .env && tronbox migrate --network bttc --evm | ||||
|       */ | ||||
|       fullHost: 'https://rpc.bt.io', | ||||
|       // gas: 8500000, // Gas sent with each transaction | ||||
|       // gasPrice: '500000000000000', // 500,000 gwei (in wei) | ||||
|       network_id: '1' | ||||
|     }, | ||||
|     donau: { | ||||
|       privateKey: process.env.PRIVATE_KEY_DONAU, | ||||
|       fullHost: 'https://pre-rpc.bt.io', | ||||
|       network_id: '2' | ||||
|     }, | ||||
|     development: { | ||||
|       privateKey: process.env.PRIVATE_KEY_DEV, | ||||
|       fullHost: 'http://127.0.0.1:8545', | ||||
|       network_id: '9' | ||||
|     } | ||||
|   }, | ||||
|   compilers: { | ||||
|     solc: { | ||||
|       version: '0.8.7', | ||||
|       settings: { | ||||
|         // optimizer: { | ||||
|         //   enabled: true, | ||||
|         //   runs: 200 | ||||
|         // }, | ||||
|         // evmVersion: 'istanbul', | ||||
|         // viaIR: true, | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										66
									
								
								tronbox.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								tronbox.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| const port = process.env.HOST_PORT || 9090 | ||||
|  | ||||
| module.exports = { | ||||
|   networks: { | ||||
|     mainnet: { | ||||
|       // Don't put your private key here: | ||||
|       privateKey: process.env.PRIVATE_KEY_MAINNET, | ||||
|       /* | ||||
| Create a .env file (it must be gitignored) containing something like | ||||
|  | ||||
|   export PRIVATE_KEY_MAINNET=4E7FEC...656243 | ||||
|  | ||||
| Then, run the migration with: | ||||
|  | ||||
|   source .env && tronbox migrate --network mainnet | ||||
|  | ||||
|       */ | ||||
|       userFeePercentage: 100, | ||||
|       feeLimit: 1000 * 1e6, | ||||
|       fullHost: 'https://api.trongrid.io', | ||||
|       network_id: '1' | ||||
|     }, | ||||
|     shasta: { | ||||
|       privateKey: process.env.PRIVATE_KEY_SHASTA, | ||||
|       userFeePercentage: 50, | ||||
|       feeLimit: 1000 * 1e6, | ||||
|       fullHost: 'https://api.shasta.trongrid.io', | ||||
|       network_id: '2' | ||||
|     }, | ||||
|     nile: { | ||||
|       privateKey: process.env.PRIVATE_KEY_NILE, | ||||
|       userFeePercentage: 100, | ||||
|       feeLimit: 1000 * 1e6, | ||||
|       fullHost: 'https://nile.trongrid.io', | ||||
|       network_id: '3' | ||||
|     }, | ||||
|     development: { | ||||
|       // For tronbox/tre docker image | ||||
|       privateKey: '0000000000000000000000000000000000000000000000000000000000000001', | ||||
|       userFeePercentage: 0, | ||||
|       feeLimit: 1000 * 1e6, | ||||
|       fullHost: 'http://127.0.0.1:' + port, | ||||
|       network_id: '9' | ||||
|     }, | ||||
|     compilers: { | ||||
|       solc: { | ||||
|         version: "0.8.20",      // Specify a Solidity version >= 0.8.20 | ||||
|         settings: { | ||||
|           optimizer: { | ||||
|             enabled: true, | ||||
|             runs: 200 | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   // solc compiler optimize | ||||
|   solc: { | ||||
|     optimizer: { | ||||
|       enabled: true, | ||||
|       runs: 200 | ||||
|     }, | ||||
|     evmVersion: 'istanbul', | ||||
|     viaIR: true, | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user