개요
Klaytn의 계정(account)은 개인의 잔액이나 스마트 컨트랙트에 관한 정보를 포함하는 데이터 구조
Klaytn의 상태(state)는 모든 계정의 상태, 즉 Klaytn의 계정들에 저장된 모든 데이터의 과거와 현재 상태를 의미
- Klaytn 노드에서 트랜잭션이 실행되면, Klaytn의 상태는 모든 노드에서 변경
주소로부터 키 쌍(key pairs) 분리하기
- 클레이튼은 사용자가 자신의 주소와 키 쌍을 선택할 수 있도록 하는 기능을 제공
- 사용자는 원하는 주소를 선택할 수 있고, 다중 키 쌍을 사용하여 보안을 강화할 수 있다.
다중 키 쌍과 역할기반 키
- klaytn 계정은 키쌍과 연결 되는데 이 키 쌍은 변경 될 수 있다.
- 다중 키 쌍을 지원하며 각 키는 다른 목적을 가질 수 있다.
- 주소와 강하게 결합된 단일키를 가진 계정과 호환 할 수 있다.
- 사용자는 자신의 계정에서 노출된 키 쌍을 제거하고 새키 쌍을 만들어 노출된 개인키와 간단히 교체 할 수 있다
Klaytn 계정 유형
외부 소유 계정 (EOAs) 및 스마트 컨트랙트 계정(SCAs)
외부 소유 계정 (EOAs) : 0x1
- 외부 소유 계정에는 논스(nonce) 및 잔고와 같은 정보
- 이 유형의 계정에는 코드 또는 스토리지가 없다
- EOA는 개인키로 제어되며 관련 코드를 가지지 않는다.
- EOA는 키 페어를 사용하여 생성되고, 키 페어를 가진 어떤 사람이든 EOA를 제어 할 수 있다
스마트 컨트랙트 계정 (SCAs) : 0x2
- EOA와 달리 SCA에는 관련 코드가 있으며 해당 코드로 제어
- SCA는 스마트 컨트랙트 배포(deployment) 트랜잭션에 의해 생성
- 일단 배포되면 SCA는 자체적으로 새 트랜잭션을 시작할 수 없으며, EOA 또는 다른 SCA나 다른 계정에 의해 작동되어야 한다.
계정 키
- 계정 키는 계정과 연결된 키 구조를 나타낸다
AccountKeyNil : 빈(empty) 키
- 계정이 AccountKeyNil object를 가지려고 하면 트랜잭션은 실패한다
- 역할기반 키(role-based keys)를 이용하는 TxTypeAccountUpdate 트랜잭션에만 사용된다
AccountKeyLegacy : 0x01
- 해당 키 쌍에서 파생된 주소를 가진 계정에 사용
- 계정이 AccountKeyLegacy를 가지고 있는 경우, 트랜잭션 유효성 검사 절차는 다음과 같다
- 공개키를 ecrecover(txhash, txsig)로부터 얻는다
- 공개키 주소를 얻는다
- 주소는 발신자이다
AccountKeyPublic : 0x02
- 공개키를 하나 가진 계정에 사용된다
- 계정에 AccountKeyPublic 객체가 있는 경우, 트랜잭션 유효성 검사 프로세스는 다음과 같이 수행
- ecrecover(txhash, txsig)로부터 파생된 공개키를 얻는다
- 파생된 공개키가 해당 계정의 공개키와 같은지 확인
AccountKeyFail : 0x03
- 계정에 AccountKeyFail 키가 있으면 트랜잭션 유효성 검증 프로세스는 항상 실패
- 특정 스마트 컨트랙트 계정에서 전송된 트랜잭션이 항상 실패하도록 사용
AccountKeyWeightedMultiSig : 0x04
- threshold와 WeightedPublicKeys가 저장되어 있다.
- WeightedPublicKeys는 공개키와 공개키의 가중치(weight)로 이루어진 리스트
- AccountKeyWeightedMultiSig와 연결된 계정에 대해 유효한 트랜잭션이 되려면, 다음 조건을 만족해야한다
- 서명된 공개키의 가중치 합계가 임계값(threshold)보다 커야한다
- 트랜잭션에 유효하지 않은 서명이 포함되면 안 된다
- 서명된 공개키 개수가 WeightedPublicKey 개수보다 적어야만 한다
AccountKeyRoleBased : 역할기반 키를 의미, 0x05
- RoleTransaction : 기본키. TxTypeAccountUpdate 이외의 트랜잭션은 이 역할의 키로 서명
- RoleAccountUpdate : TxTypeAccountUpdate 트랜잭션은 이 키로 서명되어야 한다. 이 키가 계정에 없으면, RoleTransaction 키를 사용하여 TxTypeAccountUpdate 트랜잭션의 유효성이 검사된다
- RoleFeePayer : 이 계정이 발신자 대신 트랜잭션 수수료를 보내려면 이 키로 트랜잭션에 서명, 이 키가 계정에 없으면 RoleTransaction 키를 사용하여 수수료 위임 트랜잭션의 유효성이 검사
Omissible and Expandable Roles
RoleAccountUpdate 없이는 RoleTransaction 및 RoleFeePayer를 설정할 수 없다
'블록체인 이론 > klaytn' 카테고리의 다른 글
Klaytn 트랜잭션 비용 위임 (0) | 2022.02.15 |
---|---|
Klaytn transactions (0) | 2022.02.15 |
klaytn 합의 메커니즘 (0) | 2022.02.15 |
댓글