마스터링 이더리움 7일차

쌍제이(JJVoiture)·2022년 1월 27일
0
post-custom-banner

8장 스마트 컨트랙트와 바이퍼

기존 이더리움 스마트 컨트랙트의 취약점

  • 자기 파괴 컨트랙트: 아무 주소를 이용하여 삭제시킬 수 있는 스마트 컨트랙트
  • 탐욕 컨트랙트: 이더를 빼올 수 없도록 막아버리는 상태에 도달할 수 있는 컨트랙트
  • 방탕한 컨트랙트: 이더를 아무런 주소로 보낼 수 있게 만든 스마트 컨트랙트

솔리디티 vs 바이퍼

삭제된 기능들

  • modifier
    modifier가 검사만을 수행하는 것뿐 아니라 호출한 함수의 컨텍스트에서 스마트 컨트랙트의 환경에 영향을 줄 수 있다.
  • 클래스 상속
  • inline assembly
    EVM에 직접 접근하여 작업을 수행하게 하는 것.
  • function overload
    동일한 명칭의 함수에서 입력 받을 수 있는 인수 유형이 여러 가지가 될 수 있는 기능인 오버로딩이 삭제됨.
    -함수 형변환
uint32 a = 0x12345678;
uint16 b = uint16(a); //0x5678

형변환 시 상위 비트가 제거되는 문제가 있다.

바이퍼에는 대신 convert라는 함수 존재

바이퍼에 있는 기능들

장식자

  • @private
    컨트랙트 외부에서 함수 접근 불가
  • @public
    공개적으로 볼 수 있고 실행도 가능하다.
  • @constant
    상태 변수를 변경할 수 없다.
  • @payable
    value 전송할 수 있다.

함수와 변수 순서

solidity

pragma solidity^0.4.0;

contract ordering {
	function topFunction()
    external
    returns (bool) {
    	initializeBelowTopFunction  = this.lowerFunction();
        return initializeBelowTopFunction;
    }
    
    bool initializeBelowTopFunction;
    bool lowerFunctionVar;
    
    function lowerFunction()
    external
    returns (bool) {
    	lowerFunctionVar = true;
        return lowerFunctionVar;
    }
}

vyper

theBool:public(bool)

@public
def topFunction() -> bool:
	self.theBool = True
    return self.theBool
    
@public
def lowerFunction():
	assert self.topFunction()

topFunction이 lowerFunction보다 아래 선언되면 실행되지 않는다.

profile
안녕하세요. 중구난방 개발자 쌍제이입니다.
post-custom-banner

0개의 댓글