ERC-777, Ethereum ağında bulunan ve mevcut merkeziyetsiz borsalarla tamamen uyumlu olan, takas edilebilir tokenler için bir token standardıdır. Daha basit bir ifadeyle, ERC-777 tokenize standardı, Ethereum’un ETH ile uyumlu token türlerini belirten blok zinciri protokolünü ifade eder.
Ek olarak, ERC-777 yeni standart ERC-820’yi kullanır: Basit bir iç gözlem türü sağlamak için sözleşmeler için meta verilerin kaydedilmesine izin veren bir kayıt sözleşmesi kullanan sözde iç gözlem. Bu, to
adresinde bir EIP-820 araması tarafından döndürülen ITokenRecipient'a
ve hedef sözleşme tarafından uygulanan işlevlere bağlı olarak geriye dönük uyumluluğa ve diğer işlevsellik uzantılarına izin verir.
ERC-777, ERC-20’lerden öğrenilen pek çok şey içerir. Örneğin, beyaz listeli operatörler, send(...)
kullanarak Ether uyumlu arayüzler sağlamak ve geriye dönük uyumluluk için işlevselliği geçersiz kılmak ve uyarlamak için ERC-820’yi kullanmak.
Standartın Faydaları
Bu standart, yaygın olarak kullanılan ERC-20 belirteç standardını iyileştirmeye çalışır. Bu standardın başlıca avantajları şunlardır:
- Tokenlerin
send(dest, value, data)
ile gönderilmesi konusunda Ether ile aynı felsefeyi kullanır. - Bir
tokensRequired
, herhangi bir sözleşmede ve herhangi bir normal adreste, tokenler alındığında bu kodu tetikleyecek şekilde tanımlanabilir. Bu, ERC-20 standardında gerekli olan çift çağrıyı önler. - Hem sözleşmeler hem de normal adres, göndermeyi bloke eden bir
tokensToSend
işlevini kaydederek gönderdikleri belirteci kontrol edebilir ve reddedebilir. - Hem sözleşmeler hem de normal adresler, tokenlerin alınmasını reddetmek için fırlatan bir
tokensReceived
işlevi kaydederek hangi belirteçleri aldıklarını kontrol edebilir ve reddedebilir. - Token sahibi, tokenlerini yönetebilen operatörleri “yetkilendirebilir” ve “iptal edebilir”. Bu operatörler genellikle borsa, çek işlemci veya otomatik ücretlendirme sistemi gibi doğrulanmış sözleşmeler olacaktır.
- Her token işlemi, alıcıya veri iletmek için sırasıyla kullanıcı (gönderen) ve operatör tarafından serbestçe kullanılacak bir
userData
bayt alanı ve bir operatör işlemi durumunda benzer biroperatorData
içerir. - TokensRequired fonksiyonu içermeyen cüzdanlar ile geriye dönük uyumlu bir şekilde kullanılabilir.
ERC-777 Token (Token Sözleşmesi)
interface ERC777Token {
function name() public constant returns (string);
function symbol() public constant returns (string);
function totalSupply() public constant returns (uint256);
function granularity() public constant returns (uint256);
function balanceOf(address owner) public constant returns (uint256);
// transfer is modified to send in ERC-777
function send(address to, uint256 amount) public;
function send(address to, uint256 amount, bytes userData) public;
function authorizeOperator(address operator) public;
function revokeOperator(address operator) public;
function isOperatorFor(address operator, address tokenHolder) public constant returns (bool);
function operatorSend(address from, address to, uint256 amount, bytes userData, bytes operatorData) public;
event Sent(
address indexed operator,
address indexed from,
address indexed to,
uint256 amount,
bytes userData,
bytes operatorData
);
event Minted(address indexed operator, address indexed to, uint256 amount, bytes operatorData);
event Burned(address indexed operator, address indexed from, uint256 amount, bytes userData, bytes operatorData);
event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
event RevokedOperator(address indexed operator, address indexed tokenHolder);
}
ERC-777’nin Avantaj ve Dezavantajları
- Tokenler için iyi düşünülmüş ve geliştirilmiş arayüzler içerir. ERC-20 kullanımından öğrenilenler dahil edilmiştir.
- İç gözlem için yeni standart istek ERC-820’yi kullanır ve ek işlevsellik sağlar.
- Beyaz listedeki operatörler çok kullanışlıdır ve genellikle sonsuz bırakılan onay/izin vermekten daha gereklidir.
- Standart daha yeni başlıyor, bağımlı sözleşme çağrılarıyla karmaşık inşaat
- Bağımlılıklar, güvenlik sorunları olasılığını artırır: ilk güvenlik sorunları ERC-777’de değil, daha da yeni ERC-820’de tanımlandı (ve çözüldü)