[이더리움][Ethereum] Smart Contract

근상·2024년 12월 18일

우선 Smart Contract에 대해 알아야 한다.


Smart Contract란?

Smart Contract는 DApp(Decentralized App) 개발자가
개발한 서비스 Logic을 네트워크에 등록하는 것이다.

네트워크에 등록을 하게 되면, Contract Account가 생성된다.
일반 사용자는 Contract를 실행하거나 호출하면 State를 변경하거나 조회한다.

사용자가 변경한 State는 블록체인 상에 등록된 Contract Logic과 State에 따라
위변조 없이 동작함을 보장한다.

Turing complete한 시스템이다. (일반적인 반복문 if문 등 사용)


DApp 개발자가 Smart Contract를 만들어서 이더리움 네트워크에 등록하면,
유저는 그 서비스를 이용한다.

Smart Contract는 기존의 logic에 따라
새로운 상태값을 네트워크 상에서 업데이트 하고,

사용자가 조회를 요청하는 경우에는
이더리움 네트워크에 저장돼있는 이전 상태값을 보여줌.


이해는 됐지만 어디다가 쓰는지 궁금했다.
->대표적으로 토큰, 크라우드 펀딩, 분산형 거래소 등이 있다.


개발 언어

하지만 어떤 언어로 개발을 해야 하나?

  • Solidity - c++기반의 언어,가장 유명함, 객체&상속&라이브러리 등
  • Vyper - python기반, 솔리디티보단 작은 기능
  • Yul&Yul+ - 초보자 어려움, 잘 안 씀
  • FE - python & rust 기반, 아직 베타버전, 많이 안 퍼졌음.

솔리디티로 대부분 개발을 진행하는데
이는 Storage에 저장될 중요한 데이터와 이를 처리하는 함수로 구성돼있다.


Compile Contract

Solidity를 그대로 올리게 되면 컴퓨터는 인식을 할 수 없다.
그래서 컴파일이 필요하다.

그러면 3개의 데이터를 얻을 수 있다.

  • Bytecode - 네트워크 배포에 사용될 코드(컴퓨터 인식 가능)
  • OP_CODE - 가스 계산에 필요한 코드
  • ABI - 로직 제외한 데이터들, Contract와 통신 가능

Contract Deploy

배포는 매우 간단하다.
From에는 본인의 주소를, To에는 00000으로 지정을 한다.

그리고 Input Code란에 받은 Bytecode를 넣고, 네트워크에 전송을 하면
EVM이 Bytecode와 To 주소에 공란임을 보고
데이터가 컨트랙트 생성 요청임을 인지한다.

새로운 컨트랙트 주소를 생성 후 Bytecode를 해시한 값을
Account State 중 codeHash에 넣는다.


Contract 접근

네트워크에 배포된 Contract에 접근하기 위해서 필요한 것은 두 가지다.
Contract Address & ABI다.
이를 통해 DApp상에서 Smart Contract 코드 상의 함수를 호출할 수 있다.


Contract 호출

유저가 Contract를 호출할 때 2가지 방식이 적용된다.

  • 조회 함수를 호출하는 경우(state 변경 없을 때),
    이는 블록체인 상에 기록되지 않는다.
  • 수정 함수를 호출하는 경우(state 변경 있을 때),
    블록체인 상에 호출하는 Tx가 기록된다.

Contract간 호출

Contract간의 호출은 Internal Transaction이기 때문에
블록체인 상에 기록되지 않는다.

Trace_block을 통해 조회가 가능하다.
가장 먼저 호출한 DApp 사용자의 Tx는 블록체인에 기록된다.

컨트랙트 끼리는 delegatecall,static call,all,transfer등의
함수가 이용된다.

Upgradable(Proxy)의 기본이 개념이 된다.


출처)) 자료 및 내용 : 패스트캠퍼스

0개의 댓글