Contract calls on Fireblocks
Many transactions on Ethereum and other EVM-based blockchains are, in fact, methods of calling smart contracts in order to execute various operations of the contract. Some smart contracts follow protocol guidelines (e.g. ERC-20 tokens) and are more easily contextualized and parsed by Fireblocks. However, many other contracts are custom and implement various unique functions. Custom contracts are primarily found in the DeFi space, where each platform deploys its own contracts for different financial functions.
Contract call details are recorded as hexadecimal encoded strings, which are signed with a private key and broadcast to the blockchain. In Fireblocks, you can use either the Smart Contract API or a Web3 integration to input specific data. Either way, the fact that the data is encoded poses a challenge when trying to understand what the contract call details are and what operations will actually be executed by the contract on the blockchain.
Contract call decoding
Contract call data decoding allows you to better contextualize the content of contract calls that you execute on the Fireblocks platform. In order to do this, Fireblocks maintains a database of smart contracts and their Application Binary Interfaces (ABI). The contract ABI defines the methods and structures used to interact with the contract and is the standard way to interact with contracts in the Ethereum ecosystem. This database allows Fireblocks to decode contract calls before they are mined on the blockchain, providing further details and insight into the context of the transaction.
Fireblocks maintains the most commonly used contracts in the database for decoding. Currently, the decoding is generic and is presented as the original decoded inputs, but further contextualization and presentation are planned.
Example
The following is an example of a contract call that was created by the Sushi DeFi platform, without and with the extra decoding data:
Contract call to SushiSwap with no decoding
Contract call to SushiSwap with decoding 