5-2. git commit & 토큰 발행(mint) 함수

동동주·2025년 10월 10일


1. git commit (변경사항 기록하기)
2. 토큰 발행 (mint)
3. 테스트

* git..이 처음이라 코드에 붙는 설명이 모호~할 수 있음...

1. git commit

git commit에 대해 찾아본 내용 정리(추후첨부)
쓰다보니 길어져서 따로 정리해두었다.

1-1. git 연동 상태 확인

일단 git 상태를 보고 확인할 수 있고..
지금 보면 변동사항이나 연동되지 않은 파일이 보인다.

❯ git status   

On branch master

(요게 !5 부분)
Changes not staged for commit: 
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    contracts/Lock.sol
        deleted:    ignition/modules/Lock.ts
        modified:   package-lock.json
        modified:   package.json
        deleted:    test/Lock.ts


(이건 ?3 부분)
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        contracts/MyToken.sol
        ignition/modules/MyToken.ts
        test/MyToken.ts

no changes added to commit (use "git add" and/or "git commit -a")

1-2. commit

git commit -m "~~" 으로 올릴 때,
메시지를 잘 적어둬야 찾기 용이하다..!!!

변화의 흐름 중에서 각각 다르게 적어줘야 하는 메시지가 있으니
단락별로 끊어서 commit하는 게 필요한 것 같다.

우리는 기본 파일을 지우고(1), mytoken을 만들었으니(2)
2개로 나눠서 올렸다.

1-2-(1). 삭제한 기본 파일

❯ git add contracts/Lock.sol ignition/modules/Lock.ts test/Lock.ts


(생략해서 표기)/hardhat-test master +3 !2 ?3 
❯ git status                                                 ─╯
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    contracts/Lock.sol
        deleted:    ignition/modules/Lock.ts
        deleted:    test/Lock.ts

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   package-lock.json
        modified:   package.json

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        contracts/
        ignition/
        test/



/hardhat-test master +3 !2 ?3 
❯ git commit -m "remove hardhat default solidity files"      ─╯
[master f759f4b] remove hardhat default solidity files
 3 files changed, 181 deletions(-)
 delete mode 100644 contracts/Lock.sol
 delete mode 100644 ignition/modules/Lock.ts
 delete mode 100644 test/Lock.ts


/hardhat-test master !2 ?3 
❯ git log     

git 삭제 commit log

1-2-(2). 새로 만든 mytoken

나머지는 전부 mytoken을 위해 만든 파일이니까
올라가지 않은 파일을 한꺼번에 올리는 add . 을 사용한다.

❯ git add .                                                   


/hardhat-test master +5 
❯ git commit -m "mytoken phase 1 - basic state (contract, uint256, function, mappting, address)"

[master ee850c8] mytoken phase 1 - basic state (contract, uint256, function, mappting, address)
 5 files changed, 149 insertions(+), 9 deletions(-)
 create mode 100644 contracts/MyToken.sol
 create mode 100644 ignition/modules/MyToken.ts
 create mode 100644 test/MyToken.ts

log를 확인해보면 잘 추가된 것을 볼 수 있다.
mytoken add . 결과 log

1-2-(3). 수정이 필요한 경우..

  • 이전 commit을 없애려고 할 때
    ❯ git reset (지우려는 commit의 일부분)
    ex) git reset ee850c8

1-3. github에 올리기

  • 원격으로 바라보고 있는 github 주소 확인
    ❯ git remote -v

  • 지금까지 만든 commit 올리기
    ❯ git push origin master




2. 토큰 발행 (mint)

  • minting, mint
    minting : 화폐를 주조하다
    라는 의미의 단어이고, 토큰으로 발행하는 것을 의미하는 것 같다
    토큰 발행하는 함수를 mint라고 명명한다
    *다만 internal function에는 _(언더바)를 붙여서 구분해준다.
    민팅이란? - 뜻 & 정의

코드2.

// 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;
        _mint(1*10**uint256(decimals), msg.sender); // 1MT
        //uint256이 기본 (32바이트) <- decimals는 uint8타입 (변경필요)
    }

    //블록체인에서는 토큰을 발행할 때 minting, mint라는 단어를 사용함.
    function _mint(uint256 amount, address owner) internal {
        totalSupply += amount;
        balanceOf[owner] += amount; 
        // 가진 사람이 없으면 증발되니까..
    }
 
}
  • msg
    msg --> 현재 함수 호출에 대한 정보를 담고 있다.
    위의 msg.sender는 transaction을 보내는(= constructor를 호출한) 사람의 주소를 가져올 수 있다.
    transaction에 있는 from, to, data, value, gas.. 등의 정보 중에서 sender면 from에 해당하는 것 같다...(?)
    [Solidity] msg 참고..!



3. 테스트

코드3

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 1MT totalSupply", async () => {
    expect(await myTokenC.totalSupply()).equal(1n * 10n ** 18n);
  });

  // 1MT = 1*(10^18) = 1n*10n**18n = BigInt(1*10**18)
  it("should retrun 1MT balance for signer 0", async () => {
    expect(await myTokenC.balanceOf(signers[0].address)).equal(1n * 10n ** 18n);
  });
});

터미널

잘 나왔다

❯ npx hardhat test                                             

  mytoken deploy
    ✔ should return name (56ms)
    ✔ should return symbol (54ms)
    ✔ should return decimals
    ✔ should retrun 1MT totalSupply
    ✔ should retrun 1MT balance for signer 0

  5 passing (2s)

git commit

/hardhat-test master !2 
❯ git add .         

/hardhat-test master +2 
❯ git commit -m "mint function"                               
[master 6ca3c69] mint function
 2 files changed, 16 insertions(+), 9 deletions(-)
profile
배운 내용 정리&기록, 스크랩

0개의 댓글