ZooBC 위키
ZooBC 기본

계정과 주소

ZooBC에서는 키가 곧 계정입니다. 네이티브 계정은 Ed25519 공개 키로 식별되며, ZBC_로 시작하는 66자의 주소로 적습니다. 주소를 발급하는 곳은 없습니다. 지갑이 사용자의 키에서 주소를 도출하며, 오프라인에서도 그렇게 할 수 있습니다. 모든 주소에는 체크섬이 들어 있으므로, 잘못 입력한 주소는 무엇이든 보내기 전에 거부됩니다.

주소의 모양

네이티브 주소는 접두사 ZBC, 밑줄, 그리고 8자씩 7개 그룹으로 된 56자로 이루어집니다.

ZBC_57J5D5QV_OPO4JILA_RQW2JC77_OOIDM4VM_BHFCLTKB_2DOFOR4L_Z24K7SFR

이 예시는 zoobc.how 퀴즈를 위해 해시에서 만든 것입니다. 아무도 그 키를 가지고 있지 않으므로 절대 이 주소로 코인을 보내지 마십시오.

56자는 35바이트를 base32로 쓴 것입니다. base32는 대문자 A~Z와 숫자 2~7로 된 알파벳입니다. 35바이트는 계정을 식별하는 32바이트와 그 뒤에 붙는 3바이트 체크섬입니다.

32바이트 공개 키에 3바이트 체크섬을 더하면 35바이트가 됩니다. base32(A-Z, 2-7)로 바꾸면 56자가 되고, ZBC_를 붙여 8자씩 묶으면 완성된 주소가 됩니다.
32바이트 공개 키에 3바이트 체크섬을 더하면 35바이트가 됩니다. base32(A-Z, 2-7)로 바꾸면 56자가 되고, ZBC_를 붙여 8자씩 묶으면 완성된 주소가 됩니다.

32바이트가 곧 키입니다

체인 내부에서 계정은 텍스트가 아닙니다. 4바이트 유형 번호와, 그 유형이 길이를 정하는 페이로드로 이루어집니다. 유형 0은 네이티브 ZooBC 계정이며, 그 페이로드는 키의 해시가 아니라 계정의 Ed25519 공개 키 그 자체입니다. 따라서 누구나 주소에서 바로 키를 읽을 수 있습니다. 버전 0.5.8부터 노드의 API는 네이티브 계정에 대해 주소만으로 /api/v1/accounts/<address>/pubkey에 응답합니다.

다른 체인들은 방식이 다르며, ZooBC는 그 체인들의 주소를 쓸 때 그 방식을 따릅니다. Ethereum 계정의 페이로드는 키의 Keccak-256 해시의 마지막 20바이트이고, 고전적인 Bitcoin(P2PKH) 계정의 페이로드는 키의 20바이트 HASH160입니다. ZooBC는 Bitcoin, Ethereum, Solana, Polkadot, Cardano, Ripple, Tron, Tezos의 계정을 받아들이며, 각각 원래 체인이 쓰는 방식으로 적고 원래 체인의 서명 방식으로 검증합니다(키와 계정 유형).

체크섬이 오타를 잡아냅니다

체크섬은 32바이트 페이로드 뒤에 접두사 세 글자를 붙인 것에 대한 SHA3-256의 처음 3바이트입니다. 주소를 해독하는 것은 무엇이든, 즉 지갑, 명령줄 도구, 노드의 API 모두 체크섬을 다시 계산하고 일치하지 않으면 주소를 거부합니다. 무작위 오타가 다른 유효한 주소를 만들어 낼 확률은 2^24번, 즉 1,670만 번의 시도 중 약 한 번뿐입니다. 퀴즈를 위한 확인으로 위 예시 주소에서 한 글자만 바꾼 1,736가지 경우를 모두 시험했으며, 모두 거부되었습니다.

거부는 트랜잭션을 만들기 전에 일어나므로 아무것도 보내지지 않습니다. 합의 자체는 텍스트를 해독하지 않습니다. 트랜잭션은 주소를 바이트로 담으며, 체크섬은 텍스트를 바이트로 바꾸는 도구들이 검사합니다. "가장 가까운 계정"을 찾아 주는 기능은 없으며, 잘못되었지만 유효한 주소로 보낸 코인은 저절로 돌아오지 않습니다.

주소 적기

해독은 유효 문자 규칙을 따릅니다. 모든 밑줄, 하이픈, 공백 문자(줄 바꿈 포함)를 버리고, 남은 것을 대문자로 바꿉니다. 그래서 ZBC_57J5D5QV_…, zbc-57j5d5qv-…, 구분자가 전혀 없는 주소, 이메일에서 두 줄로 나뉜 주소는 모두 같은 32바이트로 해독되며, 그다음 체크섬을 평소처럼 검사합니다. 구분자와 대문자는 사람이 읽고 옮겨 적기 쉽게 하려고 있을 뿐입니다.

접두사

접두사 세 글자는 키가 무엇에 쓰이는지 나타냅니다.

접두사의미
ZBC_계정 (유형 0)
ZNK_노드 키 (노드의 키)
ZBR_릴레이 키 (릴레이)
ZBG_게이트웨이 키 (게이트웨이)
ZBS_데이터셋 객체 (유형 10, 데이터셋)

API는 트랜잭션 id에 대해 ZTX_ 형태도 받아들입니다.

체크섬이 접두사도 포함하므로, 같은 32바이트를 두 접두사로 적으면 접두사 뒤의 처음 51자는 같고 마지막 다섯 자만 다릅니다. 예시 키를 노드 키로 적으면 …_2DOFOR4L_Z24K7SFR 대신 …_2DOFOR4L_Z24FR5JM으로 끝납니다. 끝부분을 다시 계산하지 않고 손으로 접두사만 바꾸면 체크섬이 깨지므로 그런 수정은 잡혀 나옵니다. 노드 자신의 계정은 노드 키의 ZBC_ 형태입니다.

같은 키를 ZBC_와 ZNK_로 적은 모습: 접두사 뒤의 51자(키)는 같고, 체크섬이 접두사를 포함하므로 마지막 다섯 자가 다릅니다.
같은 키를 ZBC_와 ZNK_로 적은 모습: 접두사 뒤의 51자(키)는 같고, 체크섬이 접두사를 포함하므로 마지막 다섯 자가 다릅니다.

키가 없는 주소

어떤 네이티브 주소는 키가 전혀 아닙니다. 대응하는 개인 키가 없으므로 어떤 서명으로도 그 주소에서 지출할 수 없으며, 그 코인은 오직 프로토콜 자체의 규칙에 따라서만 움직입니다.

  • 프로토콜의 풀: 롱제비티 풀 ZBCLONGV, 스토리지 풀 ZBCSTORE, 앱 풀 ZBCAPPS. 각각 ASCII 이름을 0으로 채워 32바이트로 만든 것입니다(풀).
  • 계정 그룹: 그룹을 설립한 트랜잭션의 해시로 이름이 붙습니다(계정 그룹).
  • 다중서명 계정: 임계값과 참여자들의 해시입니다(다중서명).
  • 데이터셋 객체: 그것을 만든 트랜잭션의 해시입니다(데이터셋).

모든 것은 공개됩니다

모든 노드가 전체 상태를 가지고 있으며, 그 API는 계정도, 키도, API 키도 없이 누구에게나 응답합니다. GET /api/v1/accounts/<address>는 잔액을 돌려주며, 그 아래의 경로 /history, /transactions, /movements는 계정이 한 일과 잔액의 모든 변화를 원인과 함께 보여 줍니다. 낸 임대료와 받은 보상도 포함됩니다. 익스플로러는 같은 데이터를 웹 페이지로 보여 줍니다(익스플로러와 아카이브 노드).

체인이 기록하지 않는 것은 사용자가 누구인지입니다. 주소는 이름이 아니라 키이며, 누군가 연결하지 않는 한 체인의 어떤 것도 주소를 사람과 연결하지 않습니다. 따라서 ZooBC에서의 프라이버시는 숨겨진 잔액이 아니라 주소를 어떻게 쓰느냐에서 나옵니다. 행동하려면 키가 필요하지만, 보는 데는 결코 필요하지 않습니다.

ZBC를 보유한 계정은 소액의 임대료를 내며, 잔액으로 임대료를 감당할 수 없는 계정은 정리됩니다(계정 임대료와 정리).

같이 보기