What Is a Smart Contract—and Why Its Rules Cannot Be Changed Retroactively?
Disclaimer: This article is for educational purposes only. It is not financial, legal, or investment advice.
A smart contract is often described as a “digital agreement.” That is a useful analogy, but it is not the full picture. More precisely, a smart contract is a program deployed on a blockchain that stores data and executes predefined instructions.
Örneğin yalnızca bir koşul karşılandıktan sonra transfere izin verebilir, katılımcıları izleyebilir veya başarılı bir işlemden sonra kaydı güncelleyebilir. Bir kişi işlem gönderdiğinde ağ kodu çalıştırır ve sonucu kaydeder.
Başlangıçtan itibaren iki sınırlama önemlidir:
- “Akıllı”, programın düşünebildiği veya niyeti değerlendirebildiği anlamına gelmez.
- “Sözleşme” sözcüğü koda otomatik olarak bir anlaşmanın hukuki statüsünü kazandırmaz.
Akıllı sözleşme tam olarak kodunun izin verdiği işlemleri yapar. Mantıkta bir hata, güvenli olmayan idari fonksiyon veya yanlış varsayım varsa blok zinciri bunu otomatik olarak düzeltmez.
Temel çıkarımlar
- Akıllı sözleşme, bir blok zinciri adresinde saklanan kod ve veridir.
- Ağ, işlevleri önceden tanımlanmış kurallara göre yürütür.
- Onaylanmış bir işlem sonradan doğrudan düzenlenemez.
- Bazı sözleşmeler ayarlanabilir parametrelerle veya yükseltilebilir mantıkla tasarlanır.
- Kullanıcılar yalnızca sözleşme adresini değil, rollerini, izinlerini ve yükseltme mekanizmasını da kontrol etmelidir.
Akıllı sözleşmeleri anlamanın basit bir yolu
Otomatik çalışan bir emanet dolabı düşünün.
- Kuralı şöyledir: "Alıcı dolabı yalnızca belirtilen tarihten sonra açabilir."
- Gönderici bir varlık yatırır.
- Alıcı erken açmayı dener ve makine izin vermez.
- Tarih geldiğinde diğer tüm koşullar karşılanıyorsa aynı istek başarıyla tamamlanır.
Fark şudur: Akıllı sözleşme tek bir şirketin sunucusu tarafından yürütülmez. Blokzincir ağı talimatı işler, ortak bir sonuca ulaşır ve bunu kaydeder.
Bu, sözleşmenin bir paketin teslim edilip edilmediğini, havanın nasıl olduğunu veya döviz kurunun ne olması gerektiğini otomatik olarak bildiği anlamına gelmez. Blokzincir, kendisine sunulan verilerle güvenilir biçimde çalışır. Dış dünyadan gelen bilgiler çoğunlukla oracle adı verilen ek kaynaklar gerektirir. Sonuç bu kaynaklara da bağlı olur.
Kod, durum ve işlemler
Akıllı sözleşmenin üç önemli boyutu vardır:
- Code: its available functions and checks.
- State: its current data, such as balances, statuses, and configuration values.
- Transaction history: the sequence of operations that changed that state.
Açık verileri okumak normalde durumu değiştirmez. Token transferi veya katılım kaydı gibi bir değişiklik yapan eylem işlem gerektirir. Kullanıcı işlemi imzalar, ağ işler ve normalde ücret alınır.
Bir işlem zincire dâhil edilip kesinleştikten sonra zincir geçmişinin parçası olur. Kod izin veriyorsa sonraki bir işlem mevcut durumu değiştirebilir; ancak önceki kaydı yeniden yazmaz. Her iki olay da görünür kalır.
"Geriye dönük değiştirilemez" gerçekte ne anlama gelir?
Bir sözleşmenin A adresinden B adresine 100 token transferini kaydettiğini varsayın. Onaydan sonra bir yönetici, ilk işlem hiç gerçekleşmemiş gibi bu bloğu açıp 100 değerini 10 ile değiştiremez. Zaten onaylanmış işlemde alıcıyı gizlice değiştirmesi de mümkün değildir.
If the code includes a refund, reversal, or compensation function, using it creates a new transaction. The blockchain will show the original action and the later response.
Zincir üstü geçmişin bağımsız doğrulamayı destekleyebilmesinin nedeni budur: Farklı gözlemciler ağı sorgulayabilir ve aynı olay dizisini inceleyebilir.
Bir blokzincirin "hiçbir koşulda değişemeyeceğini" söylemek yine de doğru değildir. Ağların kendi kesinleşme modelleri vardır ve protokol arızalarına veya saldırılara açık kalırlar. Pratik sonuç daha sınırlıdır: Normal işleyişte bir kullanıcı veya uygulama yöneticisi, onaylanmış bir blokzincir kaydını özel veri tabanındaki bir satır gibi düzenleyemez.
Bu, bir sözleşmenin hiçbir zaman değişemeyeceği anlamına mı gelir?
Her zaman değil. "Değiştirilemez sözleşme" ifadesi en çok bu noktada yanlış anlaşılır.
1. Yükseltilemeyen sözleşme
Dağıtılmış kod özgün mantığıyla çalışmaya devam eder. Geliştiriciler yeni bir adrese yeni sözleşme dağıtabilir; ancak eski adres ve geçmişi kalır. Kullanıcıların yeni sürüme bilinçli olarak geçmesi gerekir.
2. Ayarlanabilir parametrelere sahip sözleşme
Kod; limiti değiştiren, işlemi duraklatan, izin listesini yöneten veya ücret alıcısını güncelleyen yönetici işlevleri içerebilir. Bu işlevler yine yeni işlemler gerektirir ve yalnızca kodda bulunan yetkileri kullanabilir.
Bu geçmişi yeniden yazmaz; ancak gelecekteki işlemlerin kurallarını değiştirebilir.
3. Yükseltilebilir mimari
Yaygın bir tasarımda proxy sözleşmesi kullanılır. Proxy adresi aynı kalırken çağrılar ayrı bir uygulama sözleşmesine yönlendirilir. Yönetişim bu uygulamayı değiştirebiliyorsa proxy adresindeki gelecekteki davranış da değişebilir.
Bu, "adres değişmedi" ifadesinin mutlaka "mantık hiç değişmedi" anlamına gelmediğini gösterir. Dikkatli bir inceleme şunları sorar:
- Adres bir proxy mi?
- Uygulamayı kim yükseltebilir?
- Tek bir imza yeterli mi, yoksa birden fazla imza mı gerekiyor?
- Zaman gecikmesi var mı?
- İşlemler duraklatılabilir mi?
- Yöneticiler hangi parametreleri değiştirebilir?
Örnek: Bir limitin değiştirilmesi
Günlük limiti 1.000 birim olan bir sözleşme düşünün.
- Pazartesi günü bir kullanıcı 800 birimlik işlemi tamamlar.
- Salı günü yetkili bir adres yeni bir işlemle limiti 500'e değiştirir.
- Pazartesi günkü işlem kaybolmaz veya farklı bir kayda dönüşmez.
- Sözleşme mantığı böyle belirtiyorsa salı gününden itibaren 500 birimlik limit uygulanır.
Bir blok gezgini her iki işlemi de gösterebilir. Sonuçlarını anlamak için yine de hangi fonksiyonların çağrıldığını ve bu fonksiyonların hangi yetkilere sahip olduğunu bilmek gerekir.
Blokzincir neyi kanıtlar, neyi kanıtlamaz?
Herkese açık bir blok zinciri şu bilgilerin doğrulanmasına yardımcı olabilir:
- katılımcı adresler;
- işlem zamanı ve durumu;
- aktarılan varlıklar ve tutarlar;
- veriler doğru çözümlendiğinde çağrılan işlev;
- olaylar ve işlem sırası;
- dağıtılmış bytecode ile doğrulandığında kaynak kod.
Deployment on a blockchain does not by itself guarantee:
- hata veya güvenlik açığı bulunmadığını;
- dürüst geliştiriciler;
- ekonomik sürdürülebilirlik;
- doğru haricî verileri;
- yönetici yetkilerinin bulunmadığını;
- hukuki koruma;
- hatalı transferden sonra kurtarma.
Şeffaflık, kanıtların incelenebileceği anlamına gelir. Görünen her şeyin güvenli olduğu anlamına gelmez.
Etkileşim öncesi uygulamalı kontrol listesi
- Verify the address. Obtain it from an official project source and compare it carefully.
- Verify the network. The same address format may exist across several EVM networks.
- Check source verification. Published source code makes analysis easier, but it is not a security audit.
- Look for proxies and upgrades. Identify the implementation and the upgrade authority.
- Review administrator powers. Look for owner, admin, pause, upgrade, fee, and access-control functions.
- Review token approvals. Before approving, confirm the token, spender, and allowance.
- Start small. For a first interaction, consider a small test amount while accounting for fees.
Kullanıcının imzası neden önemlidir?
Akıllı sözleşme bütün cüzdana otomatik olarak erişemez. Belirli bir çağrı alır ve yalnızca kendisine verilen izinleri kullanabilir.
Ancak bir imza basit bir transferden daha fazlasına izin verebilir. Token harcamasını onaylayabilir, sınırsız harcama izni verebilir, varlıkları takas edebilir, NFT transfer edebilir veya karmaşık bir çağrı dizisini tetikleyebilir.
Cüzdan isteği açıkça açıklayamıyorsa kullanıcı "kör imza" riskiyle karşı karşıyadır. Bir bağlantının tanıdık bir sohbetten gelmesi veya bir web sitesinin resmî siteye benzemesi, işlemi onaylamak için yeterli değildir.
Sonuç
Akıllı sözleşme ne bir vaat ne de adaletin sihirli bir garantisidir. Kodlanmış kuralları uygulayan ve doğrulanabilir bir geçmiş bırakan programdır.
A confirmed operation cannot be quietly edited after the fact. However, future parameters or logic may be changeable if the architecture was designed that way. The most useful question is therefore not only “Is there a smart contract?” but also: “What does its code allow, and who can influence how it works in the future?”