
솔리디티에서 Contract는 객체지향언어의 Class와 유사하다.
contract에는 상태 변수(State Variables), 함수(Functions), 함수제어자(Function Modifiers), 이벤트(Events), 에러(Errors), 구조체(Struct Types), 열거형(Enum Types)이 포함된다.
게다가 다른 contract를 상속할 수도 있다.
라이브러리나 인터페이스라고 불리는 특별한 contract도 있다.
상태 변수(State Variables)는 영구적으로 contract storage에 저장되는 값이다.
함수(Functions)는 실행가능한 코드의 단위다.
함수는 일반적으로 contract 내부에 정의되지만, contract 외부에도 정의될 수 있다.
함수 호출(Function Calls)은 내부, 외부 상관없이 발생할 수 있으며, visibility의 수준이 다르다.
함수는 매개 변수를 받고 변수를 리턴하여 매개 변수와 값을 리턴한다.
함수 제어자(Function Modifiers)는 선언을 통해 함수의 의미를 수정하는데 사용될 수 있다.
즉, 다른 매개 변수와 함께 같은 함수 제어자 이름을 가진 경우 오버로드 할 수 없다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.21 <0.9.0;
contract SimpleAuction {
event HighestBidIncreased(address bidder, uint amount); // Event
function bid() public payable {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
}
}
이벤트는 emit으로 방출될 수 있다.
에러(Errors)를 통해 에러 상황에 대한 설명과 데이터를 정의할 수 있다.
문자열을 통한 설명과 비교했을 때 에러는 훨씬 저렴하고 추가 데이터를 인코딩할 수 있다.
또한 NATSpec을 사용하여 유저에게 에러를 설명할 수 있다.
NATSpec: the Ethereum Natural Language Specification Fromat의 약자로 solidity에서 표준으로 쓰이는 주석 형식이다. NatSpec Format으로 만든 주석은 컴파일러를 통해 따로 JSON파일로 추출할 수 있다.
구조체는 여러 변수를 그룹화할 수 있는 타입이다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract Ballot {
struct Voter { // Struct
uint weight;
bool voted;
address delegate;
uint vote;
}
}
열거형(Enum Types)은 상수 값을 사용해 사용자 정의 유형을 만들수 있다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;
contract Purchase {
enum State { Created, Locked, Inactive } // Enum
}
솔리디티 공식문서를 참고하여 쓴 글입니다.