블록체인

블록체인 공부중이다.

이영훈닷컴 2025. 3. 1. 04:13
728x90

메타마스크 + 가니쉬 연동해서 솔리니티 언어로 코드 작성후 테스트 적용한 코드

 

pragma solidity >=0.4.22 <0.6.0; // Solidity 컴파일러 버전 지정 (0.4.22 이상, 0.6.0 미만 사용)

// ERC-20 기반 간단한 토큰 스마트 컨트랙트
contract MyToken {
    // 사용자 주소와 잔액을 매핑하는 변수 (key: address, value: uint256)
    mapping (address => uint256) public balanceOf;

    /**
     * @dev 컨트랙트 생성자 (Constructor)
     * 초기 발행량을 설정하여 컨트랙트 배포자의 잔액에 할당
     * @param initialSupply 초기 발행량 (uint256 타입)
     */
    constructor (uint256 initialSupply) public {
        // 배포자의 주소(msg.sender)에 초기 발행량 할당
        balanceOf[msg.sender] = initialSupply;
    }

    /**
     * @dev 토큰 전송 함수
     * 한 사용자 주소에서 다른 사용자 주소로 토큰을 전송함
     * @param _to 수신자 주소
     * @param _value 전송할 토큰 양
     * @return 성공 여부 반환 (bool 타입)
     */
    function transfer(address _to, uint256 _value) public returns (bool success) {
        // (1) 전송자가 보유한 잔액이 전송하려는 금액보다 큰지 확인 (잔액 부족 방지)
        require(balanceOf[msg.sender] >= _value, "잔액 부족");
        
        // (2) 오버플로우 방지 (수신자의 잔액에 더했을 때 값이 작아지면 오버플로우 발생 가능성)
        require(balanceOf[_to] + _value >= balanceOf[_to], "오버플로우 발생 가능성");
        
        // (3) 전송자의 잔액 감소
        balanceOf[msg.sender] -= _value;
        
        // (4) 수신자의 잔액 증가
        balanceOf[_to] += _value;
        
        // (5) 전송 성공 여부 반환
        return true;
    }
}
728x90