스마트 컨트랙트 코드에 대한 라이센스를 코드 최상단에 주석 형식으로 표기한다.
// SPDX-License-Identifier: MIT
특정 컴파일러의 버전을 표기한다.
pragma solidity ^0.8.7;
상태 변수(State Variables)
상태 변수는 컨트랙트 스토리지에 영구적으로 저장되는 변수이다.
{데이터 타입} {변수명} = {초기화할 값}; // 선언 및 초기화
함수
function 함수이름(파라미터형식1 파라미터1, 파라미터형식2 파라미터2, ...) {...}
함수 접근 수준
view, pure
view
키워드를 사용한다.pure
키워드를 사용한다.payable
payable
키워드를 사용한다.constructor, selfdestructor
constructor
는 생성자 함수로, 컨트랙트의 상태를 초기화 한다.selfdestructor(컨트랙트 생성자의 주소)
함수를 실행하면 컨트랙트르 소멸할 수 있다.특정 함수를 실행하기 전, 요구 조건을 만족하는지 확인하는 유사 함수이다.
modifier onlyOwner {
require(msg.sender == owner);
_;
}
fucntion destroy() public onlyOwner {
selfdestruct(owner);
}
contract
객체를 상속할 수 있다. 상속을 통해 컨트랙트에 기능을 추가하거나 확장할 수 있다.
contract ChildContract is ParentContract {
// ...
}
revert
: 해당 할수를 종료하고 에러를 리턴한다.require
, assert
: 설정한 조건이 참인지 확인하고, 조건이 거짓이면 에러를 리턴한다.function buy(uint amount) public payable {
require(
amount <= msg.value / 2 etherm // 주어진 조건이 참이면 넘어가고, 거짓이면 에러를 리턴
"Not enough Ether provided." // 에러 메시지 지정 가능
);
// 송금 진행
}
열거(enum)는 특정 값들로 집합을 지정하고, 집합에 있는 데이터만을 값으로 가진다.
enum EvalLevel { Apple, Banana, Ice}
EvalLevel kimdo = EvalLevel.Apple // enum형 변수 선언 및 초기화
int16 kimdoValue = int16(kimdo); // kimdo 열거형 값 0을 정수형으로 변환
이벤트는 어떤 결과가 발생했을 때 해당 컨트랙트에서 dApp클라이언트 또는 다른 컨트랙트에 전달한다. 컨트랙트는 event
키워드를 사용해 이벤트를 설정하고, 경우에 따라 emit
키워드를 사용해 이벤트를 실행한다. 이벤트가 실행된 경우에는 트랜잭션에 기록된다.
contract coinTransfer {
// evnet 이벤트명(파라미터유형1 파라미터1, ...);
event Transfer(address from, address to, uint256 value);
function transfer(address to, address amout) {
// ...
// emit 이벤트명(인자1, 인자2, ...)
emit Transfer(msg.sender, to, amount);
{
}