Harcamaya İzinler
Yetkilendirilmiş transferler
Harcamaya İzinler, CoddyKit'te ücretsiz bir Web3 & DApp Development Fundamentals dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Web3 & DApp Development Fundamentals öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Web3 & DApp Development Fundamentals kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Delegated Transfers
Allowances let a token owner authorize another account - the spender - to move tokens on their behalf. This is what enables decentralized exchanges and DeFi protocols to pull your tokens with permission.
The flow is: approve sets a limit, then transferFrom spends within it.
The Allowance Storage
Allowances live in a nested mapping: owner to spender to amount. It records how much each spender may move for each owner.
<code>mapping(address => mapping(address => uint256)) public allowance;</code>Setting an Allowance
The owner calls approve to authorize a spender. This overwrites any previous allowance for that spender.
<code>function approve(address spender, uint256 amount) public returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}</code>Reading an Allowance
Anyone can query the remaining allowance with the public mapping or the standard allowance(owner, spender) view function.
<code>// remaining = allowance[owner][spender];
function allowanceOf(address owner, address spender) public view returns (uint256) {
return allowance[owner][spender];
}</code>Implementing transferFrom
transferFrom lets an approved spender move tokens from the owner to a recipient. It must check both the owner's balance and the spender's allowance.
<code>function transferFrom(address from, address to, uint256 amount) public returns (bool) {
require(balanceOf[from] >= amount, 'insufficient balance');
require(allowance[from][msg.sender] >= amount, 'allowance exceeded');
allowance[from][msg.sender] -= amount;
balanceOf[from] -= amount;
balanceOf[to] += amount;
emit Transfer(from, to, amount);
return true;
}</code>Decrementing the Allowance
Notice that transferFrom reduces the allowance by the amount spent. This prevents a spender from reusing the same approval indefinitely.
<code>allowance[from][msg.sender] -= amount; // consumed</code>Infinite Approval
Some protocols request the maximum uint256 allowance so users only approve once. Many implementations skip decrementing when the allowance is set to this max value, saving gas.
<code>uint256 constant MAX = type(uint256).max;
// if (allowance == MAX) skip decrement</code>The Approve Race Condition
There is a known hazard: changing an allowance from one non-zero value to another can be front-run, letting a spender use both. The classic mitigation is to set the allowance to 0 first, then to the new value.
<code>// recommended pattern
token.approve(spender, 0);
token.approve(spender, newAmount);</code>increaseAllowance and decreaseAllowance
To avoid the race condition, some tokens add helper functions that adjust the allowance relative to its current value rather than overwriting it.
<code>function increaseAllowance(address spender, uint256 added) public returns (bool) {
allowance[msg.sender][spender] += added;
emit Approval(msg.sender, spender, allowance[msg.sender][spender]);
return true;
}</code>Real-World Use: DEX
When you trade on a DEX you first approve the router contract. The router then calls transferFrom to pull your tokens into the swap. Without the allowance the trade cannot happen.
Security Reminder
An allowance is a standing permission. Granting an infinite allowance to a malicious or buggy contract can drain your tokens. Review and revoke unused approvals regularly.
<code>// revoke by approving zero
token.approve(spender, 0);</code>Quick Check
Test your understanding of allowances.
Recap
You learned the allowance mechanism:
approvesets allowance[owner][spender]transferFromspends within the allowance and decrements it- The approve race condition is mitigated by setting to 0 first or using increase/decreaseAllowance
- Allowances power DEXs and DeFi - revoke unused ones for safety
Yapay zeka eğitmeniyle Web3 & DApp Development Fundamentals öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 29
- Dersler
- 105
Sıkça Sorulan Sorular
“Harcamaya İzinler” dersi ücretsiz mi?
Evet — “Harcamaya İzinler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Web3 & DApp Development Fundamentals kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Web3 & DApp Development Fundamentals kursu toplamda 4 dersten oluşur.
“Harcamaya İzinler” dersinde ne öğreneceğim?
Yetkilendirilmiş transferler Web3 & DApp Development Fundamentals ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Web3 & DApp Development Fundamentals öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Web3 & DApp Development Fundamentals, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Harcamaya İzinler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Web3 & DApp Development Fundamentals dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Web3 & DApp Development Fundamentals dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- ERC-20 Standardı
- Belirteç Uygulama
- Harcamaya İzinler
- Üretme ve Yakma