이전글
컨트랙트 계정
이번 글에서는 스마트 컨트랙트를 위한 계정인 컨트랙트 계정에 대해 알아보겠습니다.
I. 컨트랙트 계정
컨트랙트 계정은 스마트 컨트랙트를 위한 계정으로 EOA와 다르게 개인키가 존재하지 않고, 별도의 생성과정이 필요한 계정입니다. 컨트랙트 계정은 EOA가 가진 잔고와 논스 이외에도 저장소(스토리지)와 코드라는 두 개의 추가적인 계정 상태를 가지고 있습니다.
잔고와 논스는 EOA와 동일한 값입니다.
EVM 코드는 EVM에서 실행할 스마트 컨트랙 코드입니다.
저장소는 데이터를 저장하기 위한 키-값(key-value) 형태의 저장소입니다.
컨트랙트 계정에서 사용하는 EVM 코드와 저장소 데이터는 계정 상태에 직접 저장하지 않습니다. 대신 별도 공간에 EVM 코드와 키-값 데이터를 저장한 뒤 두 값의 해시값을 구한 뒤 이 값을 계정 상태에 저장합니다.
II. 컨트랙트 계정 생성
컨트랙트 계정은 EOA에서 컨트랙트 계정 생성을 위한 트랜잭션을 전송하여 생성할 수 있습니다. 기존 EOA에서 EOA로의 트랜잭션에서 비워두었던 필드인 데이터 필드에 스마트 컨트랙트 코드를 넣고, 수신자 필드를 비워두면, 이 트랜잭션이 바로 컨트랙트 생성을 위한 트랜잭션이 됩니다. 예를 들어 컨트랙트 생성을 위해 다음과 같은 트랜잭션을 구성할 수 있습니다.
- 논스
- 가스 당 이더 가격
- 최대 가스 양
- 수신자 주소 - 스마트 컨트랙트 생성 트랜잭션은 수신자가 없으므로 비워둠
- 전송할 이더의 양 - 이더를 전송하는 트랜잭션이 아니므로 0으로 설정
- 데이터 - 스마트 컨트랙트 코드 (EVM 코드)
- 서명(ECDSA)
해당 트랜잭션이 정상적으로 처리된다면, 작성된 스마트 컨트랙트 코드가 배포되고, EOA나 다른 컨트랙트 계정이 새로운 트랜잭션을 생성하여 접근할 수 있게 됩니다. 컨트랙트 계정에 접근하는 트랜잭션은 다음과 같습니다.
- 논스
- 가스 당 이더 가격
- 최대 가스 양
- 수신자 주소 - 컨트랙트 계정 주소
- 전송할 이더의 양
- 데이터 - 컨트랙트 계정으로 보낼 데이터(ABI)
- 서명(ECDSA)
위 트랜잭션이 이더리움에 전송되면, EVM이 컨트랙트 계정의 EVM 코드를 불러와 실행합니다. 이 과정에서 트랜잭션으로 보낸 데이터와 이더리움에 저장된 계정 정보 등과 소통합니다.
컨트랙트 계정으로 스마트 컨트랙트에서 사용될 데이터를 보낼 때에는 ABI라는 것을 이용합니다. ABI에 대해서는 다음 글에서 알아보겠습니다.
지금까지 컨트랙트 계정에 대해서 간단하게 알아봤습니다. 다음 글에서는 스마트 컨트랙트 코드를 쉽게 작성하기 위해 개발된 고급언어인 솔리디티가 무엇인지 알아보겠습니다.
감사합니다.
'이더리움 > 이더리움과 월드 컴퓨터' 카테고리의 다른 글
[이더리움과 월드 컴퓨터] 3-1. 토큰 (0) | 2023.03.18 |
---|---|
[이더리움과 월드 컴퓨터] 2-5. 솔리디티 (0) | 2023.02.18 |
[이더리움과 월드 컴퓨터] 2-3. EVM (0) | 2023.02.10 |
[이더리움과 월드 컴퓨터] 2-2. EOA (0) | 2023.02.07 |
[이더리움과 월드 컴퓨터] 2-1. 주소 (0) | 2023.02.06 |