eth_getCode | Ethereum

Ethereum API method that retrieves the compiled bytecode of a smart contract providing its address as a parameter. This method returns a hexadecimal string representing the smart contract's bytecode.

Developers can use this bytecode to verify if a smart contract is legitimate and to ensure that it performs the intended functions.

👍

Get you own node endpoint today

Start for free and get your app to production levels immediately. No credit card required.

You can sign up with your GitHub, X, Google, or Microsoft account.

Parameters

  • address — the address of the smart contract to query.

  • quantity or tag — the integer of a block encoded as hexadecimal or the string with:

    • latest — the most recent block in the blockchain and the current state of the blockchain at the most recent block. A chain reorganization is to be expected.

    • safe — the block that received justification from the beacon chain. Although this block could be involved in a chain reorganization, it would necessitate either a coordinated attack by the majority of validators or an instance of severe propagation latency.

    • finalized — the block accepted as canonical by more than 2/3 of the validators. A chain reorganization is extremely unlikely, and it would require at least 1/3 of the staked ETH to be burned.

    • earliest — the earliest available or genesis block

    • pending — the pending state and transactions block. The current state of transactions that have been broadcast to the network but have not yet been included in a block.

      📘

      See the default block parameter and How The Merge Impacts Ethereum’s Application Layer.

Response

data — the compiled bytecode of a smart contract. Returns 0x if the address is not associated with a smart contract.

eth_getCode code examples

📘

Learn more about the ChainstackProvider in ethers.js: ethers ChainstackProvider Documentation.

The following example retrieves the compiled bytecode from the APE token smart contract.

const ethers = require("ethers");

// Create a ChainstackProvider instance for Ethereum mainnet
const chainstack = new ethers.ChainstackProvider("mainnet");

const getCode = async (address, block) => {
  const code = await chainstack.send("eth_getCode", [address, block]);
  console.log(code);
};

getCode("0x4d224452801ACEd8B2F0aebE155379bb5D594381", "latest");

const { Web3 } = require("web3");
const NODE_URL = "CHAINSTACK_NODE_URL";
const web3 = new Web3(NODE_URL);

async function getCode(address, block) {
  const code = await web3.eth.getCode(address, block)
  console.log(code)
 }
 
 getCode("0x4d224452801ACEd8B2F0aebE155379bb5D594381", "latest" )
from web3 import Web3  
node_url = "CHAINSTACK_NODE_URL" 

code = web3.eth.get_code("0x4d224452801ACEd8B2F0aebE155379bb5D594381", "latest") 
print(web3.to_hex(code))   # Convert the Bytes result into HEX.

Use case

A practical use case for the eth_getcode method is verifying whether an address is associated with a smart contract. This can be particularly useful for blockchain explorers, auditors, and DApp developers, who must ensure that the code they interact with is legitimate.

Here is an example using web3.js:

const { Web3 } = require("web3");
const NODE_URL = "CHAINSTACK_NODE_URL";
const web3 = new Web3(NODE_URL);

async function verifyContractAddress(address) {
  try {
    const bytecode = await web3.eth.getCode(address);
    return bytecode !== '0x';
  } catch (error) {
    console.error(`Error: ${error.message}`);
    return false;
  }
}

async function main() {
  const addressToVerify = "0x4d224452801ACEd8B2F0aebE155379bb5D594381"
  const isContract = await verifyContractAddress(addressToVerify);

  if (isContract) {
    console.log(`📑 The address ${addressToVerify} is a smart contract.`);
  } else {
    console.log(`🚨 The address ${addressToVerify} is not a smart contract.`);
  }
}

main();

The verifyContractAddress function takes an address as a parameter and returns a boolean value indicating whether the address is associated with a smart contract. The function works by using the web3.eth.getCode method to retrieve the bytecode of the contract associated with the given address. If the returned bytecode is not equal to 0x, then the function assumes that the address is associated with a smart contract and returns true. If an error occurs while calling web3.eth.getCode, the function returns false and logs the error message to the console.

The main function is responsible for calling verifyContractAddress with a specific address to verify and log the results to the console. In this example, main is set up to verify the address 0x4d224452801ACEd8B2F0aebE155379bb5D594381. After calling verifyContractAddress, main logs either a success message indicating that the address is associated with a smart contract or a warning message indicating that it is not.

Overall, this code provides a useful utility for verifying the legitimacy of smart contract addresses on the Ethereum blockchain. It can be useful for auditors, blockchain explorers, and DApp developers who want to ensure that they are interacting with trustworthy code on the blockchain.

Try the eth_getCode RPC method yourself

Language
Click Try It! to start a request and see the response here!