Docs

wallet/triggerconstantcontract - Call View Func...

Call smart contract view functions without creating transactions, read contract state data instantly via Dwellir's optimized TRON RPC endpoint.

Zero-Cost Contract Reads

Dwellir's TRON infrastructure enables instant contract state queries without consuming energy or bandwidth. Read smart contract data in real-time without transaction fees.

Start querying contracts

Execute smart contract view/pure functions without creating a blockchain transaction. Perfect for reading contract state, calculating values, or retrieving stored data.

Use Cases

wallet/triggerconstantcontract is essential for:

  • Token Balance Queries - Check TRC20 token balances
  • Price Feeds - Read oracle price data
  • Game State - Query game contract states
  • DeFi Positions - Check liquidity pool shares
  • Contract Verification - Test function outputs

Request Parameters

Request
contract_addressstring

Smart contract address (Base58 or Hex)

function_selectorstring

Function signature (e.g., "balanceOf(address)")

parameterstring

Encoded function parameters (hex)

owner_addressstring

Address calling the function

call_valuenumber

TRX amount in SUN (for payable functions)

call_token_valuenumber

TRC10 token amount

token_idnumber

TRC10 token ID

visibleboolean

Use Base58 format (default: true)

Response Body

Response
resultobject

Execution result

result.resultboolean

Whether execution succeeded

result.codestring

Response code

result.messagestring

Error message if failed

energy_usednumber

Estimated energy consumption

constant_resultarray

Return values (hex encoded)

transactionobject

Simulated transaction object

Error Responses

Errors
Error 1CONTRACT_VALIDATE_ERROR

Invalid contract address

Error 2OUT_OF_ENERGY

Insufficient energy for call

Error 3REVERT

Function reverted

Error 4INVALID_METHOD

Function doesn't exist

Implementation Examples

Bash
# Call TRC20 balanceOf function
curl -X POST "https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/triggerconstantcontract" \
  -H "Content-Type: application/json" \
  -d '{
    "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "function_selector": "balanceOf(address)",
    "parameter": "000000000000000000000000a614f803b6fd780986a42c78ec9c7f77e6ded13c",
    "visible": true
  }'

# Get token name
curl -X POST "https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/triggerconstantcontract" \
  -H "Content-Type: application/json" \
  -d '{
    "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "function_selector": "name()",
    "visible": true
  }'

# Get token symbol
curl -X POST "https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/triggerconstantcontract" \
  -H "Content-Type: application/json" \
  -d '{
    "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "function_selector": "symbol()",
    "visible": true
  }'

# Get total supply
curl -X POST "https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/triggerconstantcontract" \
  -H "Content-Type: application/json" \
  -d '{
    "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "function_selector": "totalSupply()",
    "visible": true
  }'

# Parse balance result with jq
curl -s -X POST "https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/triggerconstantcontract" \
  -H "Content-Type: application/json" \
  -d '{
    "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
    "function_selector": "balanceOf(address)",
    "parameter": "000000000000000000000000a614f803b6fd780986a42c78ec9c7f77e6ded13c",
    "visible": true
  }' | jq '{
    success: .result.result,
    energy_used: .energy_used,
    balance_hex: .constant_result[0],
    balance_decimal: (.constant_result[0] | ltrimstr("0x") | 
                     if . == "" then "0" else . end | 
                     tonumber | tostring)
  }'

# Script to check multiple token balances
#!/bin/bash
API_KEY="YOUR_API_KEY"
USER_ADDRESS_HEX="000000000000000000000000a614f803b6fd780986a42c78ec9c7f77e6ded13c"

TOKENS=(
  "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t:USDT"
  "TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR:WTRX"
)

for token_info in "${TOKENS[@]}"; do
  IFS=':' read -r addr symbol <<< "$token_info"
  
  echo "Checking $symbol balance..."
  
  response=$(curl -s -X POST \
    "https://api-tron-mainnet.n.dwellir.com/$API_KEY/wallet/triggerconstantcontract" \
    -H "Content-Type: application/json" \
    -d "{
      \"contract_address\": \"$addr\",
      \"function_selector\": \"balanceOf(address)\",
      \"parameter\": \"$USER_ADDRESS_HEX\",
      \"visible\": true
    }")
  
  balance=$(echo "$response" | jq -r '.constant_result[0]')
  
  if [ "$balance" != "null" ] && [ "$balance" != "" ]; then
    # Convert hex to decimal (simplified)
    echo "  Raw: $balance"
  else
    echo "  Error or zero balance"
  fi
  echo ""
done

Common Use Cases

1. Token Balance Checker

JavaScript
async function checkTokenBalance(tokenAddress, userAddress) {
  const token = new TRC20Contract('API_KEY', tokenAddress);
  
  try {
    const [symbol, decimals, balance] = await Promise.all([
      token.symbol(),
      token.getDecimals(),
      token.balanceOf(userAddress)
    ]);
    
    return {
      token: symbol,
      balance: balance.formatted,
      decimals: decimals,
      hasBalance: BigInt(balance.raw) > 0n
    };
  } catch (error) {
    return {
      error: 'Failed to fetch token data',
      details: error.message
    };
  }
}

2. DEX Price Monitor

JavaScript
async function monitorDexPrice(poolAddress) {
  const getPrice = async () => {
    const result = await callContractView(
      poolAddress,
      'getReserves()'
    );
    
    const reserves = parseReserves(result.constant_result[0]);
    return calculatePrice(reserves.token0, reserves.token1);
  };
  
  return setInterval(async () => {
    const price = await getPrice();
    console.log(`Current price: ${price}`);
  }, 10000); // Check every 10 seconds
}

3. Multi-Call Pattern

JavaScript
async function getCompleteTokenInfo(tokenAddress) {
  const functions = [
    'name()',
    'symbol()',
    'decimals()',
    'totalSupply()'
  ];
  
  const results = await Promise.all(
    functions.map(fn => 
      callContractView(tokenAddress, fn)
    )
  );
  
  return {
    name: decodeString(results[0].constant_result[0]),
    symbol: decodeString(results[1].constant_result[0]),
    decimals: decodeUint256(results[2].constant_result[0]),
    totalSupply: decodeUint256(results[3].constant_result[0])
  };
}

Best Practices

  1. Cache Results - Cache view function results appropriately
  2. Batch Calls - Group multiple calls for efficiency
  3. Handle Errors - Always check result.result for success
  4. Estimate Energy - Monitor energy_used for optimization
  5. Validate Input - Ensure parameters are properly encoded

Need help? Contact support or visit our TRON documentation.