Melaksanakan Token ERC-20
Bangunkan dan lancarkan token patuh ERC-20 Anda sendiri, termasuk fungsi pemindahan, kelulusan dan elaun.
Melaksanakan Token ERC-20 ialah pelajaran Kontrak Pintar Rantaian Blok dengan Solidity percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kontrak Pintar Rantaian Blok dengan Solidity, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kontrak Pintar Rantaian Blok dengan Solidity merangkumi sejumlah 4 pelajaran.
Bina Token ERC-20 Anda Sendiri
Selamat datang! Dalam pelajaran ini, anda akan mempelajari cara melaksanakan token anda sendiri yang mematuhi ERC-20. Kita akan membincangkan fungsi dan pemboleh ubah penting yang membentuk piawaian yang digunakan secara meluas ini.
Pada akhir pelajaran, anda akan memahami cara token ini beroperasi pada peringkat asas dalam rantaian blok Ethereum.
Identiti Token: Nama, Simbol, Perpuluhan
Setiap token ERC-20 memerlukan maklumat pengenalan asas: name, symbol dan decimals. Semua ini selalunya merupakan pemboleh ubah keadaan awam.
- name: Nama penuh token anda (contohnya, "MyCoddyToken").
- symbol: Simbol penanda ringkas (contohnya, "MCT").
- decimals: Bilangan tempat perpuluhan yang boleh membahagikan token (biasanya 18, seperti Ether).
Mari mulakan kontrak kita dengan sifat ini:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18; // Common for ERC-20
}Jumlah Bekalan & Pencetakan Awal
Pemboleh ubah totalSupply menjejaki semua token yang wujud. Kita juga memerlukan cara untuk menyimpan baki setiap pengguna, biasanya dengan menggunakan mapping.
constructor ialah fungsi khas yang dijalankan hanya sekali apabila kontrak digunakan. Kita menggunakannya untuk menetapkan totalSupply awal dan memberikan semua token awal kepada alamat penerap.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply; // Total tokens in existence
mapping(address => uint256) private _balances; // User balances
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply; // Mints to deployer
}
}Menyemak Baki: `balanceOf`
Fungsi balanceOf membolehkan sesiapa sahaja menanyakan baki token bagi alamat tertentu. Ia ialah fungsi view, bermakna fungsi ini tidak mengubah keadaan kontrak dan tidak memerlukan gas apabila dipanggil dari luar rantaian.
Kita mendapatkan baki daripada _balances mapping kita.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
}Pemindahan Langsung: `transfer`
Fungsi transfer membolehkan pemegang token menghantar token secara langsung ke alamat lain. Ia ialah fungsi teras piawaian ERC-20.
Sebelum memindahkan token, kita mesti memastikan pengirim mempunyai baki yang mencukupi. Selepas pemindahan, kita menghasilkan peristiwa Transfer, yang penting untuk peneroka rantaian blok dan dApps menjejaki pergerakan token.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
// ERC-20 events
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply); // Minting event
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
}Perbelanjaan Diwakilkan: `approve`
Fungsi approve membolehkan pemegang token (si owner) memberikan alamat lain (si spender) kebenaran untuk membelanjakan sejumlah tokennya bagi pihaknya.
Ini penting untuk berinteraksi dengan aplikasi terpencar (dApps), apabila anda mungkin mahu kontrak pintar menguruskan token anda (contohnya, untuk staking atau perdagangan). Kita menjejaki kelulusan ini dalam _allowances mapping.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances; // New: owner => (spender => amount)
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
}Menyemak Elaun: `allowance`
Fungsi allowance membolehkan anda menyemak jumlah token yang sedang dibenarkan untuk dipindahkan oleh spender daripada baki owner tertentu.
Ini ialah fungsi view, sama seperti balanceOf, dan membantu aplikasi luaran memahami had perbelanjaan yang ditetapkan oleh pengguna.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
}Berbelanja bagi Pihak: `transferFrom`
Fungsi transferFrom digunakan oleh spender (yang telah diluluskan) untuk memindahkan token daripada baki owner kepada recipient.
Fungsi ini memerlukan semakan terhadap baki pengirim dan elaun yang diberikan. Selepas pemindahan berjaya, elaun dikurangkan sebanyak jumlah yang dipindahkan.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public returns (bool) {
require(_balances[sender] >= amount, "Insufficient balance from sender");
require(_allowances[sender][msg.sender] >= amount, "Insufficient allowance");
_allowances[sender][msg.sender] -= amount;
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
return true;
}
}Pelaksanaan ERC-20 Minimum Lengkap
Berikut ialah kontrak token ERC-20 minimum yang lengkap. Walaupun pelaksanaan yang lebih maju (seperti pelaksanaan OpenZeppelin) merangkumi ciri tambahan dan semakan keselamatan, kod ini merangkumi semua fungsi teras yang diperlukan oleh piawaian.
Anda boleh menggunakan kontrak ini pada rangkaian ujian untuk mencipta token berfungsi anda sendiri!
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MyToken {
string public name = "MyCoddyToken";
string public symbol = "MCT";
uint8 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(uint256 initialSupply) {
totalSupply = initialSupply;
_balances[msg.sender] = initialSupply;
emit Transfer(address(0), msg.sender, initialSupply);
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(_balances[msg.sender] >= amount, "Insufficient balance");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public returns (bool) {
require(_balances[sender] >= amount, "Insufficient balance from sender");
require(_allowances[sender][msg.sender] >= amount, "Insufficient allowance");
_allowances[sender][msg.sender] -= amount;
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
return true;
}
}Semakan Fungsi Teras ERC-20
Anda telah mempelajari fungsi penting bagi token ERC-20. Sekarang, mari uji pengetahuan anda!
Imbas Kembali: Token Anda Sendiri
Tahniah! Anda kini telah melaksanakan logik teras bagi token ERC-20. Anda telah mempelajari cara mentakrifkan sifatnya, mengurus jumlah bekalan dan baki individu, serta membolehkan pemindahan token secara langsung dan diwakilkan.
Memahami asas binaan ini penting untuk bekerja dengan mana-mana token pada rantaian blok Ethereum. Seterusnya, anda boleh meneroka cara mengintegrasikan pustaka ERC-20 sedia ada atau menambahkan ciri yang lebih maju!
Pelajari Kontrak Pintar Rantaian Blok dengan Solidity 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
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Melaksanakan Token ERC-20” percuma?
Ya — teks penuh “Melaksanakan Token ERC-20” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Kontrak Pintar Rantaian Blok dengan Solidity, tingkat taraf kepada CoddyKit PRO. Kursus Kontrak Pintar Rantaian Blok dengan Solidity merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Melaksanakan Token ERC-20”?
Bangunkan dan lancarkan token patuh ERC-20 Anda sendiri, termasuk fungsi pemindahan, kelulusan dan elaun. Anda berlatih Kontrak Pintar Rantaian Blok dengan Solidity 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 Kontrak Pintar Rantaian Blok dengan Solidity?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kontrak Pintar Rantaian Blok dengan Solidity 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 2 daripada 4.
Berapa lamakah pelajaran “Melaksanakan Token ERC-20” 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 Kontrak Pintar Rantaian Blok dengan Solidity ini?
Ya. Setiap pelajaran Kontrak Pintar Rantaian Blok dengan Solidity 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
- Piawaian Token Boleh Ganti ERC-20
- Melaksanakan Token ERC-20
- Token Tidak Boleh Ganti ERC-721 (NFT)
- Piawaian Berbilang Token ERC-1155