Skip to content

Commit 02650d7

Browse files
committed
refactor: use params instead of hardcoded addresses in substreams
- Remove hardcoded MAINNET_PROXY_ADDRESS and NILE_PROXY_ADDRESS constants - Add parse_proxy_addresses function to read addresses from params - Update substreams.yaml to pass params to the map module This allows the proxy addresses to be configured without recompiling.
1 parent edd3868 commit 02650d7

2 files changed

Lines changed: 29 additions & 7 deletions

File tree

packages/substreams-tron/src/lib.rs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,37 @@ use pb::request::tron::v1::{Payment, Payments};
1010
use substreams::log;
1111
use substreams_tron::pb::sf::tron::r#type::v1::Block;
1212

13-
/// ERC20FeeProxy contract addresses
14-
const MAINNET_PROXY_ADDRESS: &str = "TCUDPYnS9dH3WvFEaE7wN7vnDa51J4R4fd";
15-
const NILE_PROXY_ADDRESS: &str = "THK5rNmrvCujhmrXa5DB1dASepwXTr9cJs";
16-
1713
/// TransferWithReferenceAndFee event signature (keccak256 hash of event signature)
1814
/// Event: TransferWithReferenceAndFee(address,address,uint256,bytes indexed,uint256,address)
1915
/// keccak256("TransferWithReferenceAndFee(address,address,uint256,bytes,uint256,address)")
2016
const TRANSFER_WITH_REF_AND_FEE_TOPIC: &str =
2117
"9f16cbcc523c67a60c450e5ffe4f3b7b6dbe772e7abcadb2686ce029a9a0a2b6";
2218

19+
/// Parses proxy addresses from the params string
20+
/// Expected format: "mainnet_proxy_address=ADDR1\nnile_proxy_address=ADDR2"
21+
fn parse_proxy_addresses(params: &str) -> (String, String) {
22+
let mut mainnet = String::new();
23+
let mut nile = String::new();
24+
25+
for line in params.lines() {
26+
let parts: Vec<&str> = line.splitn(2, '=').collect();
27+
if parts.len() == 2 {
28+
match parts[0].trim() {
29+
"mainnet_proxy_address" => mainnet = parts[1].trim().to_string(),
30+
"nile_proxy_address" => nile = parts[1].trim().to_string(),
31+
_ => {}
32+
}
33+
}
34+
}
35+
36+
(mainnet, nile)
37+
}
38+
2339
/// Maps TRON blocks to extract ERC20FeeProxy payment events
2440
#[substreams::handlers::map]
25-
fn map_erc20_fee_proxy_payments(block: Block) -> Result<Payments, substreams::errors::Error> {
41+
fn map_erc20_fee_proxy_payments(params: String, block: Block) -> Result<Payments, substreams::errors::Error> {
42+
let (mainnet_proxy, nile_proxy) = parse_proxy_addresses(&params);
43+
2644
let mut payments = Vec::new();
2745
let block_number = block.number;
2846
let block_timestamp = block.header.as_ref().map(|h| h.timestamp).unwrap_or(0) / 1000; // Convert from ms to seconds
@@ -36,8 +54,7 @@ fn map_erc20_fee_proxy_payments(block: Block) -> Result<Payments, substreams::er
3654
// Check if this log is from one of our proxy contracts
3755
let contract_address = base58_encode(&log_entry.address);
3856

39-
if contract_address != MAINNET_PROXY_ADDRESS
40-
&& contract_address != NILE_PROXY_ADDRESS {
57+
if contract_address != mainnet_proxy && contract_address != nile_proxy {
4158
continue;
4259
}
4360

packages/substreams-tron/substreams.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ modules:
2727
kind: map
2828
initialBlock: 63208782 # Nile testnet deployment block (use lower for both networks)
2929
inputs:
30+
- params: string
3031
- source: sf.tron.type.v1.Block
3132
output:
3233
type: proto:request.tron.v1.Payments
@@ -35,6 +36,10 @@ modules:
3536
Filters transactions to the known proxy contract addresses and parses
3637
the event logs to extract payment details.
3738
39+
Params format:
40+
mainnet_proxy_address=<address>
41+
nile_proxy_address=<address>
42+
3843
- name: store_payments
3944
kind: store
4045
updatePolicy: set

0 commit comments

Comments
 (0)