feat: add TRON substreams for ERC20FeeProxy payment detection #29
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Tron Substreams Build | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| paths: | |
| - 'tron/**' | |
| - '.github/workflows/tron-build.yml' | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - 'tron/**' | |
| - '.github/workflows/tron-build.yml' | |
| workflow_dispatch: | |
| inputs: | |
| run_integration_tests: | |
| description: 'Run integration tests against live endpoints' | |
| required: false | |
| default: false | |
| type: boolean | |
| publish_package: | |
| description: 'Build and publish package artifact' | |
| required: false | |
| default: false | |
| type: boolean | |
| jobs: | |
| build-and-test: | |
| name: Build and Test Tron Substreams | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown | |
| - name: Cache Cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| tron/target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Build WASM module | |
| working-directory: tron | |
| run: make build | |
| - name: Run unit tests | |
| working-directory: tron | |
| run: make test | |
| - name: Verify build artifacts | |
| working-directory: tron | |
| run: | | |
| echo "Checking build artifacts..." | |
| if [ ! -f "target/wasm32-unknown-unknown/release/request_network_tron.wasm" ]; then | |
| echo "ERROR: WASM file not found!" | |
| exit 1 | |
| fi | |
| echo "Build artifacts verified successfully" | |
| integration-test-mainnet: | |
| name: Integration Test (Mainnet) | |
| runs-on: ubuntu-latest | |
| needs: build-and-test | |
| # Run on: push to main (merge) or manual trigger | |
| # PRs only run unit tests (no API key needed) | |
| if: | | |
| github.event.inputs.run_integration_tests == 'true' || | |
| github.event.inputs.publish_package == 'true' || | |
| (github.event_name == 'push' && github.ref == 'refs/heads/main') | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown | |
| - name: Cache Cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| tron/target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Install Substreams CLI | |
| run: | | |
| curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz | |
| sudo mv substreams /usr/local/bin/ | |
| substreams --version | |
| - name: Build WASM module | |
| working-directory: tron | |
| run: make build | |
| - name: Package Substreams | |
| working-directory: tron | |
| run: make package | |
| - name: Verify package created | |
| working-directory: tron | |
| run: | | |
| SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) | |
| if [ -z "$SPKG_FILE" ]; then | |
| echo "ERROR: No .spkg package file found!" | |
| exit 1 | |
| fi | |
| echo "✅ Package created: $SPKG_FILE" | |
| - name: Deploy and test against Mainnet (Streamingfast) | |
| working-directory: tron | |
| env: | |
| SUBSTREAMS_API_TOKEN: ${{ secrets.SUBSTREAMS_API_TOKEN }} | |
| run: | | |
| echo "=== Deploying to TRON Mainnet (Streamingfast) ===" | |
| echo "Endpoint: mainnet.tron.streamingfast.io:443" | |
| echo "Block range: 79216121 to 79216221 (100 blocks from mainnet deployment)" | |
| echo "" | |
| SPKG_FILE=$(ls -1 *.spkg | head -1) | |
| echo "Using package: $SPKG_FILE" | |
| # Run substreams and capture JSON output | |
| if ! substreams run "$SPKG_FILE" map_erc20_fee_proxy_payments \ | |
| -e mainnet.tron.streamingfast.io:443 \ | |
| --start-block 79216121 \ | |
| --stop-block +100 \ | |
| -o json 2>&1 | tee output_mainnet.log; then | |
| echo "" | |
| echo "❌ FAILED: Substreams command returned non-zero exit code" | |
| echo "Output:" | |
| cat output_mainnet.log | |
| exit 1 | |
| fi | |
| echo "" | |
| echo "=== Validating Results ===" | |
| # If any payments were found, validate the structure | |
| if grep -q '"payments"' output_mainnet.log; then | |
| echo "✅ Payments data structure detected in output" | |
| # Extract and validate payment fields if present | |
| if grep -q '"token_address"' output_mainnet.log; then | |
| echo "✅ Payment fields present: token_address" | |
| fi | |
| if grep -q '"payment_reference"' output_mainnet.log; then | |
| echo "✅ Payment fields present: payment_reference" | |
| fi | |
| if grep -q '"amount"' output_mainnet.log; then | |
| echo "✅ Payment fields present: amount" | |
| fi | |
| else | |
| echo "ℹ️ No payments found in block range (expected if no transactions in these blocks)" | |
| fi | |
| echo "" | |
| echo "=== Mainnet Integration Test PASSED ===" | |
| echo "The substreams module successfully:" | |
| echo " - Loaded WASM module" | |
| echo " - Connected to TRON Mainnet endpoint via Streamingfast" | |
| echo " - Processed 100 blocks without errors" | |
| echo " - Output valid JSON structure" | |
| # Publish package artifact for download/deployment | |
| publish-package: | |
| name: Publish Mainnet Package | |
| runs-on: ubuntu-latest | |
| needs: [build-and-test, integration-test-mainnet] | |
| # Publish on: push to main (merge) or manual publish selection | |
| if: | | |
| (github.event_name == 'push' && github.ref == 'refs/heads/main') || | |
| github.event.inputs.publish_package == 'true' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown | |
| - name: Cache Cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| tron/target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('tron/Cargo.toml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Install Substreams CLI | |
| run: | | |
| curl -sSL https://github.com/streamingfast/substreams/releases/latest/download/substreams_linux_x86_64.tar.gz | tar xz | |
| sudo mv substreams /usr/local/bin/ | |
| - name: Build WASM module | |
| working-directory: tron | |
| run: make build | |
| - name: Package Substreams | |
| working-directory: tron | |
| run: make package | |
| - name: Get package info | |
| id: package_info | |
| working-directory: tron | |
| run: | | |
| SPKG_FILE=$(ls -1 *.spkg 2>/dev/null | head -1) | |
| if [ -z "$SPKG_FILE" ]; then | |
| echo "ERROR: No .spkg package file found!" | |
| exit 1 | |
| fi | |
| echo "spkg_file=$SPKG_FILE" >> $GITHUB_OUTPUT | |
| VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Package created successfully: $SPKG_FILE (version: $VERSION)" | |
| - name: Upload package artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: request-network-tron-${{ steps.package_info.outputs.version }} | |
| path: tron/${{ steps.package_info.outputs.spkg_file }} | |
| retention-days: 90 | |
| - name: Package ready for deployment | |
| run: | | |
| echo "==============================================" | |
| echo "📦 Substreams Package Ready" | |
| echo "==============================================" | |
| echo "" | |
| echo "Package: ${{ steps.package_info.outputs.spkg_file }}" | |
| echo "Version: ${{ steps.package_info.outputs.version }}" | |
| echo "==============================================" |