Ask Sawal

Discussion Forum
Notification Icon1
Write Answer Icon
Add Question Icon

What is abi in solidity?

2 Answer(s) Available
Answer # 1 #

The Contract Application Binary Interface (ABI) is the standard way to interact with contracts in the Ethereum ecosystem, both from outside the blockchain and for contract-to-contract interaction. Data is encoded according to its type, as described in this specification.

[5]
Edit
Query
Report
Guggu Sud
INSULATING MACHINE OPERATOR
Answer # 2 #

5 min read

While interacting with a smart contract ABI is one of the essential components. In this guide, let us understand what the ABI of smart contracts is.

ABI (Application Binary Interface) in the context of computer science is an interface between two program modules, often between operating systems and user programs.

EVM (Ethereum Virtual Machine) is the core component of the Ethereum network, and smart contract is pieces of code stored on the Ethereum blockchain which are executed on EVM. Smart contracts written in high-level languages like Solidity or Vyper need to be compiled in EVM executable bytecode; when a smart contract is deployed, this bytecode is stored on the blockchain and is associated with an address. For Ethereum and EVM, a smart contract is just this sequence of bytecode. To access functions defined in high-level languages, users need to translate names and arguments into byte representations for byte code to work with it. To interpret the bytes sent in response, users need to convert back to the tuple of return values defined in higher-level languages. Languages that compile for the EVM maintain strict conventions about these conversions, but in order to perform them, one must know the precise names and types associated with the operations. The ABI documents these names and types precisely, easily parseable format, doing translations between human-intended method calls and smart-contract operations discoverable and reliable.

It is very similar to API (Application Program Interface), a human-readable representation of a code’s interface. ABI defines the methods and structures used to interact with the binary contract, just like API does but on a lower-level. The ABI indicates the caller of the function to encode the needed information like function signatures and variable declarations in a format that the EVM can understand to call that function in bytecode; this is called ABI encoding. ABI encoding is mostly automated, taken care of by compilers like REMIX or wallets interacting with the blockchain. Contract ABI is represented in JSON format. There are clear specifications of how to encode and decode a contract ABI.

The JSON format of a contract’s ABI is given by various functions and/or events descriptions.

Following are the elements present in the ABI description of a function:

Following are the elements present in the ABI description of an event:

One of the most common ways is to copy the ABI using the ABI button under compile tab of Ethereum REMIX IDE after the smart contract has complied.

Another way is compiling and generating ABI using solc, which provides JavaScript bindings for Solidity Compiler. To install solc, we need to have npm, which comes with node.js. Check if node.js is installed on your system or not.

If not installed, you can download the LTS version of NodeJS from the official website.

Now let’s install solc

We’ll compile and generate ABI for the following contract, test.sol which is a contract to increment the value of a variable:

Explanation of the code above

Line 1: Specifying SPDX license type, which is an addition after Solidity ^0.6.8; whenever the source code of a smart contract is made available to the public, these licenses can help resolve/avoid copyright issues. If you do not wish to specify any license type, you can use a special value UNLICENSED or simply skip the whole comment (it won’t result in an error, just a warning).

Line 2: Declaring the Solidity version.

Line 4: Starting our contract name test.

Line 6: Declaring a private variable named count of type unsigned integer and assigning value zero to it.

Line 8-10: Declaring a public function increment, which increases the value of count by one when called.

Line 12-14: Declaring a public function getCount which will return the value of count in unsigned integer form.

Now, let’s get the ABI for the above contract.

A file named test_sol_test.abi will be created in the same directory; it will have the ABI in the JSON format something like this:

[0]
Edit
Query
Report
Rajasree Thete
DYE LAB TECHNICIAN