⚠️Blast API (blastapi.io) ends Oct 31. Migrate to Dwellir and skip Alchemy's expensive compute units.
Switch Today →
Skip to main content

wallet/getcontractinfo

Get detailed information about a deployed smart contract.

Endpoint

POST /wallet/getcontractinfo

Parameters

Required Parameters

ParameterTypeDescription
valuestringContract address (base58 or hex)

Optional Parameters

ParameterTypeDescription
visiblebooleanReturn base58 addresses (default: false returns hex)

Response

Returns contract information including:

  • contract_address - Contract address
  • contract_name - Contract name
  • abi - Contract ABI (Application Binary Interface)
    • entrys - Array of contract functions and events
  • bytecode - Compiled contract bytecode
  • consumed_energy - Total energy consumed by contract
  • origin_energy_limit - Original energy limit
  • origin_address - Contract creator address
  • trx_hash - Transaction hash of contract creation

Implementation Examples

// Get contract information
const response = await fetch('https://api-tron-mainnet.n.dwellir.com/YOUR_API_KEY/wallet/getcontractinfo', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
value: 'TContractAddress...',
visible: true
}),
});

const contract = await response.json();

// Parse ABI
if (contract.abi && contract.abi.entrys) {
console.log('Contract Functions:');
contract.abi.entrys.forEach(entry => {
if (entry.type === 'Function') {
const inputs = entry.inputs ? entry.inputs.map(i => `${i.type} ${i.name}`).join(', ') : '';
const outputs = entry.outputs ? entry.outputs.map(o => o.type).join(', ') : 'void';
console.log(` ${entry.name}(${inputs}) returns (${outputs})`);
}
});

console.log('\nContract Events:');
contract.abi.entrys.forEach(entry => {
if (entry.type === 'Event') {
const params = entry.inputs ? entry.inputs.map(i => `${i.type} ${i.indexed ? 'indexed ' : ''}${i.name}`).join(', ') : '';
console.log(` ${entry.name}(${params})`);
}
});
}

// Display contract stats
console.log('\nContract Statistics:');
console.log(`Creator: ${contract.origin_address}`);
console.log(`Energy Consumed: ${contract.consumed_energy}`);
console.log(`Creation TX: ${contract.trx_hash}`);

Example Response

{
"contract_address": "TContractAddress...",
"contract_name": "MyToken",
"abi": {
"entrys": [
{
"name": "transfer",
"inputs": [
{
"name": "to",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"outputs": [
{
"type": "bool"
}
],
"type": "Function",
"stateMutability": "nonpayable"
},
{
"name": "Transfer",
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"type": "Event"
},
{
"name": "balanceOf",
"inputs": [
{
"name": "account",
"type": "address"
}
],
"outputs": [
{
"type": "uint256"
}
],
"type": "Function",
"stateMutability": "view"
}
]
},
"bytecode": "608060405234801561001057600080fd5b50...",
"consumed_energy": 125430000,
"origin_energy_limit": 10000000,
"origin_address": "TCreatorAddress...",
"trx_hash": "7c2d4206c03a883dd9066d6c839d0deaef32dc5a0d9b15f6d06e506906c90332"
}

ABI Entry Types

Function Entry

{
"name": "functionName",
"inputs": [...],
"outputs": [...],
"type": "Function",
"stateMutability": "view|pure|nonpayable|payable"
}

Event Entry

{
"name": "EventName",
"inputs": [
{
"indexed": true,
"name": "param1",
"type": "address"
}
],
"type": "Event"
}

Constructor Entry

{
"inputs": [...],
"type": "Constructor",
"stateMutability": "nonpayable"
}

Contract Verification

// Verify contract source code matches deployed bytecode
async function verifyContract(address, sourceCode, compilerVersion) {
// Get deployed contract info
const response = await fetch(`${API_URL}/wallet/getcontractinfo`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ value: address, visible: true })
});

const contract = await response.json();
const deployedBytecode = contract.bytecode;

// Compile source code (pseudo-code)
const compiledBytecode = await compileContract(sourceCode, compilerVersion);

// Compare bytecodes (excluding metadata)
const verified = compareBytecode(deployedBytecode, compiledBytecode);

return {
verified,
contractName: contract.contract_name,
abi: contract.abi,
creator: contract.origin_address
};
}

Best Practices

1. Cache Contract Info

  • ABI doesn't change after deployment
  • Cache to reduce API calls
  • Update cache only when needed

2. Validate Contracts

  • Check bytecode exists
  • Verify ABI structure
  • Confirm expected functions present

3. Energy Monitoring

  • Track consumed_energy growth
  • Monitor for unusual consumption
  • Alert on high energy usage

Common Errors

ErrorDescriptionSolution
Contract does not existInvalid contract addressVerify address is correct
Not a smart contract addressAddress is not a contractCheck address type first
class org.tron.core.exception.BadItemExceptionMalformed requestCheck parameter format

Use Cases

  • Contract Verification: Verify deployed contract matches source
  • ABI Extraction: Get contract interface for interaction
  • DApp Integration: Load contract details dynamically
  • Analytics: Track contract usage and energy consumption
  • Security Auditing: Analyze contract bytecode and functions