이더리움 - 스마트 컨트랙트와 솔리디티

호돌·2021년 3월 3일
0

블록체인

목록 보기
5/11

스마트 컨트랙트란?

스마트 컨트랙트(smart contract)의 정의는 다음과 같습니다.

  • 컴퓨터 프로그램(computer programs):

    스마트 컨트랙트는 단순히 컴퓨터 프로그램입니다.

  • 불변의(immutable):

    스마트 컨트랙트 코드는 일단 배포되면, 변경할 수 없습니다. 스마트 컨트랙트를 수정하기 유해서는 무조건 새로운 인스터스를 배포해야 합니다.

  • 결정론적(deterministic):

    스마트 컨트랙트를 실행한 결과물은 그것을 실행한 모든이에게 동일합니다. 이는 실행을 시작한 트랜잭션의 컨텍스트와 실행 시점에 이더리움 블록체인의 상태가 동일하다는 전제가 있기 때문입니다.

  • EVM 컨텍스트(EVM context):

    스마트 컨트랙트는 매우 제한적인 실행 컨텍스트에서 작동됩니다. 이들은 자신의 상태, 호출한 트랜잭션의 컨텍스트 및 가장 최근 블록의 일부 정보에 접근할 수 있습니다.

  • 탈중앙화된 월드 컴퓨터(decentralized world computer):

    EVM의 모든 인스터스는 동일한 초기 상태에서 작동하고 동일한 최종 상태를 생성하기 때문에 시스템 전체가 단일 월드 컴퓨터로 작동합니다.


스마트 컨트랙트의 생명주기

스미트 컨트랙트는 보통 솔디디티와 같은 고급 언어로 작성됩니다. 컨트랙트를 실행하기 위해서는 EVM에서 실행되는 바이트코드로 컴파일되어야 합니다.

[바이트코드 예시]

컨트랙트가 컴파일되면 고유한 컨트랙트 생성 트랜잭션을 사용하여 이더리움 플랫폼에 배포되면, 이 트랜잭션은 고유한 컨트랙트 생성 주소(0x0)으로 전송됩니다.

컨트랙트는 이더리움 주소로 식별되고, 이 주소는 원래 계정 및 논스의 함수로 컨트랙트 생성 트랜잭션에서 파생됩니다.

컨트랙트의 이더리움 주소는 트랜잭션에서 수신자로 사용되거나 컨트랙트에 자금을 보내거나 컨트랙트 함수를 호출하는 데 사용할 수 있습니다.

💡 컨트랙트는 트랜잭션에 의해 호출된 경우에만 실행되는 것이 중요합니다!

  • 이더리움의 모든 스마트 컨트랙트는 EOA에서 시작된 트랜잭션으로 인해 실행됩니다.

  • 컨트랙트는 다른 컨트랙트를 호출할 수 있고 그 컨트랙트는 또 다른 컨트랙트를 호출할 수 있지만, 이 체인에서 첫 번째 컨트랙트 실행은 항상 EOA로부터 트랜잭션이 호출됩니다.

💡 트랜잭션은 원자성(atomic)의 특징을 지닙니다.

  • 트랜잭션은 모든 실행이 성공적으로 종료된 경우에만 글로벌 상태(컨트랙트, 계정 등)의 모든 변경사항이 기록되고 전체가 실행됩니다.

  • 오류로 인해 실행이 실패하면 모든 영향은 트랜잭션이 실행되지 않은 것처럼 '롤백(rollback)'됩니다.

  • 실패한 트랜잭션은 여전히 시도된 것으로 기록되며, 실행을 위해 가스로 소비된 이더는 원 계정에서 차감되지만, 컨트랙트 또는 계좌 상태에는 영향을 미치지 않는다.

profile
저도 잘 모르는데요?, 내가 몰라서 적는 글

0개의 댓글