Allowances
Delegerede overførsler
Allowances er en gratis Grundlæggende udvikling af Web3- og DApp-programmer-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Grundlæggende udvikling af Web3- og DApp-programmer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende udvikling af Web3- og DApp-programmer-kurset indeholder 4 lektioner i alt.
Delegerede overførsler
Allowances lader en token-ejer give en anden konto – spenderen – tilladelse til at flytte tokens på ejerens vegne. Det gør det muligt for decentraliserede børser og DeFi-protokoller at trække dine tokens med din tilladelse.
Forløbet er: approve fastsætter en grænse, hvorefter transferFrom bruger af den.
Lagring af allowance
Allowances ligger i en indlejret mapping: ejer til spender til beløb. Den registrerer, hvor meget hver spender må flytte for hver ejer.
<code>mapping(address => mapping(address => uint256)) public allowance;</code>Fastsættelse af en allowance
Ejeren kalder approve for at give en spender tilladelse. Det overskriver en eventuel tidligere allowance for den pågældende 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>Læsning af en allowance
Alle kan forespørge på den resterende allowance via den offentlige mapping eller standard-view-funktionen allowance(owner, spender).
<code>// remaining = allowance[owner][spender];
function allowanceOf(address owner, address spender) public view returns (uint256) {
return allowance[owner][spender];
}</code>Implementering af transferFrom
transferFrom lader en godkendt spender flytte tokens fra ejeren til en modtager. Den skal kontrollere både ejerens saldo og spenderens 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>Formindskelse af allowancen
Bemærk, at transferFrom reducerer allowancen med det brugte beløb. Det forhindrer en spender i at genbruge den samme godkendelse ubegrænset.
<code>allowance[from][msg.sender] -= amount; // consumed</code>Ubegrænset godkendelse
Nogle protokoller anmoder om den maksimale uint256-allowance, så brugerne kun behøver at godkende én gang. Mange implementeringer springer over at formindske den, når allowancen er sat til denne maksimumværdi, hvilket sparer gas.
<code>uint256 constant MAX = type(uint256).max;
// if (allowance == MAX) skip decrement</code>Race condition ved approve
Der findes en kendt risiko: Hvis en allowance ændres fra én værdi, der ikke er nul, til en anden, kan ændringen front-rundes, så en spender kan bruge begge værdier. Den klassiske modforanstaltning er først at sætte allowancen til 0 og derefter til den nye værdi.
<code>// recommended pattern
token.approve(spender, 0);
token.approve(spender, newAmount);</code>increaseAllowance og decreaseAllowance
For at undgå race condition tilføjer nogle tokens hjælpefunktioner, der justerer allowancen i forhold til dens aktuelle værdi i stedet for at overskrive den.
<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>Praktisk brug: DEX
Når du handler på en DEX, godkender du først router-kontrakten med approve. Routeren kalder derefter transferFrom for at trække dine tokens ind i byttet. Uden allowancen kan handlen ikke gennemføres.
Sikkerhedspåmindelse
En allowance er en stående tilladelse. Hvis du giver en ondsindet eller fejlbehæftet kontrakt en ubegrænset allowance, kan den tømme dine tokens. Gennemgå og tilbagekald jævnligt ubrugte godkendelser.
<code>// revoke by approving zero
token.approve(spender, 0);</code>Hurtigt tjek
Test din forståelse af allowances.
Opsummering
Du har lært allowance-mekanismen:
approvefastsætter allowance[owner][spender]transferFrombruger af allowancen og formindsker den- Race condition ved approve afhjælpes ved først at sætte værdien til 0 eller bruge increase/decreaseAllowance
- Allowances driver DEX'er og DeFi – tilbagekald ubrugte allowances af hensyn til sikkerheden
Lær Grundlæggende udvikling af Web3- og DApp-programmer med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 105
Ofte stillede spørgsmål
Er lektionen “Allowances” gratis?
Ja — alle 3 lektioner i læringssporet Grundlæggende udvikling af Web3- og DApp-programmer, inklusive “Allowances”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Grundlæggende udvikling af Web3- og DApp-programmer-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Allowances”?
Delegerede overførsler Du øver dig i Grundlæggende udvikling af Web3- og DApp-programmer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Grundlæggende udvikling af Web3- og DApp-programmer?
Der kræves ingen tidligere erfaring. Grundlæggende udvikling af Web3- og DApp-programmer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Allowances”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Grundlæggende udvikling af Web3- og DApp-programmer-lektion?
Ja. Alle Grundlæggende udvikling af Web3- og DApp-programmer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.