From 74161fdf89983cbe48dee56cbf31b5bd8911b05d Mon Sep 17 00:00:00 2001 From: squidbear <379651+czarly@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:18:21 +0200 Subject: [PATCH] maybe --- .../tron-mainnet-java-tron-pruned-rocksdb.yml | 45 ++ tron/mainnet/config.conf | 742 ++++++++++++++++++ tron/mainnet/logback.xml | 18 + tron/scripts/download.java-tron.sh | 38 + 4 files changed, 843 insertions(+) create mode 100644 tron/java-tron/tron-mainnet-java-tron-pruned-rocksdb.yml create mode 100644 tron/mainnet/config.conf create mode 100644 tron/mainnet/logback.xml create mode 100644 tron/scripts/download.java-tron.sh diff --git a/tron/java-tron/tron-mainnet-java-tron-pruned-rocksdb.yml b/tron/java-tron/tron-mainnet-java-tron-pruned-rocksdb.yml new file mode 100644 index 00000000..848acb2f --- /dev/null +++ b/tron/java-tron/tron-mainnet-java-tron-pruned-rocksdb.yml @@ -0,0 +1,45 @@ +services: + tron-mainnet: + image: tronprotocol/java-tron:GreatVoyage-v4.7.7 + user: root + stop_grace_period: 5m + ulimits: + nofile: 1048576 + expose: + - "8545" + ports: + - "25815:25815/tcp" + - "25815:25815/udp" + volumes: + - tron-mainnet-java-tron-pruned-rocksdb:/java-tron/output-directory + - ./tron/mainnet/config:/config + command: -c /config/config.conf --log-config /config/logback.xml + networks: + - chains + restart: unless-stopped + labels: + - "traefik.enable=true" + - "traefik.http.middlewares.tron-mainnet-java-tron-pruned-rocksdb-set-path.replacepath.path=/jsonrpc" + - "traefik.http.services.tron-mainnet-java-tron-pruned-rocksdb.loadbalancer.server.port=8545" + - "traefik.http.routers.tron-mainnet-java-tron-pruned-rocksdb.entrypoints=websecure" + - "traefik.http.routers.tron-mainnet-java-tron-pruned-rocksdb.tls.certresolver=myresolver" + - "traefik.http.routers.tron-mainnet-java-tron-pruned-rocksdb.rule=Host(`$DOMAIN`) && PathPrefix(`/tron-mainnet`)" + - "traefik.http.middlewares.tron-mainnet-java-tron-pruned-rocksdb-strip-trailing-slash.stripprefixregex.regex=/$" + - "traefik.http.routers.tron-mainnet-java-tron-pruned-rocksdb.middlewares=tron-mainnet-java-tron-pruned-rocksdb-set-path, tron-mainnet-java-tron-pruned-rocksdb-strip-trailing-slash, ipwhitelist" + + tron-mainnet-download: + image: alpine:latest + user: root + environment: + - SNAPSHOT_URL=https://snapshots.publicnode.com/tron-pruned-70904745.tar.lz4 + volumes: + - tron-mainnet-java-tron-pruned-rocksdb:/java-tron/output-directory + - ./tron/scripts/download.java-tron.sh:/download.sh + command: sh -c "/download.sh" + restart: "no" + profiles: + - manual + + +volumes: + tron-mainnet-java-tron-pruned-rocksdb: diff --git a/tron/mainnet/config.conf b/tron/mainnet/config.conf new file mode 100644 index 00000000..6b819df0 --- /dev/null +++ b/tron/mainnet/config.conf @@ -0,0 +1,742 @@ +net { + type = mainnet + # type = testnet +} + +storage { + # Directory for storing persistent data + db.engine = "ROCKSDB", + db.sync = false, + db.directory = "database", + index.directory = "index", + transHistory.switch = "on", + # You can custom these 14 databases' configs: + + # account, account-index, asset-issue, block, block-index, + # block_KDB, peers, properties, recent-block, trans, + # utxo, votes, witness, witness_schedule. + + # Otherwise, db configs will remain default and data will be stored in + # the path of "output-directory" or which is set by "-d" ("--output-directory"). + # setting can impove leveldb performance .... start + # node: if this will increase process fds,you may be check your ulimit if 'too many open files' error occurs + # see https://github.com/tronprotocol/tips/blob/master/tip-343.md for detail + # if you find block sync has lower performance,you can try this settings + #default = { + # maxOpenFiles = 100 + #} + #defaultM = { + # maxOpenFiles = 500 + #} + #defaultL = { + # maxOpenFiles = 1000 + #} + # setting can impove leveldb performance .... end + # Attention: name is a required field that must be set !!! + properties = [ + // { + // name = "account", + // path = "storage_directory_test", + // createIfMissing = true, + // paranoidChecks = true, + // verifyChecksums = true, + // compressionType = 1, // compressed with snappy + // blockSize = 4096, // 4 KB = 4 * 1024 B + // writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B + // cacheSize = 10485760, // 10 MB = 10 * 1024 * 1024 B + // maxOpenFiles = 100 + // }, + // { + // name = "account-index", + // path = "storage_directory_test", + // createIfMissing = true, + // paranoidChecks = true, + // verifyChecksums = true, + // compressionType = 1, // compressed with snappy + // blockSize = 4096, // 4 KB = 4 * 1024 B + // writeBufferSize = 10485760, // 10 MB = 10 * 1024 * 1024 B + // cacheSize = 10485760, // 10 MB = 10 * 1024 * 1024 B + // maxOpenFiles = 100 + // }, + ] + + needToUpdateAsset = true + + //dbsettings is needed when using rocksdb as the storage implement (db.engine="ROCKSDB"). + //we'd strongly recommend that do not modify it unless you know every item's meaning clearly. + dbSettings = { + levelNumber = 7 + //compactThreads = 32 + blocksize = 64 // n * KB + maxBytesForLevelBase = 256 // n * MB + maxBytesForLevelMultiplier = 10 + level0FileNumCompactionTrigger = 4 + targetFileSizeBase = 256 // n * MB + targetFileSizeMultiplier = 1 + } + + //backup settings when using rocks db as the storage implement (db.engine="ROCKSDB"). + //if you want to use the backup plugin, please confirm set the db.engine="ROCKSDB" above. + backup = { + enable = false // indicate whether enable the backup plugin + propPath = "prop.properties" // record which bak directory is valid + bak1path = "bak1/database" // you must set two backup directories to prevent application halt unexpected(e.g. kill -9). + bak2path = "bak2/database" + frequency = 10000 // indicate backup db once every 10000 blocks processed. + } + + balance.history.lookup = false + + # checkpoint.version = 2 + # checkpoint.sync = true + + # the estimated number of block transactions (default 1000, min 100, max 10000). + # so the total number of cached transactions is 65536 * txCache.estimatedTransactions + # txCache.estimatedTransactions = 1000 + + # data root setting, for check data, currently, only reward-vi is used. + + # merkleRoot = { + # reward-vi = 9debcb9924055500aaae98cdee10501c5c39d4daa75800a996f4bdda73dbccd8 // main-net, Sha256Hash, hexString + # } +} + +node.discovery = { + enable = true + persist = true +} + +# custom stop condition +#node.shutdown = { +# BlockTime = "54 59 08 * * ?" # if block header time in persistent db matched. +# BlockHeight = 33350800 # if block header height in persistent db matched. +# BlockCount = 12 # block sync count after node start. +#} + +node.backup { + # udp listen port, each member should have the same configuration + port = 10001 + + # my priority, each member should use different priority + priority = 8 + + # time interval to send keepAlive message, each member should have the same configuration + keepAliveInterval = 3000 + + # peer's ip list, can't contain mine + members = [ + # "ip", + # "ip" + ] +} + +crypto { + engine = "eckey" +} +# prometheus metrics start +# node.metrics = { +# prometheus{ +# enable=true +# port="9527" +# } +# } + +# prometheus metrics end + +node { + # trust node for solidity node + # trustNode = "ip:port" + trustNode = "127.0.0.1:50051" + + # expose extension api to public or not + walletExtensionApi = true + + listen.port = 25814 + + connection.timeout = 2 + + fetchBlock.timeout = 200 + + tcpNettyWorkThreadNum = 0 + + udpNettyWorkThreadNum = 1 + + # Number of validate sign thread, default availableProcessors / 2 + # validateSignThreadNum = 16 + + maxConnections = 30 + + minConnections = 8 + + minActiveConnections = 3 + + maxConnectionsWithSameIp = 2 + + maxHttpConnectNumber = 50 + + minParticipationRate = 15 + + isOpenFullTcpDisconnect = false + + p2p { + version = 11111 # 11111: mainnet; 20180622: testnet + } + + active = [ + # Active establish connection in any case + # Sample entries: + # "ip:port", + # "ip:port" + ] + + passive = [ + # Passive accept connection in any case + # Sample entries: + # "ip:port", + # "ip:port" + ] + + fastForward = [ + "100.26.245.209:18888", + "15.188.6.125:18888" + ] + + http { + fullNodeEnable = true + fullNodePort = 8090 + solidityEnable = true + solidityPort = 8091 + } + + rpc { + port = 50051 + #solidityPort = 50061 + # Number of gRPC thread, default availableProcessors / 2 + # thread = 16 + + # The maximum number of concurrent calls permitted for each incoming connection + # maxConcurrentCallsPerConnection = + + # The HTTP/2 flow control window, default 1MB + # flowControlWindow = + + # Connection being idle for longer than which will be gracefully terminated + maxConnectionIdleInMillis = 60000 + + # Connection lasting longer than which will be gracefully terminated + # maxConnectionAgeInMillis = + + # The maximum message size allowed to be received on the server, default 4MB + # maxMessageSize = + + # The maximum size of header list allowed to be received, default 8192 + # maxHeaderListSize = + + # Transactions can only be broadcast if the number of effective connections is reached. + minEffectiveConnection = 1 + + # The switch of the reflection service, effective for all gRPC services + # reflectionService = true + } + + # number of solidity thread in the FullNode. + # If accessing solidity rpc and http interface timeout, could increase the number of threads, + # The default value is the number of cpu cores of the machine. + #solidity.threads = 8 + + # Limits the maximum percentage (default 75%) of producing block interval + # to provide sufficient time to perform other operations e.g. broadcast block + # blockProducedTimeOut = 75 + + # Limits the maximum number (default 700) of transaction from network layer + # netMaxTrxPerSecond = 700 + + # Whether to enable the node detection function, default false + # nodeDetectEnable = false + + # use your ipv6 address for node discovery and tcp connection, default false + # enableIpv6 = false + + # if your node's highest block num is below than all your pees', try to acquire new connection. default false + # effectiveCheckEnable = false + + # Dynamic loading configuration function, disabled by default + # dynamicConfig = { + # enable = false + # Configuration file change check interval, default is 600 seconds + # checkInterval = 600 + # } + + dns { + # dns urls to get nodes, url format tree://{pubkey}@{domain}, default empty + treeUrls = [ + #"tree://AKMQMNAJJBL73LXWPXDI4I5ZWWIZ4AWO34DWQ636QOBBXNFXH3LQS@main.trondisco.net", //offical dns tree + ] + + # enable or disable dns publish, default false + # publish = false + + # dns domain to publish nodes, required if publish is true + # dnsDomain = "nodes1.example.org" + + # dns private key used to publish, required if publish is true, hex string of length 64 + # dnsPrivate = "b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291" + + # known dns urls to publish if publish is true, url format tree://{pubkey}@{domain}, default empty + # knownUrls = [ + #"tree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@nodes2.example.org", + # ] + + # staticNodes = [ + # static nodes to published on dns + # Sample entries: + # "ip:port", + # "ip:port" + # ] + + # merge several nodes into a leaf of tree, should be 1~5 + # maxMergeSize = 5 + + # only nodes change percent is bigger then the threshold, we update data on dns + # changeThreshold = 0.1 + + # dns server to publish, required if publish is true, only aws or aliyun is support + # serverType = "aws" + + # access key id of aws or aliyun api, required if publish is true, string + # accessKeyId = "your-key-id" + + # access key secret of aws or aliyun api, required if publish is true, string + # accessKeySecret = "your-key-secret" + + # if publish is true and serverType is aliyun, it's endpoint of aws dns server, string + # aliyunDnsEndpoint = "alidns.aliyuncs.com" + + # if publish is true and serverType is aws, it's region of aws api, such as "eu-south-1", string + # awsRegion = "us-east-1" + + # if publish is true and server-type is aws, it's host zone id of aws's domain, string + # awsHostZoneId = "your-host-zone-id" + } + + # open the history query APIs(http&GRPC) when node is a lite fullNode, + # like {getBlockByNum, getBlockByID, getTransactionByID...}. + # default: false. + # note: above APIs may return null even if blocks and transactions actually are on the blockchain + # when opening on a lite fullnode. only open it if the consequences being clearly known + # openHistoryQueryWhenLiteFN = false + + jsonrpc { + # Note: If you turn on jsonrpc and run it for a while and then turn it off, you will not + # be able to get the data from eth_getLogs for that period of time. + + httpFullNodeEnable = true + httpFullNodePort = 8545 + # httpSolidityEnable = true + # httpSolidityPort = 8555 + # httpPBFTEnable = true + # httpPBFTPort = 8565 + } + + # Disabled api list, it will work for http, rpc and pbft, both fullnode and soliditynode, + # but not jsonrpc. + # Sample: The setting is case insensitive, GetNowBlock2 is equal to getnowblock2 + # + # disabledApi = [ + # "getaccount", + # "getnowblock2" + # ] +} + +## rate limiter config +rate.limiter = { + # Every api could be set a specific rate limit strategy. Three strategy are supported:GlobalPreemptibleAdapter、IPQPSRateLimiterAdapte、QpsRateLimiterAdapter + # GlobalPreemptibleAdapter: permit is the number of preemptible resource, every client must apply one resourse + # before do the request and release the resource after got the reponse automaticlly. permit should be a Integer. + # QpsRateLimiterAdapter: qps is the average request count in one second supported by the server, it could be a Double or a Integer. + # IPQPSRateLimiterAdapter: similar to the QpsRateLimiterAdapter, qps could be a Double or a Integer. + # If do not set, the "default strategy" is set.The "default startegy" is based on QpsRateLimiterAdapter, the qps is set as 10000. + # + # Sample entries: + # + http = [ + # { + # component = "GetNowBlockServlet", + # strategy = "GlobalPreemptibleAdapter", + # paramString = "permit=1" + # }, + + # { + # component = "GetAccountServlet", + # strategy = "IPQPSRateLimiterAdapter", + # paramString = "qps=1" + # }, + + # { + # component = "ListWitnessesServlet", + # strategy = "QpsRateLimiterAdapter", + # paramString = "qps=1" + # } + ], + + rpc = [ + # { + # component = "protocol.Wallet/GetBlockByLatestNum2", + # strategy = "GlobalPreemptibleAdapter", + # paramString = "permit=1" + # }, + + # { + # component = "protocol.Wallet/GetAccount", + # strategy = "IPQPSRateLimiterAdapter", + # paramString = "qps=1" + # }, + + # { + # component = "protocol.Wallet/ListWitnesses", + # strategy = "QpsRateLimiterAdapter", + # paramString = "qps=1" + # }, + ] + + # global qps, default 50000 + # global.qps = 50000 + # IP-based global qps, default 10000 + # global.ip.qps = 10000 +} + + + +seed.node = { + # List of the seed nodes + # Seed nodes are stable full nodes + # example: + # ip.list = [ + # "ip:port", + # "ip:port" + # ] + ip.list = [ + "3.225.171.164:18888", + "52.53.189.99:18888", + "18.196.99.16:18888", + "34.253.187.192:18888", + "18.133.82.227:18888", + "35.180.51.163:18888", + "54.252.224.209:18888", + "18.231.27.82:18888", + "52.15.93.92:18888", + "34.220.77.106:18888", + "15.207.144.3:18888", + "13.124.62.58:18888", + "54.151.226.240:18888", + "35.174.93.198:18888", + "18.210.241.149:18888", + "54.177.115.127:18888", + "54.254.131.82:18888", + "18.167.171.167:18888", + "54.167.11.177:18888", + "35.74.7.196:18888", + "52.196.244.176:18888", + "54.248.129.19:18888", + "43.198.142.160:18888", + "3.0.214.7:18888", + "54.153.59.116:18888", + "54.153.94.160:18888", + "54.82.161.39:18888", + "54.179.207.68:18888", + "18.142.82.44:18888", + "18.163.230.203:18888", + # "[2a05:d014:1f2f:2600:1b15:921:d60b:4c60]:18888", // use this if support ipv6 + # "[2600:1f18:7260:f400:8947:ebf3:78a0:282b]:18888", // use this if support ipv6 + ] +} + +genesis.block = { + # Reserve balance + assets = [ + { + accountName = "Zion" + accountType = "AssetIssue" + address = "TLLM21wteSPs4hKjbxgmH1L6poyMjeTbHm" + balance = "99000000000000000" + }, + { + accountName = "Sun" + accountType = "AssetIssue" + address = "TXmVpin5vq5gdZsciyyjdZgKRUju4st1wM" + balance = "0" + }, + { + accountName = "Blackhole" + accountType = "AssetIssue" + address = "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy" + balance = "-9223372036854775808" + } + ] + + witnesses = [ + { + address: THKJYuUmMKKARNf7s2VT51g5uPY6KEqnat, + url = "http://GR1.com", + voteCount = 100000026 + }, + { + address: TVDmPWGYxgi5DNeW8hXrzrhY8Y6zgxPNg4, + url = "http://GR2.com", + voteCount = 100000025 + }, + { + address: TWKZN1JJPFydd5rMgMCV5aZTSiwmoksSZv, + url = "http://GR3.com", + voteCount = 100000024 + }, + { + address: TDarXEG2rAD57oa7JTK785Yb2Et32UzY32, + url = "http://GR4.com", + voteCount = 100000023 + }, + { + address: TAmFfS4Tmm8yKeoqZN8x51ASwdQBdnVizt, + url = "http://GR5.com", + voteCount = 100000022 + }, + { + address: TK6V5Pw2UWQWpySnZyCDZaAvu1y48oRgXN, + url = "http://GR6.com", + voteCount = 100000021 + }, + { + address: TGqFJPFiEqdZx52ZR4QcKHz4Zr3QXA24VL, + url = "http://GR7.com", + voteCount = 100000020 + }, + { + address: TC1ZCj9Ne3j5v3TLx5ZCDLD55MU9g3XqQW, + url = "http://GR8.com", + voteCount = 100000019 + }, + { + address: TWm3id3mrQ42guf7c4oVpYExyTYnEGy3JL, + url = "http://GR9.com", + voteCount = 100000018 + }, + { + address: TCvwc3FV3ssq2rD82rMmjhT4PVXYTsFcKV, + url = "http://GR10.com", + voteCount = 100000017 + }, + { + address: TFuC2Qge4GxA2U9abKxk1pw3YZvGM5XRir, + url = "http://GR11.com", + voteCount = 100000016 + }, + { + address: TNGoca1VHC6Y5Jd2B1VFpFEhizVk92Rz85, + url = "http://GR12.com", + voteCount = 100000015 + }, + { + address: TLCjmH6SqGK8twZ9XrBDWpBbfyvEXihhNS, + url = "http://GR13.com", + voteCount = 100000014 + }, + { + address: TEEzguTtCihbRPfjf1CvW8Euxz1kKuvtR9, + url = "http://GR14.com", + voteCount = 100000013 + }, + { + address: TZHvwiw9cehbMxrtTbmAexm9oPo4eFFvLS, + url = "http://GR15.com", + voteCount = 100000012 + }, + { + address: TGK6iAKgBmHeQyp5hn3imB71EDnFPkXiPR, + url = "http://GR16.com", + voteCount = 100000011 + }, + { + address: TLaqfGrxZ3dykAFps7M2B4gETTX1yixPgN, + url = "http://GR17.com", + voteCount = 100000010 + }, + { + address: TX3ZceVew6yLC5hWTXnjrUFtiFfUDGKGty, + url = "http://GR18.com", + voteCount = 100000009 + }, + { + address: TYednHaV9zXpnPchSywVpnseQxY9Pxw4do, + url = "http://GR19.com", + voteCount = 100000008 + }, + { + address: TCf5cqLffPccEY7hcsabiFnMfdipfyryvr, + url = "http://GR20.com", + voteCount = 100000007 + }, + { + address: TAa14iLEKPAetX49mzaxZmH6saRxcX7dT5, + url = "http://GR21.com", + voteCount = 100000006 + }, + { + address: TBYsHxDmFaRmfCF3jZNmgeJE8sDnTNKHbz, + url = "http://GR22.com", + voteCount = 100000005 + }, + { + address: TEVAq8dmSQyTYK7uP1ZnZpa6MBVR83GsV6, + url = "http://GR23.com", + voteCount = 100000004 + }, + { + address: TRKJzrZxN34YyB8aBqqPDt7g4fv6sieemz, + url = "http://GR24.com", + voteCount = 100000003 + }, + { + address: TRMP6SKeFUt5NtMLzJv8kdpYuHRnEGjGfe, + url = "http://GR25.com", + voteCount = 100000002 + }, + { + address: TDbNE1VajxjpgM5p7FyGNDASt3UVoFbiD3, + url = "http://GR26.com", + voteCount = 100000001 + }, + { + address: TLTDZBcPoJ8tZ6TTEeEqEvwYFk2wgotSfD, + url = "http://GR27.com", + voteCount = 100000000 + } + ] + + timestamp = "0" #2017-8-26 12:00:00 + + parentHash = "0xe58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f" +} + +// Optional.The default is empty. +// It is used when the witness account has set the witnessPermission. +// When it is not empty, the localWitnessAccountAddress represents the address of the witness account, +// and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account. +// When it is empty,the localwitness is configured with the private key of the witness account. + +//localWitnessAccountAddress = + +localwitness = [ +] + +#localwitnesskeystore = [ +# "localwitnesskeystore.json" +#] + +block = { + needSyncCheck = true + maintenanceTimeInterval = 21600000 + proposalExpireTime = 259200000 // 3 day: 259200000(ms) +} + +# Transaction reference block, default is "solid", configure to "head" may incur TaPos error +# trx.reference.block = "solid" // head;solid; + +# This property sets the number of milliseconds after the creation of the transaction that is expired, default value is 60000. +# trx.expiration.timeInMilliseconds = 60000 + +vm = { + supportConstant = false + maxEnergyLimitForConstant = 100000000 + minTimeRatio = 0.0 + maxTimeRatio = 5.0 + saveInternalTx = false + + # Indicates whether the node stores featured internal transactions, such as freeze, vote and so on + # saveFeaturedInternalTx = false + + # In rare cases, transactions that will be within the specified maximum execution time (default 10(ms)) are re-executed and packaged + # longRunningTime = 10 + + # Indicates whether the node support estimate energy API. + # estimateEnergy = false + + # Indicates the max retry time for executing transaction in estimating energy. + # estimateEnergyMaxRetry = 3 +} + +committee = { + allowCreationOfContracts = 0 //mainnet:0 (reset by committee),test:1 + allowAdaptiveEnergy = 0 //mainnet:0 (reset by committee),test:1 +} + +event.subscribe = { + native = { + useNativeQueue = true // if true, use native message queue, else use event plugin. + bindport = 5555 // bind port + sendqueuelength = 1000 //max length of send queue + } + + path = "" // absolute path of plugin + server = "" // target server address to receive event triggers + // dbname|username|password, if you want to create indexes for collections when the collections + // are not exist, you can add version and set it to 2, as dbname|username|password|version + // if you use version 2 and one collection not exists, it will create index automaticaly; + // if you use version 2 and one collection exists, it will not create index, you must create index manually; + dbconfig = "" + contractParse = true + topics = [ + { + triggerName = "block" // block trigger, the value can't be modified + enable = false + topic = "block" // plugin topic, the value could be modified + solidified = false // if set true, just need solidified block, default is false + }, + { + triggerName = "transaction" + enable = false + topic = "transaction" + solidified = false + ethCompatible = false // if set true, add transactionIndex, cumulativeEnergyUsed, preCumulativeLogCount, logList, energyUnitPrice, default is false + }, + { + triggerName = "contractevent" + enable = false + topic = "contractevent" + }, + { + triggerName = "contractlog" + enable = false + topic = "contractlog" + redundancy = false // if set true, contractevent will also be regarded as contractlog + }, + { + triggerName = "solidity" // solidity block trigger(just include solidity block number and timestamp), the value can't be modified + enable = true // the default value is true + topic = "solidity" + }, + { + triggerName = "solidityevent" + enable = false + topic = "solidityevent" + }, + { + triggerName = "soliditylog" + enable = false + topic = "soliditylog" + redundancy = false // if set true, solidityevent will also be regarded as soliditylog + } + ] + + filter = { + fromblock = "" // the value could be "", "earliest" or a specified block number as the beginning of the queried range + toblock = "" // the value could be "", "latest" or a specified block number as end of the queried range + contractAddress = [ + "" // contract address you want to subscribe, if it's set to "", you will receive contract logs/events with any contract address. + ] + + contractTopic = [ + "" // contract topic you want to subscribe, if it's set to "", you will receive contract logs/events with any contract topic. + ] + } +} + diff --git a/tron/mainnet/logback.xml b/tron/mainnet/logback.xml new file mode 100644 index 00000000..bd77c309 --- /dev/null +++ b/tron/mainnet/logback.xml @@ -0,0 +1,18 @@ + + + + + + %d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n + + + + + + + + + + + + diff --git a/tron/scripts/download.java-tron.sh b/tron/scripts/download.java-tron.sh new file mode 100644 index 00000000..43588ccd --- /dev/null +++ b/tron/scripts/download.java-tron.sh @@ -0,0 +1,38 @@ +#!/bin/sh + + +https://snapshots.publicnode.com/tron-pruned-70904745.tar.lz4 + +#!/bin/bash + +# Exit on error and show commands +set -ex + +# Default snapshot URL +SNAPSHOT_URL=${SNAPSHOT_URL:-"https://snapshots.publicnode.com/tron-pruned-70904745.tar.lz4"} +OUTPUT_DIR=${OUTPUT_DIR:-"/java-tron/output-directory"} + +# Verify required tools are available +if ! command -v wget &> /dev/null || ! command -v lz4 &> /dev/null || ! command -v tar &> /dev/null; then + echo "Installing required tools..." + apk add --no-cache wget tar lz4 +fi + +# Create and prepare output directory +echo "Preparing output directory: ${OUTPUT_DIR}" +mkdir -p "${OUTPUT_DIR}" +rm -rf "${OUTPUT_DIR}"/* + +# Download and extract the snapshot +echo "Downloading Tron snapshot from ${SNAPSHOT_URL}" +wget -q --show-progress -c "${SNAPSHOT_URL}" -O - | \ + lz4 -d | \ + tar -xvf - -C "${OUTPUT_DIR}" + +# Verify extraction +if [ -n "$(ls -A ${OUTPUT_DIR})" ]; then + echo "Snapshot successfully downloaded and extracted to ${OUTPUT_DIR}" +else + echo "Error: Extraction failed - output directory is empty" + exit 1 +fi