이더리움 계정은 이더리움으로 트랜잭션을 보낼 수 있는 이더 잔액(ETH)을 보유하고 있는 엔티티입니다. 계정은 사용자가 제어하거나 스마트 계약으로 프로비저닝할 수 있습니다.
계정 유형
이더리움 계정에는 두 가지 유형이 있습니다.
– 외부 계정(EOA): 개인 키를 가진 사람이 관리하는 계정
– 계약 계정(CA): 코드 기반 네트워크에 배포된 스마트 계약 계정
두 계정 모두 다음을 수행할 수 있습니다.
– ETH 및 토큰을 수신, 보유 및 전송합니다.
– 배포된 스마트 계약과 상호 작용할 수 있습니다.
주요 차이점
외부 계정
– 계정 생성에는 비용이 들지 않습니다.
– 거래가 가능합니다.
– 해외계좌간 거래는 ETH/토큰으로만 이체가 가능합니다.
– 계정 활동을 제어하는 공개 키와 개인 키의 암호화된 키 쌍으로 구성됩니다.
계약 계정
– 네트워크 스토리지를 이용하여 컨트랙트를 생성하기 때문에 비용이 발생합니다.
– 트랜잭션은 수신된 트랜잭션에 대한 응답으로만 보낼 수 있습니다.
– 타인의 계정에서 컨트랙트 계정으로의 트랜잭션은 토큰 전송, 신규 컨트랙트 생성 등 다양한 작업을 수행할 수 있는 코드를 실행할 수 있습니다.
– 계약 계정에는 개인 키가 없습니다. 대신 스마트 계약 코드의 논리에 의해 구동됩니다.
계정 필드
Ethereum 계정에는 4개의 필드가 있습니다.
– nonce: 외부 계정에서 보낸 트랜잭션 수 또는 계약 계정에서 생성한 계약 수를 나타내는 카운터입니다. 주어진 nonce의 트랜잭션은 한 계정에서 하나만 수행할 수 있기 때문에 서명된 트랜잭션이 반복적으로 전송되고 재생되는 재생 공격이 방지됩니다.
– balance: 이 주소를 소유한 Wei의 수. wei는 ETH의 액면가이고 1e+18 wei는 1 ETH와 같습니다.
– codeHash: 이 해시 값은 EVM(Ethereum Virtual Machine)의 계정 코드를 가리킵니다. 계약 계정에는 다양한 작업을 위해 프로그래밍된 코드 영역이 있습니다. 이 EVM 코드는 계정이 메시지 호출을 받을 때 실행됩니다. 계정의 다른 필드와 달리 수정할 수 없습니다. 이러한 모든 코드 영역은 나중에 검색할 수 있도록 해시 아래 상태 데이터베이스에 포함됩니다. 이 해시 값을 codeHash라고 합니다. 외부 소유 계정의 경우 codeHash 필드는 빈 문자열의 해시입니다.
– storageRoot: 저장소 해시라고도 합니다. 계정의 메모리 내용을 암호화하는 Merkle-Patrica 트리의 루트 노드의 256비트 해시는 다음의 Keccak 256비트 해시 값에서 매핑된 트리 형태의 256비트 해시 값으로 인코딩됩니다. RLP로 인코딩된 256비트 정수 값에 대한 256비트 -integer 키. 이 트리는 계정 메모리 콘텐츠의 해시 값을 인코딩하며 기본적으로 비어 있습니다.

외부 계정 및 키 쌍
계정은 공개 키와 개인 키의 암호화 쌍으로 구성됩니다. 이 키 쌍은 거래가 실제로 보낸 사람이 서명했음을 증명하고 위조를 방지하는 데 도움이 됩니다. 프라이빗 키를 사용하여 트랜잭션에 서명하기 때문에 계정에 연결된 자금의 소유권이 보장됩니다. 실제로는 암호 화폐를 소유하는 것이 아니라 개인 키를 소유하고 있습니다. 자금은 항상 Ethereum 원장에 있습니다.
이렇게 하면 트랜잭션 발신자를 항상 확인할 수 있으므로 악의적인 사용자가 가짜 트랜잭션을 확산하는 것을 방지할 수 있습니다.
Alice가 자신의 계정에서 Bob의 계정으로 이더를 보내려고 할 때 트랜잭션 요청을 생성하고 확인을 위해 네트워크로 보냅니다. 이더리움의 공개 키 암호화를 사용하면 Alice가 트랜잭션 요청을 시작했음을 증명할 수 있습니다. 암호화 메커니즘이 없으면 악의적인 공격자 Eve가 다음과 같은 요청을 공개적으로 보낼 수 있습니다. 예를 들어 Alice의 계정에서 Eve의 계정으로 5 ETH를 보내면 아무도 그것이 Alice의 것이 아니라는 것을 확인할 수 없습니다.
계정 생성
대부분의 도서관은 계정을 만들려고 할 때 임의의 개인 키를 생성합니다.
개인 키는 64개의 16진수 문자로 구성되며 암호로 암호화할 수 있습니다.
예: ffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f
공개 키는 타원 곡선 디지털 서명 알고리즘을 사용하여 개인 키에서 생성됩니다. 공개 키의 Keccak-256 해시의 마지막 20바이트를 가져오고 앞에 0x를 추가하여 계정의 공개 주소를 얻습니다.
개인 키에서 새 공개 키를 파생시키는 것은 가능하지만 공개 키에서 개인 키를 파생시키는 것은 불가능합니다. 즉, PRIVATE라는 이름에서 알 수 있듯이 개인 키를 안전하게 유지하는 것이 중요합니다.
서명을 인쇄하는 메시지 및 트랜잭션에 서명하려면 개인 키가 필요합니다. 그러면 다른 사람이 메시지의 발신자를 증명하는 서명을 얻어 공개 키를 얻을 수 있습니다. JavaScript 라이브러리를 사용하여 네트워크를 통해 트랜잭션을 보낼 수 있습니다.
계약 계정
계약 계정에는 42개의 16진수 주소가 있습니다.
예: 0x06012c8cf97bead5deae237070f9587f8e7a266d
계약 주소는 일반적으로 계약이 Ethereum 블록체인에 배포될 때 제공됩니다. 주소는 보낸 사람의 주소와 해당 주소에서 보낸 트랜잭션(“nonce”)의 수에서 파생됩니다.
유효성 검사기 키
이더리움에는 이더리움이 작업 증명에서 지분 증명 기반 합의로 전환할 때 도입된 다른 유형의 키가 있습니다. 이는 BLS 키이며 검증자를 식별하는 데 사용됩니다. 이러한 키는 네트워크가 합의에 도달하는 데 필요한 대역폭을 줄이기 위해 효율적으로 집계될 수 있습니다. 이 키 집계가 없으면 유효성 검사기의 최소 베팅이 훨씬 높아집니다.
지갑
계정은 지갑이 아닙니다. 계정은 사용자가 소유한 이더리움 계정의 키 쌍입니다. 지갑은 Ethereum 계정과 상호 작용할 수 있는 인터페이스 또는 응용 프로그램입니다.
https://ethereum.org/en/developers/docs/accounts/

