Ana içeriğe atla
Change page

ERC-223 Jeton Standardı

Giriş

ERC-223 nedir?

ERC-223, ERC-20 standardına benzer şekilde, değiştirilebilir jetonlara yönelik bir standarttır. Temel fark, ERC-223'ün yalnızca jeton API'sini değil aynı zamanda jetonları göndericiden alıcıya transfer etme mantığını da tanımlamasıdır. Jeton transferlerinin alıcının tarafında işlenmesini sağlayan bir iletişim modeline sahiptir.

ERC-20'den farkları

ERC-223, ERC-20'nin bazı sınırlamalarını ele alır ve jeton sözleşmesi ile jetonları alabilecek sözleşme arasında yeni bir etkileşim yöntemi sunar. ERC-223 ile mümkün olup ERC-20 ile mümkün olmayan birkaç şey şunlardır:

  • Alıcı tarafında jeton transferi işlemlerinin yönetimi: Alıcılar, ERC-223 jetonlarının yatırıldığını tespit edebilirler.
  • Yanlış gönderilmiş jetonların reddedilmesi: Bir kullanıcının ERC-223 jetonlarını jeton alması beklenmeyen bir sözleşmeye göndermesi halinde sözleşme, işlemi reddedebilir ve bu da jeton kaybını önler.
  • Transferlerde meta veri: ERC-223 jetonları, jeton işlemlerine rastgele bilgi eklenmesini sağlayan meta veriler içerebilir.

Ön Koşullar

Gövde

ERC-223, akıllı sözleşmeler içindeki jetonlar için bir API uygulayan bir jeton standardıdır. Ayrıca, ERC-223 jetonlarını alması gereken sözleşmeler için bir API belirtir. ERC-223 Alıcı API'sini desteklemeyen sözleşmeler ERC-223 jetonlarlarını alamaz ve bu da kullanıcı hatalarını önler.

Aşağıdaki yöntem ve olayları uyguluyan bir akıllı sözleşme, ERC-223 uyumlu bir jeton sözleşmesi olarak adlandırılabilir. Dağıtıldıktan sonra, Ethereum üzerinde oluşturulan jetonları takip etmekten sorumlu olacaktır.

Sözleşmenin yalnızca bu işlevlere sahip olması gerekmez ve bir geliştirici, bu sözleşmeye farklı jeton standartlarına ait herhangi bir özelliği ekleyebilir. Örneğin, approve ve transferFrom fonksiyonları ERC-223 standardının bir parçası olmasa da, gerekli durumlarda bu fonksiyonlar uygulanabilir.

EIP-223'den (opens in a new tab):

Yöntemler

ERC-223 jetonu şu yöntemleri uygulamalıdır:

function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transfer(address _to, uint256 _value, bytes calldata _data) public returns (bool success)

ERC-223 jetonlarını alması gereken bir sözleşme, şu yöntemi uygulamalıdır:

function tokenReceived(address _from, uint _value, bytes calldata _data)

ERC-223 jetonlarının tokenReceived(..) fonksiyonunu uygulamayan bir sözleşmeye gönderilmesi halinde transfer başarısız olmalı ve jetonlar gönderenin bakiyesinden çıkarılmamalıdır.

Olaylar

event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes calldata _data)

Örnekler

ERC-223 jetonu API'si ERC-20'ye benzer olduğundan, kullanıcı arayüzü geliştirme açısından herhangi bir fark yoktur. Burada tek istisna, ERC-223 jetonlarının bu standart için opsiyonel olan approve + transferFrom fonksiyonlarına sahip olamamasıdır.

Solidity örnekleri

Aşağıdaki örnek, temel bir ERC-223 jeton sözleşmesinin nasıl çalıştığını gösterir:

Şimdi tokenA jetonunun bir ERC-223 jetonu olduğunu varsayarak tokenA depozitolarını kabul eden başka bir sözleşme istiyoruz. Sözleşme yalnızca tokenA'yı kabul etmeli ve diğer jetonları reddetmelidir. Sözleşme tokenA'yı aldığında, bir Deposit() olayı yaymalı ve dahili 'deposits' değişkeninin değerini artırmalıdır.

İşte kod:

Sıkça sorulan sorular

Eğer sözleşmeye bir miktar tokenB gönderirsek ne olur?

İşlem başarısız olur ve ve jeton transferi gerçekleşmez. Jetonlar göndericinin adresine iade edilir.

Bu sözleşmeye nasıl para yatırabiliriz?

RecipientContract adresini belirterek ERC-223 jetonun transfer(address,uint256) veya transfer(address,uint256,bytes) fonksiyonunu çağırın.

Bir ERC-20 jetonunu bu sözleşmeye transfer edersek ne olur?

RecipientContract adresine bir ERC-20 jetonu gönderilirse, jetonlar transfer edilir ancak transfer tanınmaz (hiçbir Deposit() olayı tetiklenmez ve depozito değeri değişmez). İstenmeyen ERC-20 depozitoları filtrelenemez veya engellenemez.

Jeton yatırımı tamamlandıktan sonra bazı fonksiyonları yürütmek istersek ne yapmalıyız?

Bunu yapmanın birkaç yolu vardır. Bu örnekte, ERC-223 transferlerini ether transferlerine özdeş hale getiren yöntemi takip edeceğiz:

RecipientContract bir ERC-223 jetonu aldığında sözleşme, tıpkı ether işlemlerinin fonksiyon çağrılarını işlem data olarak kodlaması gibi, jeton işleminin _data parametresi olarak kodlanan bir fonksiyonu yürütür. Daha fazla bilgi için veri alanını okuyun.

Yukarıdaki örnekte, bir ERC-223 jetonunun transfer(address,uin256,bytes calldata _data) fonksiyonu ile RecipientContract adresine transferi gerekmektedir. Eğer veri parametresi 0xc2985578 (foo() fonksiyonunun imzası) ise, jeton depozitosu alındıktan sonra foo() fonksiyonu çağrılır ve Foo() olayı tetiklenir.

Parametreler jeton transferinin datasına da kodlanabilir, örneğin _someNumber için 12345 değeriyle bar() fonksiyonunu çağırabiliriz. Bu durumda data şu şekilde olmalıdır: 0x0423a13200000000000000000000000000000000000000000000000000000000000004d2, burada 0x0423a132, bar(uint256) fonksiyonunun imzası ve 00000000000000000000000000000000000000000000000000000000000004d2 ise uint256 olarak 12345'tir.

Sınırlamalar

ERC-223, ERC-20 standardında bulunan birkaç sorunu ele alırken, kendi sınırlamaları da vardır:

  • Benimsenme ve Uyumluluk: ERC-223 henüz geniş çapta benimsenmemiştir, bu da mevcut araç ve platformlarla uyumluluğunu sınırlayabilir.
  • Geriye Dönük Uyumluluk: ERC-223, ERC-20 ile geriye dönük uyumlu değildir; bu nedenle mevcut ERC-20 sözleşmeleri ve araçlar, ERC-223 jetonları ile modifikasyon yapılmadan çalışmaz.
  • Gaz Maliyetleri: ERC-223 transferlerindeki ek kontrol ve işlevler, ERC-20 işlemlerine kıyasla daha yüksek gaz maliyetlerine neden olabilir.

Daha fazla kaynak

Sayfanın son güncellenme tarihi: 6 Eylül 2025

Bu makale faydalı oldu mu?