Ethereum: Chainlink CCIP publishing message (encoded function call) to bring USDC from another chain is getting reverted with “Ready for manual execution” error

  • Post author:
  • Post comments:0 Comments

Ethereum Chainlink CCIP: Returning USDC from Another Chain with “Ready for Manual Execution” Error

In the world of decentralized finance (DeFi), blockchain technology plays a vital role in facilitating secure and efficient interactions between different networks. One such network is Ethereum, which has been a hub for various DeFi projects and applications. We recently noticed an issue where calling a specific function in a smart contract on another chain returns the “Ready for Manual Execution” error message.

This issue stems from the Chainlink Oracle Service (CCIP), which allows Ethereum-based contracts to query external data sources such as APIs or other blockchain networks. In this article, we will delve into the details of this issue and provide information on how to resolve it.

Issue: Function callback returned with error “Ready for manual execution”

According to various DeFi communities and forums, rollback issues occur when calling a specific function in a smart contract on another chain. This function call, called bringUsdcFromAnotherChain, attempts to fetch the balance of USDC tokens on an external network using the Chainlink oracle service.

The encoded function call corresponds to this operation:

force pragma ^ 0.8.0;

contract BringUsdcFromAnotherChain {

// Function to fetch USDC from another chain and execute it on the Ethereum mainnet.

doneUsdcFromAnotherChain(usdcAddress) function public returns (uint256) {

// Query Chainlink Oracle service for current USDC balance

memory data bytes = abi.encodePacked(

0x6ef5d8dd, // 'from'

usdcAddress,

1,

1,000,000,

2

);

// Call a function to query Chainlink Oracle

uint256 balance;

require(bytes(data).length >= 4, "Invalid data");

memory bytes newdata = abi.decodePacked(bytes(data), &balance);

require(newdata[3] == 1, "Invalid Oracle data");

// Execute the loaded balance and send it to the caller

uint256[] memory output = abi.encodeArray(remainder);

return output[0];

}

}

When this function call is executed on a smart contract on another chain, it usually uses the Chainlink Oracle Service to retrieve the current USDC balance. However, due to some internal issues in the CCIP Service or the contract itself, you will see the error message “Ready for manual execution”.

Solution: Understand the Causes and Mitigation Strategies

The root cause of this issue is the format of the Chainlink Oracle API call, which is not compatible with Ethereum-based smart contract data formats. There are several mitigation strategies that can be used to address this issue:

  • Upgrade the CCIP Service:

    A possible solution is to update the Chainlink Oracle Service to its latest version or implement a compatibility layer between different blockchain networks.

  • Use different data formats:

    Another approach could involve using alternative data formats that are compatible with Ethereum-based smart contracts. For example, you can use JSON Web Token (JWT) instead of Chainlink Oracle’s proprietary data format.

  • Implement manual trigger: The third strategy is to implement manual triggering of this function call on a smart contract on another chain. This involves a separate node or endpoint that manually executes the bringUsdcFromAnotherChain function, completely bypassing the rollback issue.

In conclusion, Ethereum Chainlink’s CCIP service has encountered issues returning function calls corresponding to retrieving USDC from another chain.

ethereum casting from manipulation

Leave a Reply