Asas Pembangunan Web3 & DApp · Pelajaran

Elaun

Pemindahan yang diwakilkan

Pelajaran 3 daripada 413 langkah

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:

  • approve menetapkan allowance[owner][spender]
  • transferFrom menggunakan 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
Percuma untuk bermula

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.

Semua pelajaran dalam kursus ini

  1. Piawaian ERC-20
  2. Melaksanakan Token
  3. Elaun
  4. Pencetakan dan Pembakaran
← Kembali ke Asas Pembangunan Web3 & DApp