[Blockchain 101] Smart Contract
• EOA / Smart Contract 차이점?
구분 | EOA | Smart Contract |
소유 및 관리 주체 | 개인이 소유하며 프라이빗 키를 통해 제어 | 블록체인에 배포된 코드로 특정 주소를 가짐 |
트랜잭션 생성 | 직접 트랜잭션을 생성하고 서명 가능 | 자체적으로 트랜잭션 생성 불가능, 외부 요청에 의해 작동 |
실행 조건 | 사용자의 서명과 가스비 지불로 실행 | 트랜잭션 호출 및 조건 만족 시 실행 가능 |
가스비 지불 주체 | 사용자가 직접 가스비를 지불 | 가스비는 호출한 EOA나 다른 Smart Contract가 부담 |
저장 데이터 | ETH 잔고만 보유 가능 | 상태 변수, ETH, 기타 데이터 저장 가능 |
역할 | 사용자가 블록체인과 상호작용하는 기본 계정 | 특정 로직을 수행하는 프로그램처럼 작동 |
• ERC-20, ERC-721, ERC-1155
- ERC-20
➀ 대체 가능한 토큰 표준
➁ 동일한 값의 토큰이 상호 교환 가능
➂ 토큰 전송, 잔고 확인, 승인 등의 기능 제공
- ERC-721
➀ 대체 불가능한 토큰(NFT) 표준
➁ 각 토큰이 고유하며 식별 가능한 메타데이터 포함
➂ 주로 디지털 자산(ex) 이미지, 게임 아이템) 표현에 사용
- ERC-1155
➀ 멀티 토큰 표준
➁ 대체 가능한 토큰과 대체 불가능한 토큰을 동시에 지원
➂ 단일 Contract에서 여러 토큰 관리 가능
• Read / Write
- Read
➀ Smart Contract에서 데이터를 읽는 작업
➁ 상태 변수 조회 또는 함수 호출(가스비 없음)
➂ ex) 토큰 잔고 확인, 특정 상태 값 조회
- Write
➀ Smart Contract의 상태를 변경하는 작업
➁ 트랜잭션을 통해 실행되며 가스비가 필요
➂ ex) 토큰 전송, 상태 변경, 데이터 추가
• Proxy Pattern
- Proxy Pattern이란?
➀ Smart Contract를 업데이트 가능하도록 설계
➁ 사용자와 상호작용하는 Proxy Contract와 실제 로직이 담긴 Logic Contract로 분리
➂ Proxy Contract는 Logic Contract로 호출을 위임
- 장점
➀ 코드 업그레이드 가능
➁ 기존 데이터 및 주소를 유지하면서 새로운 로직 배포 가능
• Smart Contract는 어떻게 배포하고, 배포되면 이후에 어떻게 실행이 되는가?
- 배포
➀ Solidity로 작성된 코드를 컴파일해 바이트코드 생성
(Solidity : 이더리움 플랫폼에서 Smart Contract를 작성하기 위해 설계된 프로그래밍 언어)
➁ EOA에서 트랜잭션을 생성하여 배포
➂ 배포 후 Smart Contract가 블록체인에 저장됨
- 실행
➀ EOA가 Smart Contract의 함수를 호출하는 트랜잭션 전송
➁ 특정 조건 만족 시 내부적으로 정의된 로직 실행
➂ 실행 결과는 블록체인에 기록되며 불변
• Smart Contract가 스스로 어떤 조건에 의해 실행되는 것이 가능한가?
Smart Contract는 EOA 또는 다른 Smart Contract의 호출에 의해 실행됩니다.
ex) 자동 실행 예시
➀ 타임락(Time Lock) : 특정 시간이 되면 실행
➁ 특정 이벤트 발생 감지
➂ 다른 Contract에서 호출을 통해 트리거
• Smart Contract에 Transaction을 보내려면 어떤 방법들이 있는가?
➀ 웹 인터페이스 사용
- Metamask 등 지갑을 통해 직접 트랜잭션 서명 및 전송
➁ 프로그램 코드 사용
- Web3.js, Ethers.js 등의 라이브러리를 활용해 트랜잭션 생성
➂ CLI 도구 사용
- Truffle, Hardhat을 통해 스크립트 실행
➃ Smart Contract 내부 호출
- 다른 Smart Contract에서 함수 호출을 통해 실행
• Smart Contract에 Transaction을 보내면 어떤 일들이 일어나는가?
➀ 트랜잭션 생성 및 서명
- EOA가 트랜잭션 생성 후 개인 키로 서명
➁ 트랜잭션 전송 및 블록 포함
- 노드로 전송되어 네트워크에서 검증 후 블록에 포함
➂ Contract 실행
- 트랜잭션에 포함된 데이터(함수 호출 및 파라미터)에 따라 로직 실행
- 상태 값 변경 및 이벤트 발생 가능
➃ 결과 저장
- 실행 결과가 블록체인에 기록
- 실패한 경우 트랜잭션은 롤백되며, 가스비 일부 소모