Kodingan contracts/Token.sol sebelumnya
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "hardhat/console.sol";
contract Token {
// deklarasikan variabel
string public name;
string public symbol;
// decimals
uint256 public decimals = 18;
// total suply
uint256 public totalSupply;
constructor(string memory _name, string memory _symbol, uint256 _totalSupply) {
name = _name;
symbol = _symbol;
totalSupply = _totalSupply * (10 ** decimals);
}
}
kodingan test/Token.js sebelumnya
const { ethers } = require("hardhat");
const { expect } = require("chai");
const tokens = (n) => {
return ethers.utils.parseUnits(n.toString(), "ether")
}
describe("Token", () => {
let token
beforeEach(async() => {
// fetch token from blockchain
const Token = await ethers.getContractFactory("Token")
token = await Token.deploy("Dallan", "DLN", "1000000")
})
describe("Deployment", () => {
const name = "Dallan"
const symbol = "DLN"
const decimals = "18"
const totalSupply = tokens("1000000")
it("has a name", async() => {
// check token name is correct
expect(await token.name()).to.equal(name)
})
it("has correct symbol", async() => {
// check token symbol is correct
expect(await token.symbol()).to.equal(symbol)
})
it("has correct decimals", async() => {
// check token decimals is correct
expect(await token.decimals()).to.equal(decimals)
})
it("has correct total supply", async() => {
// check token total suply is correct
expect(await token.totalSupply()).to.equal(totalSupply)
})
})
})
mapping(address => uint256) public balanceOf;
Ini adalah baris kode Solidity yang mendeklarasikan sebuah "mapping" bernama "balanceOf". Mapping adalah tipe data di Solidity yang digunakan untuk menyimpan koleksi data dengan kunci yang berbeda-beda. Dalam kode ini, mapping "balanceOf" digunakan untuk menyimpan saldo dari semua alamat Ethereum yang digunakan untuk menyimpan token.
Mapping ini dideklarasikan sebagai "public" sehingga ia dapat diakses oleh semua orang. Key dari mapping ini adalah tipe data "address" yang merupakan alamat Ethereum dan value nya adalah "uint256" yang merupakan jumlah token yang dimiliki oleh alamat tersebut.
Dalam hal ini, mapping "balanceOf" digunakan untuk menyimpan saldo token untuk setiap alamat Ethereum yang digunakan untuk menyimpan token, sehingga setiap alamat dapat mengecek saldo token mereka dengan mudah.
Penjelasan tambahan.
"mapping(address => uint256) public balanceOf" adalah baris kode Solidity yang digunakan untuk mendeklarasikan sebuah mapping bernama "balanceOf".
Mapping adalah tipe data yang digunakan dalam Solidity untuk menyimpan koleksi data dengan kunci yang berbeda-beda. Dalam hal ini, kunci dari mapping ini adalah tipe data "address" yang merupakan alamat Ethereum, dan nilai dari mapping ini adalah "uint256" yang merupakan jumlah token yang dimiliki oleh alamat tersebut.
Deklarasi "public" pada baris kode ini berarti bahwa mapping ini dapat diakses oleh semua orang, baik dari dalam kontrak atau dari luar kontrak. Ini berarti bahwa semua orang dapat mengecek saldo token pada sebuah alamat Ethereum dengan mudah, tanpa harus memanggil fungsi kontrak yang spesifik.
Secara umum, mapping ini digunakan untuk menyimpan saldo token untuk setiap alamat Ethereum yang digunakan untuk menyimpan token. Hal ini memungkinkan kontrak untuk melakukan perhitungan yang diperlukan untuk mentransfer token dari satu alamat ke alamat lain.
balanceOf[msg.sender] = totalSupply;
Kode "balanceOf[msg.sender] = totalSupply;" yang ditulis di dalam fungsi constructor setelah deklarasi mapping "balanceOf", digunakan untuk mengatur saldo awal dari alamat pengirim saat kontrak di-deploy.
"msg.sender" adalah built-in variable dalam Solidity yang menyimpan alamat dari pengirim yang melakukan transaksi saat ini, yang digunakan untuk menentukan alamat yang akan diatur saldo awalnya. "totalSupply" adalah variabel yang diisi dari constructor yang di passing saat kontrak di deploy.
Pada baris ini, saldo dari "msg.sender" ditentukan sama dengan totalSupply token yang tersedia. Ini berarti bahwa saat kontrak di-deploy, pengirim akan menerima saldo awal sejumlah totalSupply token yang disediakan.
Secara keseluruhan, ini digunakan untuk menentukan saldo awal token untuk pemilik kontrak, saat kontrak di-deploy ke blockchain. Ini akan memberikan saldo awal pada pemilik kontrak yang dapat digunakan untuk mentransfer token kepada pemegang lainnya.
let deployer
accounts = await ethers.getSigners() deployer = accounts[0]
it("assign total supply to deployer", async() => {
expect(await token.balanceOf(deployer.address)).to.equal(totalSupply)
})

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
import "hardhat/console.sol";
contract Token {
// deklarasikan variabel
string public name;
string public symbol;
// decimals
uint256 public decimals = 18;
// total suply
uint256 public totalSupply;
// track blanaces
mapping(address => uint256) public balanceOf;
// send tokens
constructor(string memory _name, string memory _symbol, uint256 _totalSupply) {
name = _name;
symbol = _symbol;
totalSupply = _totalSupply * (10 ** decimals);
balanceOf[msg.sender] = totalSupply;
}
}
const { ethers } = require("hardhat");
const { expect } = require("chai");
const tokens = (n) => {
return ethers.utils.parseUnits(n.toString(), "ether")
}
describe("Token", () => {
let token
let deployer
beforeEach(async() => {
// fetch token from blockchain
const Token = await ethers.getContractFactory("Token")
token = await Token.deploy("Dallan", "DLN", "1000000")
accounts = await ethers.getSigners()
deployer = accounts[0]
})
describe("Deployment", () => {
const name = "Dallan"
const symbol = "DLN"
const decimals = "18"
const totalSupply = tokens("1000000")
it("has a name", async() => {
// check token name is correct
expect(await token.name()).to.equal(name)
})
it("has correct symbol", async() => {
// check token symbol is correct
expect(await token.symbol()).to.equal(symbol)
})
it("has correct decimals", async() => {
// check token decimals is correct
expect(await token.decimals()).to.equal(decimals)
})
it("has correct total supply", async() => {
// check token total suply is correct
expect(await token.totalSupply()).to.equal(totalSupply)
})
it("assign total supply to deployer", async() => {
expect(await token.balanceOf(deployer.address)).to.equal(totalSupply)
})
})
})
