1. Mytoken에 총 토큰/개인 토큰 파악 기능 더해보기
2. 테스트 해보기
이전 코드에다가
토큰 총 발행 개수와, 소유자-토큰 개수를 map타입으로 지정.. (?)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
contract MyToken {
string public name;
string public symbol;
uint8 public decimals;
//토큰의 총 발행 개수
uint256 public totalSupply;
//누가 얼마나 가지고 있는지
mapping(address => uint256) public balanceOf;
// (key => value)
constructor(string memory _name, string memory _symbol, uint8 _decimals) {
name = _name;
symbol = _symbol;
decimals = _decimals;
}
// external : 외부 호출만 가능하다 (public이랑 좀 다름)
// returns : 리턴 '타입' 지정. 여러 개 반환 가능해서 -s가 붙음 (<-> return)
+@.
map타입에 대해서는 따로 더 알아볼 예정 (typescript, javascript..등에서 사용) 추후첨부예정
(solidity에서는 mapping이라고 사용)
❯ nvm use v20.11.0
Now using node v20.11.0 (npm v10.2.4)
(터미널 다시 켜서.. 다시 설정해줌...)
❯ npx hardhat compile
Generating typings for: 1 artifacts in dir: typechain-types for target: ethers-v6
Successfully generated 6 typings!
Compiled 1 Solidity file successfully (evm target: paris).
이 때
contract의 public state는 기본으로 getter함수가 만들어진다.
아래 코드는 이미 있는 getter함수니까 (public으로 선언한 것들이기 때문에) 만들어줄 필요가 없지만, 함수 문법을 보는 목적으로 알려주셔서 적어놨다.
만약 주석이 아닌 경우로 이 코드가 있는 경우?
-> Identifier already declared 에러가 난다...(고 하심)
function totalSupply() external view returns (uint256) {
return totalSupply;
}
function balanceOf(address owner) external view returns (uint256) {
return balanceOf[owner];
}
// string을 파라미터로 받거나 return으로 줄 때도 memory가 필요하다~
function name() external view returns (string memory) {
return name;
}
추가한 두 항목에 대한 테스트를 동일한 형식으로 추가해줌.
import hre from "hardhat";
import { expect } from "chai";
import { MyToken } from "../typechain-types";
import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
// hardhat에서 컴파일 할 때 필요한 타입 정의 파일을 여기에 보관함
describe("mytoken deploy", () => {
let myTokenC: MyToken;
let signers: HardhatEthersSigner[];
// before > describe, let myTokenC > myTokenC 사용ok
before("should deploy", async () => {
signers = await hre.ethers.getSigners();
myTokenC = await hre.ethers.deployContract("MyToken", [
"MyToken",
"MT",
18,
]);
});
it("should return name", async () => {
expect(await myTokenC.name()).equal("MyToken");
});
it("should return symbol", async () => {
expect(await myTokenC.symbol()).equal("MT");
});
it("should return decimals", async () => {
expect(await myTokenC.decimals()).equal(18);
});
it("should retrun 0 totalSupply", async () => {
expect(await myTokenC.totalSupply()).equal(0);
});
it("should retrun 0 balance for signer 0", async () => {
expect(await myTokenC.balanceOf(signers[0].address)).equal(0);
// 위의 코드만으로도 충분하지만,
// 이렇게도 작성 가능하다!
const signer0 = signers[0];
expect(await myTokenC.balanceOf(signer0)).equal(0);
});
});
const....? <- 추후첨부예정?
잘나온다
❯ npx hardhat test
mytoken deploy
✔ should return name (61ms)
✔ should return symbol (45ms)
✔ should return decimals
✔ should retrun 0 totalSupply
✔ should retrun 0 balance for signer 0
5 passing (3s)