Elaun
Pemindahan yang diwakilkan
Elaun ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Pemindahan yang Diwakilkan
Allowance membolehkan pemilik token memberi kuasa kepada akaun lain - pembelanja - untuk memindahkan token bagi pihak mereka. Inilah yang membolehkan bursa terdesentralisasi dan protokol DeFi menarik token anda dengan kebenaran.
Alirannya ialah: approve menetapkan had, kemudian transferFrom menggunakan jumlah dalam had itu.
Storan Allowance
Allowance berada dalam pemetaan bersarang: pemilik kepada pembelanja kepada jumlah. Pemetaan ini merekodkan jumlah yang boleh dipindahkan oleh setiap pembelanja bagi setiap pemilik.
<code>mapping(address => mapping(address => uint256)) public allowance;</code>Menetapkan Allowance
Pemilik memanggil approve untuk memberi kuasa kepada pembelanja. Tindakan ini menggantikan allowance terdahulu bagi pembelanja tersebut.
<code>function approve(address spender, uint256 amount) public returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}</code>Membaca Allowance
Sesiapa sahaja boleh menyoal allowance yang berbaki melalui pemetaan awam atau fungsi pandangan standard allowance(owner, spender).
<code>// remaining = allowance[owner][spender];
function allowanceOf(address owner, address spender) public view returns (uint256) {
return allowance[owner][spender];
}</code>Melaksanakan transferFrom
transferFrom membolehkan pembelanja yang diluluskan memindahkan token daripada pemilik kepada penerima. Fungsi ini mesti menyemak baki pemilik dan allowance pembelanja.
<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>Mengurangkan Allowance
Perhatikan bahawa transferFrom mengurangkan allowance sebanyak jumlah yang digunakan. Ini menghalang pembelanja daripada menggunakan semula kelulusan yang sama tanpa had.
<code>allowance[from][msg.sender] -= amount; // consumed</code>Kelulusan Tanpa Had
Sesetengah protokol meminta allowance maksimum uint256 supaya pengguna hanya perlu meluluskan sekali. Banyak pelaksanaan tidak mengurangkan allowance apabila ia ditetapkan kepada nilai maksimum ini, sekali gus menjimatkan gas.
<code>uint256 constant MAX = type(uint256).max;
// if (allowance == MAX) skip decrement</code>Keadaan Perlumbaan approve
Terdapat bahaya yang diketahui: menukar allowance daripada satu nilai bukan sifar kepada nilai bukan sifar yang lain boleh dipintas lebih awal, membolehkan pembelanja menggunakan kedua-duanya. Langkah pencegahan klasik ialah menetapkan allowance kepada 0 terlebih dahulu, kemudian menetapkannya kepada nilai baharu.
<code>// recommended pattern
token.approve(spender, 0);
token.approve(spender, newAmount);</code>increaseAllowance dan decreaseAllowance
Untuk mengelakkan keadaan perlumbaan, sesetengah token menambah fungsi pembantu yang melaraskan allowance berdasarkan nilai semasanya dan bukannya menggantikannya.
<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>Penggunaan Sebenar: DEX
Apabila anda berdagang di DEX, anda terlebih dahulu melakukan approve terhadap kontrak penghala. Penghala itu kemudian memanggil transferFrom untuk menarik token anda ke dalam pertukaran. Tanpa allowance, dagangan tidak boleh berlaku.
Peringatan Keselamatan
Allowance ialah kebenaran yang berterusan. Memberikan allowance tanpa had kepada kontrak berniat jahat atau bermasalah boleh menghabiskan token anda. Semak dan batalkan kelulusan yang tidak digunakan secara berkala.
<code>// revoke by approving zero
token.approve(spender, 0);</code>Semakan Pantas
Uji pemahaman anda tentang allowance.
Rumusan
Anda telah mempelajari mekanisme allowance:
approvemenetapkan allowance[owner][spender]transferFrommenggunakan jumlah dalam allowance dan mengurangkannya- Keadaan perlumbaan approve dikurangkan risikonya dengan menetapkan nilai kepada 0 terlebih dahulu atau menggunakan increaseAllowance/decreaseAllowance
- Allowance menggerakkan DEX dan DeFi - batalkan allowance yang tidak digunakan demi keselamatan
Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 29
- Pelajaran
- 105
Soalan Lazim
Adakah pelajaran “Elaun” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Elaun”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Elaun”?
Pemindahan yang diwakilkan Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Elaun” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?
Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.