계정, 주소 및 키
공개/비공개 키 쌍이 주소를 생성하고 계정을 식별하는 방법에 대한 개요를 제공합니다.
Last updated
공개/비공개 키 쌍이 주소를 생성하고 계정을 식별하는 방법에 대한 개요를 제공합니다.
Last updated
계정은 주로 사람 또는 조직의 신원을 나타내며 트랜잭션을 수행하거나 자금을 보유할 수 있는 역할을 합니다. 계정은 주로 사람을 나타내지만 그럴 필요는 없습니다. 계정은 사용자나 다른 개체를 대신하여 작업을 수행하거나 자율적으로 작업을 수행하는 데 사용될 수 있습니다. 또한 한 사람이나 개체는 다른 목적을 위해 여러 계정을 가질 수 있습니다. 예를 들어, Polkadot은 트랜잭션을 수행하는 데 사용되는 계정과 별도로 자금을 보유하는 특수 계정을 가지고 있는 Substrate 기반 블록체인입니다. 계정을 구현하고 사용하는 방법은 블록체인 또는 파라체인 개발자로서 완전히 당신에게 달려 있습니다.
일반적으로, 모든 계정은 소유자가 공개 및 비공개 키 쌍을 소유하고 있습니다. 비공개 키는 암호적으로 안전한 난수로 구성된 순서입니다. 인간이 읽을 수 있도록, 비공개 키는 비밀 시드 구문 또는 니모닉이라고 불리는 난수의 시퀀스를 생성합니다. 비밀 시드 구문은 비공개 키가 손실된 경우 계정에 대한 액세스를 복구하는 데 사용될 수 있습니다.
대부분의 네트워크에서는 계정과 연관된 공개 키가 네트워크에서 해당 계정을 식별하는 방법이며, 일부 형태로는 트랜잭션의 대상 주소로 사용됩니다. 그러나 Substrate 기반 체인은 기본 공개 키를 사용하여 하나 이상의 공개 주소를 유도합니다. Substrate는 공개 키를 직접 사용하는 대신 하나의 계정에 대해 여러 주소와 주소 형식을 생성할 수 있도록 허용합니다.
단일 공개 키에서 여러 주소를 유도함으로써 여러 체인과 상호 작용할 수 있습니다. 이렇게 하면 각 네트워크에 대해 별도의 공개 및 비공개 키 쌍을 생성하지 않아도 됩니다. 기본적으로 계정의 공개 키와 연관된 주소는 Substrate의 SS58 주소 형식을 사용합니다. SS58 주소 형식은 base-58 인코딩의 향상된 버전입니다. SS58 주소 형식의 중요한 특징은 다음과 같습니다:
인코딩된 주소는 58개의 알파벳과 숫자 문자로 구성되어 있어 16진수로 인코딩된 주소보다 짧고 식별 가능합니다.
주소는 문자열에서 서로 구별하기 어려운 문자를 사용하지 않습니다. 예를 들어, 문자 0
, O
, I
, l
은 SS58 주소에서 사용되지 않습니다.
주소는 네트워크별 접두사를 포함할 수 있으므로 동일한 공개 키를 사용하여 다른 체인에 대한 주소를 유도할 수 있습니다.
주소는 동일한 공개 키에서 여러 주소를 생성하기 위해 유도 경로를 사용할 수 있으므로 다른 목적에 다른 주소를 사용할 수 있습니다. 예를 들어, 자금을 분리하거나 특정 유형의 트랜잭션을 실행하기 위해 하위 계정을 생성할 수 있습니다.
주소는 입력 오류를 방지하기 위해 체크섬을 사용하여 검증할 수 있습니다.
단일 공개 키는 서로 다른 Substrate 체인에 대한 주소를 유도하기 위해 여러 체인별 주소를 가질 수 있습니다. 예를 들어, alice
계정의 공개 키 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d
에 따라 다음과 같은 체인별 주소를 확인할 수 있습니다.
체인 주소 유형 | 주소 |
---|---|
각 Substrate 기반 블록체인은 네트워크별 주소 유형을 생성하기 위해 커스텀 접두사를 등록할 수 있습니다. 예를 들어, 모든 Polkadot 주소는 1
로 시작합니다. 모든 Kusama 주소는 대문자로 시작합니다. 등록되지 않은 Substrate 체인은 5
로 시작합니다.
subkey inspect
명령과 --network
명령줄 옵션을 사용하거나 Subscan을 사용하여 공개 키에 대한 네트워크별 주소를 조회할 수 있습니다.
공개 및 비공개 키 쌍을 생성하고 주소를 검사하는 방법에 대한 정보는 subkey를 참조하십시오. 체인별 주소를 등록하는 방법에 대한 정보는 SS58 저장소의 지침을 참조하십시오.
개념적으로, 계정은 하나 이상의 공개 주소를 가진 공개/비공개 키 쌍을 가진 신원을 나타냅니다. 그러나 FRAME으로 구축된 런타임에서는 계정이 32바이트 주소 식별자와 해당 계정의 정보(예: 계정이 수행한 트랜잭션 수, 계정에 의존하는 모듈 수, 계정 잔액 등)를 가진 저장 맵으로 정의됩니다.
계정 속성(예: AccountId
)은 frame_system
모듈에서 일반적으로 정의될 수 있습니다. 일반 유형은 런타임 구현에서 특정 유형으로 해결되고 최종적으로 특정 값이 할당됩니다. 예를 들어, FRAME의 Account
유형은 연관된 AccountId
유형에 의존합니다. AccountId
유형은 이 정보가 필요한 팔렛을 위한 런타임 구현에서 유형이 할당될 때까지 일반 유형으로 유지됩니다.
frame_system
팔렛에서 계정이 어떻게 정의되고 Account
저장 맵에서 계정 속성이 어떻게 정의되는지에 대한 자세한 내용은 계정 데이터 구조를 참조하십시오. 일반 유형과 작업하는 방법에 대한 자세한 내용은 Substrate용 Rust를 참조하십시오.
유연하고 모듈화된 블록체인 개발 프레임워크인 Substrate 자체는 특정 유형의 계정을 정의하거나 사용하도록 요구하지 않습니다. 그러나 다른 체인은 계정 및 해당 계정을 제어하는 키를 사용하는 방법에 대한 다른 규칙을 구현할 수 있습니다. 예를 들어, 다음과 같은 경우 특수화된 계정을 구현할 수 있습니다:
커스텀 암호화 체계
복잡한 또는 다중 사용자 서명 규칙
특정 기능에 대한 제한된 액세스
특정 팔렛에 대한 제한된 액세스
대부분의 경우, 특수화된 계정은 특정 FRAME 팔렛에서 구현됩니다. 이는 Staking 또는 Multisig와 같은 미리 구축된 팔렛이나 커스텀 팔렛에서 이루어질 수 있습니다.
예를 들어, Staking 팔렛은 특정 작업을 수행하기 위해 필요한 계정을 식별하기 위해 원래의 FRAME 시스템 계정을 사용합니다. 이러한 계정 추상화의 구현은 Polkadot 생태계에서 확인할 수 있습니다. 그러나 동일한 프레임워크를 사용하여 다른 계정 규칙이나 계정 유형을 구현할 수 있습니다.
일반적으로, 계정은 하나의 소유자만을 가지고 있으며 해당 소유자는 트랜잭션에 서명하기 위한 비공개 키를 보유합니다. Multisig 팔렛을 사용하면 여러 계정 소유자가 승인해야 하는 트랜잭션을 실행하기 위해 특수화된 계정을 구성할 수 있습니다. 다중 서명 계정은 공개 키는 있지만 비공개 키는 없는 주소입니다. 다중 서명 계정의 공개 주소는 승인된 계정 서명자 목록과 관련된 트랜잭션 요청 블록 번호 및 Extrinsic index 식별자에 기반하여 결정됩니다.
Multisig 팔렛을 사용하면 여러 당사자가 특정 트랜잭션을 실행하는 데 책임을 공유할 수 있습니다. 계정 소유자는 다중 서명 트랜잭션을 승인할 수 있는 계정을 지정하고 런타임으로 호출을 전달하기 위해 필요한 최소 승인 수를 지정할 수 있습니다.
Proxy 팔렛은 FRAME을 사용하여 Substrate 기반 체인에 대해 특수화된 계정을 구성할 수 있는 또 다른 방법을 제공합니다. 프록시 계정을 사용하면 주 계정 소유자가 자신을 대신하여 작업을 수행할 수 있는 하나 이상의 다른 계정을 지정할 수 있습니다. 프록시 계정은 주 계정 자금을 주 계정의 특정 역할에 할당된 계정과 격리시켜 추가적인 보안 계층을 추가하는 데 사용할 수 있습니다.
하나 이상의 프록시 계정을 구성함으로써 계정 소유자는 다음과 같은 작업을 수행할 수 있습니다:
주 계정 소유자가 대신하여 트랜잭션을 제출할 수 있는 최대 프록시 계정 수를 지정합니다.
각 프록시에 대해 트랜잭션이 실행되기까지의 시간 지연을 구성합니다.
각 프록시가 발행할 수 있는 트랜잭션 유형에 대한 제한을 설정합니다.
트랜잭션이 실행되기 전에 프록시에 의해 실행될 것으로 발표되는 트랜잭션을 발표합니다.
프록시에 의해 실행될 것으로 발표된 트랜잭션을 취소하거나 거부합니다.
프라이빗 키가 없고 자체 구성된 프록시를 통해 계정 소유권 없이 작동할 수 있는 익명의 순수 프록시 계정을 생성합니다.
런타임 구현
Proxy 팔렛은 프록시 계정을 구성하기 위한 이러한 프레임워크를 제공하지만, 구현 세부 사항은 런타임 개발자에게 달려 있습니다. 예를 들어, 기본 Proxy 팔렛은 프록시 계정이 프록시 유형에 따라 디스패치할 수 있는 호출을 필터링합니다. 그러나 런타임 구현은 프록시 유형과 각 프록시 유형이 실행할 수 있는 트랜잭션을 정의합니다. Polkadot은 다음과 같은 프록시 유형을 사용하여 프록시 계정의 트랜잭션을 제한할 수 있습니다:
Any
NonTransfer
Governance
Staking
IdentityJudgement
CancelProxy
Auction
프록시 유형의 enum 목록과 프록시 유형을 트랜잭션과 일치시키는 논리는 Polkadot 런타임에서 정의됩니다.
익명 프록시 계정
익명 또는 순수 프록시 계정은 무작위로 생성된 주소와 해당하는 비공개 키가 없는 특수 유형의 프록시 계정입니다. 일반적으로, 이러한 유형의 프록시 계정은 권한을 위임할 계정을 생성하려는 경우에 사용됩니다. 이 계정은 키에 대한 개입 없이 기능 호출을 수행하고 자금을 소모하거나 전송 실행을 대기하는 토큰을 보유할 수 있습니다.
Substrate에서는 계정이 자금을 수신하고 트랜잭션에 서명하며 트랜잭션을 실행하기 위해 공개 키와 비공개 키가 필요합니다. 세 가지 유형의 계정이 있습니다:
엔드 사용자가 블록체인과 상호 작용할 수 있는 사용자 계정입니다.
일부 작업에 대한 스테이킹 및 거버넌스를 위해 일부 작업에 대한 제한을 제공하는 네트워크 계정입니다.
팔렛별 작업을 수행하기 위해 유효한 origins에 의해 실행되는 팔렛 계정입니다.
계정, 주소 및 키와 관련된 작업에 대한 자세한 정보는 다음 리소스를 참조하십시오:
Polkadot (SS58)
15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5
Kusama (SS58)
HNZata7iMYWmk5RvZRTiAsSDhV8366zq2YGb3tLH5Upf74F
일반 Substrate 체인 (SS58)
5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY