pragma solidity
: 컴파일러 버전을 정의. (뒤에 버전을 명시)
contract
: contract 선언 (뒤에 명칭을 명시)
접근제한자
public
: 외/내부 ( 배포시 외부에 보인다 )
private
: 내부만 ( 배포하게되면 보이지 않게 된다. 값은 내부에서 쓸 수 있다. )
external
: 외부만 ( 컴파일 전에 애초에 허용되지 않는 작업이라 표시됨 )
internal
: 내부만 ( private와 같으나, internal은 명시적으로 내부적에서만 사용 된다는 의미로 쓴다 )
Type
uint
: integer 형태의 정수형 데이터 타입
address
: 주소데이터 타입
(할당하지 않으면 0x0000000000000000000000000000000000000000 형태를 가질 수 있다 )
constructor
: 생성자
msg.sender
: 솔리디티 자체에 내장된 변수(전역변수)
mapping
: 주소마다 특정 숫자나 인덱스를 지정하고 싶을때 선언하는 타입
event
: 한방향으로만 작동된다.
require
: 조건문 (if 문과 같은 형태)
pragma solidity ^0.8.4; // 컴파일러 버전 / ^는 0.8.4 버전 이상부터 라는 뜻 ( 0.8.4 ~ 0.8.9 까지 )
contract CryptoToken {
// 구현부
// 데이터 타입
uint private tokens = 400; // integer type의 접근제한자 public
address public minter; // 주소데이터를 저장할때 쓰이는 타입
//생성자
constructor() {
minter = msg.sender; // msg.sender 는 솔리디티 자체에 내장된 변수(전역변수)
//위 행위는 계약을 호출하는 사람의 주소를 minter 값에 설정하는 행위.
}
// 매핑. 주소마다 특정 숫자나 인덱스를 지정하고 싶다면 테이블을 사용.
// mapping(key => value)
mapping(address => uint) public balances;
// 이벤트
// 이벤트 보내기 Sent 구현
event Sent(address from, address to, uint amount); // Sent는 from, to, amount 가 필요
// 민팅할 function 만들기
function mint(address receiver, uint amount) public {
require(msg.sender == minter); // require는 참여부를 가린다. (if 문이라고 보면 됨..)
// 배포할때 생성자로 실행된 minter가 msg.sender와 같은지 판단하는 것.
// 배포후, 다른 주소로 mint 호출시 에러가 발생한다.
}
}