이더리움 EVM과 Solidity - 2

Yona·2022년 1월 17일
1

블록체인

목록 보기
13/22
post-thumbnail

이유는 모르겠는데 이전에 썻던 글이 비공개로 전환이 된다..😭😭😭😭

🔨 Solidity

📔 솔리디티 기본 문법

📔 함수

function 함수이름(파라미터 형식1, 파라미터1, ...) {...}
or
function 함수이름(파라미터,...) returns (반환 형식) {...}

함수 접근 수준

  • external : 외부 컨트랙트나 클라이언트 코드에서 호출할 수는 있으나, 컨트랙트 내부에서는 호출 X
  • public(default) : 컨트랙트 내부, 외부 컨트랙트, 클라이언트 코드에서 호출 가능
  • internal : 컨트랙트 멤버와 상속된 컨트랙트에서만 호출 가능
  • private : 컨트랙트 멤버만 호출 가능
contract exmaple {
  function changeName(address account, string newName) internal {...}
  function checkGas(uint256 account) private returns (bool) {...}

view, pure

view 로 표시된 함수는 상태를 변경하지 않는 읽기 전용 함수.
pure 는 스토리지에서 변수를 읽거나 쓰지 않는 함수.

function checkGas(uint256 amount) private pure returns (bool) { ... }
or
function validateAccount(address account) internal view returns (bool) { ... }

payable

payable을 선언하면 함수에서 이더를 받을 수 있다.

function getEther() payable returns (bool) {
  if (msg.value === quoteFee) {
    // ...
  }
}

생성자 함수(constructor)

컨트랙트가 생성될 때, 생성자 함수가 실행되며 컨트랙트의 상태를 초기화 할 수 있다.

address public account;

consturctor(address _account) internal {
  account = _account
}

selfdestruct

컨트랙트 소멸

selfdestruct(컨트랙트 생성자의 주소);

📔 함수 변경자(modifier)

함수 선언에 modifier 를 추가하여 함수를 실행하기 전, 요구 조건을 만족하는지 확인한다.
_; 을 사용하여 함수 변경자를 구분할 수 있다.

int public num = 0;
modifier changeNum {
  num++; // 함수 실행 전 실행
  _; // 함수 실행
  num--; // 함수 실행 후 실행
  
function func() public changeNum {
  if(num == 1) {
    // do something...
  }
}

📔 상속

상속을 사용하려면 부모 컨트랙트에 is 키워드를 지정해준다.

contract Child is Parent {...}
or
contract Child is Parent, Parent2,, {...}

📔 에러 핸들링

  • revert : 해당 함수를 종료하고 에러 리턴
if (amount > msg.value / 2 ether) 
  revert("Not enough Ether provided.");
  • require, assert : 설정한 조건이 참인지 확인하고, 조건이 거짓이면 에러 리턴
    assert는 사용법은 동일하나, 사용하지 않은 가스를 호출자에게 반환하지 않고 공급된 가스를 모두 소모하여 상태를 원래대로 되돌린다.
reuire(
  amount <= msg.value / 2 ether, // 조건이 참이면 패스, 거짓이면 출력
  "Not enough Ether provided."
  );
  
// 송금 진행

📔 열거형

enum EvalLevel {Bad, Soso, Great}

EvalLevel kimcoding = EvalLevel.Bad

int16 kimcodingValue = int16(kimcoding); // kimcoding 열거형 값 0을 정수형으로 변환            

📔 이벤트

event 또는 emit 사용

event Transfer(address from, address to, uint256 value); 

function transfer(address to, address amount) {
  //...
  
  emit Transfer(msg.sender, to, amount);
}

가위바위보 게임 만들어보기

0개의 댓글