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
'블록체인' 카테고리의 다른 글
블록체인 개발을 위한 웹3 리소스 & 테스트넷 Faucet 모음 (1) | 2025.03.05 |
---|---|
블록체인 DApp 개발 어떤 언어를 선택해야 할까? (0) | 2025.03.03 |
블록체인 이더리움 공부를 위한 스마트 계약 테스트 환경 구축 링크 모음 (0) | 2025.03.01 |
ERC20 각 라인마다 코드 이해하기 (0) | 2025.03.01 |
HLS over IPFS 비디오 플레이어 (0) | 2025.02.15 |