Blokzincir Dünyasının Görünmez Anahtarı: Approve (Onay) Mekanizması Nedir ve Nasıl Kullanılır?
Merkeziyetsiz finans (DeFi) ekosistemine veya Web3 dünyasına adım atan her kullanıcının karşısına çıkan en temel işlemlerden biri Approve (Onay) işlemidir. Bir Merkeziyetsiz Borsada (DEX) token takası yaparken veya bir platformda staking başlatırken sistem sizden önce bir "Onay / Approve" imzası ister, ardından asıl işlemi gerçekleştirir.
Peki, arkasındaki teknik mantık nedir? Neden her defasında bu onay süreciyle karşılaşırız ve doğru kullanım teknikleri nelerdir? Bu makalede Web3 mimarisinin bu kritik güvenlik ve yetkilendirme mekanizmasını tüm detaylarıyla inceliyoruz.
1. Approve (Onay) Nedir?
Merkeziyetsiz ağlarda (Ethereum, Avalanche, BNB Chain vb.) kullandığımız ERC-20 / BEP-20 standartlarındaki token’lar, cüzdanınızda şifrelenmiş halde duran dijital varlıklardır.
Standart protokol kuralları gereği, hiçbir akıllı sözleşme (Smart Contract), sizin açık izniniz ve imzanız olmadan cüzdanınızdan 1 birim dahi token çekemez.
İşte Approve, cüzdan sahibinin (sizin) belirli bir akıllı sözleşmeye (örneğin Uniswap veya Trader Joe Router kontratına) “Benim cüzdanımdan belirlediğim miktara kadar X token’ını çekip işlem yapmana izin veriyorum” deme şeklidir.
2. Approve Mekanizması Nasıl Çalışır? (Teknik Mantık)
Akıllı sözleşmeler dünyasında bu mekanizma ERC-20 Token Standardı içerisinde yer alan iki temel fonksiyon ile yönetilir:
approve(address spender, uint256 amount)allowance(address owner, address spender)
[Cüzdan Sahibi (Owner)] ──(1. approve() ile Yetki Verir)──> [Token Kontratı (Allowance Değişkeni)]
│
▼
[Akıllı Sözleşme (Spender)] <──(2. transferFrom() ile Çeker)────────┘
İşlem Adımları:
Adım 1 (Approve): Kullanıcı, token kontratının
approvefonksiyonunu çağırarak aracı sözleşmeye (spender) harcama limiti haritasında (allowance) izin tanımlar.Adım 2 (Allowance Kontrolü): Aracı sözleşme, cüzdandan token çekmeden önce
allowancefonksiyonunu sorgulayarak ne kadar limiti olduğunu doğrular.Adım 3 (TransferFrom): Limit uygunsa, sözleşme
transferFromfonksiyonunu çalıştırır ve izin verilen miktardaki token'ı kullanıcının cüzdanından alıp takas/staking işlemine sokar.
Önemli Ayrım: Cüzdanınızdan doğrudan ağın yerel kripto parasını (AVAX, ETH, BNB) gönderirken
Approvegerekmez; çünkü yerel varlıklarmsg.valueile fonksiyona doğrudan aktarılır. Ancak ERC-20 standart token'ları (USDT, GSX, PNG vb.) harcarken Approve yapılması zorunludur.
3. Approve İşlemi Nasıl Kullanılır?
Bir Web3 geliştiricisi veya kullanıcısı olarak Approve mekanizması iki farklı katmanda karşımıza çıkar:
A) Kullanıcı Arayüzü (Frontend / JavaScript) Katmanında Kullanım
Web3 projesi geliştirirken (Ethers.js veya Viem kullanarak), kullanıcının takas butonuna basması durumunda izlenecek standart akış şu şekildedir:
B) Akıllı Sözleşme (Solidity) Katmanında Kullanım
Sizin yazdığınız bir akıllı sözleşme, başka bir protokolün sözleşmesine (örneğin kendi Router'ınız Trader Joe'ya) token aktaracaksa, sözleşme içinden de approve verilmelidir:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract MyDexWrapper {
address public immutable traderJoeRouter;
constructor(address _router) {
traderJoeRouter = _router;
}
function processToken(address token, uint256 amount) external {
// 1. Kullanıcıdan bu kontrata token çekilir (Kullanıcı bu kontrata önceden approve vermiş olmalı)
IERC20(token).transferFrom(msg.sender, address(this), amount);
// 2. Bu kontrat, elindeki token'ı Trader Joe'ya aktarabilmek için Trader Joe'ya yetki verir
IERC20(token).approve(traderJoeRouter, amount);
// 3. Trader Joe üzerinden işlem tamamlanır
// ITraderJoe(traderJoeRouter).swap(...);
}
}
4. Güvenlik ve "Sonsuz Onay" (Infinite Approval) Riski
Approve mekanizmasında en sık karşılaşılan güvenlik uyarısı Sonsuz Onay (Infinite Approval) konusudur.
Sonsuz Onay Nedir? Her defasında gaz ücreti (Gas Fee) ödememek ve kullanıcıya tekrar tekrar imza attırmamak için uygulamalar genelde maksimum sayı olan
2^256 - 1(MaxUint256) tutarında yetki ister.Risk Nedir? Eğer yetki verdiğiniz dApp (Merkeziyetsiz Uygulama) veya Akıllı Sözleşme gelecekte hacklenirse ya da kötü niyetli bir yazılıma dönüşürse (Malicious Contract), cüzdanınızda ilgili token’dan ne kadar varsa tamamını çekebilir.
Güvenlik İçin En İyi Uygulamalar (Best Practices):
Gerektiği Kadar İzin Verin: Mümkünse arayüzde sadece harcayacağınız miktar kadar (Exact Amount) onay verin.
Onayları Düzenli Temizleyin: Kullanmadığınız protokollerdeki harcama yetkilerini Revoke.cash veya ağın kendi blok tarayıcılarındaki (Etherscan/Snowtrace Token Approval) araçlarla iptal edin (
Revoke).Güvenilir Kontratlarla Etkileşime Geçin: Kaynak kodları doğrulanmamış (Unverified) ve denetimden (Audit) geçmemiş sözleşmelere asla onay imzası atmayın.
Özet
Approve (Onay) mekanizması, Web3 ekosisteminde kullanıcı mülkiyetini koruyan en temel güvenlik bariyeridir. Cüzdanınızdaki varlıkların sizden habersiz kontrol edilmesini engeller. Yazılımcılar için akıllı sözleşmeler arası etkileşimin köprüsü, kullanıcılar içinse bilinçli kullanılması gereken bir dijital imza yetkisidir.
Yorumlar
Yorum Gönder