Smart Contract ABI Nedir? (Application Binary Interface)

Diyelim ki iki kişi olsun ve bu iki kişinin de ana dilleri birbirlerinden farklı nasıl iletişime geçebilirler birbirleri ile? Ortak bir araç gerekir, ortak bir dil, ortak bir araç, ortak bir iletişim arayüzü… Örneğin iki kişinin de ek olarak İngilizce bildiğini varsayalım. Bunu göz önüne aldığımızda bu iki kişinin ana dillerinin bir önemi kalmadığını; bu ortak dil sayesinde rahatlıkla iletişim kurabildiklerini gözlemleyebilirsiniz.

Smart Contract’lar EVM (Ethereum Virtual Machine) üzerinde ve makina dilinde derlenen yazılımlardır. Bu smart contract’ler ile iletişime geçmenin iki yolu var; 1. si ya siz de makina dilinde kod yazarak iletişime geçeceksiniz ya da EVM’nin de anlayabileceği ortak bir arayüz ile iletişime geçeceksiniz. Peki bu arayüz nedir?

Yazılım Dillerinin Ortak Katlarının En Büyüğü: JSON!

Dünya üzerindeki bir çok dil tarafından tanınan, kullanılan ve de anlaşılabilen JSON formatı bizim çıkış noktamız olacak. Ethereum Virtual Machine tarafında ve de Client (Browser) tarafında kullanabileceğiniz ortak bir dil olan JSON formatındaki verilerle bir takım komutlar iletebilirsiniz.

Şimdi gelelim işin en önemli bölümüne; bu iki kişi aynı kelimeyi ifade edeceklerinden nasıl emin olacaklar? Yani smart contract’te yazılan bir fonksiyonu tetiklemek için o fonksiyonun adını Client nasıl biliyor olacak? İşte burada tam olarak ABI devreye giriyor.

Smart Contract’i derlediğinizde elinizde iki farklı dosya sağlanır bunlardan birisi yazdığınız her bir satır kodun makina dilindeki çevirisini içeren bir dosya ve bir diğeri ise bizim konumuz olan ABI dosyası.

ABI dosyasında yazdığınız tüm değişkenler, tüm fonksiyonlar ve bunların return ettiği tüm değer türleri, bunların aldıkları her bir parametre, bu parametrelerin tipleri, tüm döngüler, tüm class’lar (struct), tüm mapping’ler ve diğer tüm her şey JSON ile ifade edilecek şekilde siz smart contract’i derlediğinizde oluşturuluyor. Ve bu özel JSON dosyasını client tarafta import ederek client tarafta bu komutları Web3 aracılığı ile blockchain ağında tetikleyebiliyorsunuz.

Bu Abi.json dosyası içerisinde iletişim kuracağınız blockchain ağı bilgileri, ulaşmak istediğiniz smart contract’in adresi, proje adı, solidity’nin hangi versiyonu ile yazıldığı, bu smart contract’te bulunan tüm fonksiyonlar ve tüm değişkenler ve bunların tüm özellikleri yer almaktadır. Sizin yapmanız gereken ise smart contract oluşturduktan sonra elde ettiğiniz ABI’yi Client tarafa yükleyip bu ABI üzerinden Web3 JS ya da Ethers JS ile smart contract’teki fonksiyonları tetiklemektir.

Örneğin aşağıda createProduct adlı fonksiyonu içeren bir abi örneği görüyorsunuz. Her şey o kadar anlaşılır ki “inputs” field’ında iki tane parametre görüyorsunuz bunlar fonksiyonun aldığı parametreler. Bunların tiplerini, isimlerini rahatlıkla okuyabiliyorsunuz.

"abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_title",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "_price",
          "type": "uint256"
        }
      ],
      "name": "createProduct",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
]

Bir cevap yazın