@@ -10,19 +10,37 @@ use pb::request::tron::v1::{Payment, Payments};
1010use substreams:: log;
1111use 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)")
2016const 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
0 commit comments