ZooBC 위키
토큰과 마켓

토큰 발행

어떤 계정이든 IssueToken 트랜잭션 하나로 ZooBC에서 자신만의 토큰을 만들 수 있습니다. 작성할 컨트랙트도, 허락을 구할 사람도 없습니다. 트랜잭션이 유효한지는 체인의 고정된 규칙이 정하며, 블록이 이를 포함하면 토큰이 존재하게 되고 발행자가 전체 공급량을 보유합니다. 그 뒤 토큰의 단위는 TransferToken으로 움직이며, 에스크로, 스트림, 일정, 스왑 제안에 들어갈 수 있고, 소수 8자리라면 마켓의 주문에도 들어갈 수 있습니다.

IssueToken 트랜잭션

IssueToken 양식과 그 필드(심볼, 이름, 소수 자릿수 0~8, 공급량, 선택적인 ZBC 담보, 추가 발행 가능·상환 가능 스위치), 그리고 전체 공급량을 보유한 발행자의 지갑
IssueToken 양식과 그 필드(심볼, 이름, 소수 자릿수 0~8, 공급량, 선택적인 ZBC 담보, 추가 발행 가능·상환 가능 스위치), 그리고 전체 공급량을 보유한 발행자의 지갑

IssueToken(유형 10)은 다음을 명시합니다.

필드규칙
소수 자릿수0~8 (소수 자릿수와 단계 참조)
플래그상환 가능 여부와 추가 발행 방식(아래)
총공급량0보다 크고 토큰 단계의 배수
ZBC 담보0 이상
심볼2~10자(아래)
이름1~64바이트(아래)
생존 결제선택 사항 (토큰 유지비 (지속) 참조)

플래그는 비트입니다. 비트 0은 토큰을 상환 가능하게 합니다. 비트 1과 2는 추가 발행 방식을 정합니다. 0은 고정 공급량, 1은 추가 발행 가능 토큰이며, 2와 3은 거부됩니다. 비트 3인 "unbacked"는 저장되고 보고되지만, 어떤 규칙도 이를 읽지 않습니다. 두 스위치로 무엇을 할 수 있는지는 토큰의 추가 발행과 소각에서 설명합니다.

계정 그룹의 구성원이 발행한 토큰은 그룹에 속합니다.

담보

담보는 발행자가 토큰에 넣는 실제 ZBC입니다. 담보는 발행자의 잔액에서 빠져나가 어느 누구의 계정도 아닌 토큰 자체가 보관합니다. 발행자가 보유하지 않은 담보는 노드가 거부합니다. ZBC가 다시 나오는 길은 세 가지뿐입니다.

  • 상환 가능 토큰의 단위를 소각한 보유자에게
  • 토큰으로 수수료를 낼 때 풀려나는 ZBC로(아래)
  • 토큰이 만료될 때 보유자들에게(토큰 유지비 (지속) 참조)

토큰 id

사용자 토큰의 id는 IssueToken 트랜잭션 해시의 처음 8바이트를 리틀엔디언 부호 있는 64비트 정수로 읽은 값입니다(그 값이 0이면 1). 따라서 발행 트랜잭션 자체의 id와 같습니다(트랜잭션 서명 참조). id는 트랜잭션에 서명하는 즉시 알 수 있으며, 노드들이 카운터에 합의할 필요가 전혀 없습니다. API는 id를 부호 있는 10진수 문자열로 출력하므로 id가 음수일 수도 있습니다.

심볼은 고유하지 않습니다. 살아 있는 두 토큰이 같은 심볼을 쓸 수 있으며, 누구나 예약되지도 차단되지도 않은 심볼을 복사할 수 있습니다. 지갑과 앱은 심볼만이 아니라 id를 보여 주고 확인해야 합니다(체인 데이터는 신뢰할 수 없는 입력이다 참조).

심볼과 이름 규칙

심볼은 2~10자이며, 각 글자는 A~Z의 대문자나 0~9의 숫자입니다. 따라서 소문자와, 다른 문자 체계의 비슷하게 생긴 글자는 쓸 수 없습니다. 두 규칙이 더 있어 잘 알려진 이름을 보호합니다.

  • 예약: Z로 시작하거나 끝나는 4~5자 심볼(예: ZBTC, BTCZ)은 브리지 이름 공간에 속합니다. ZABCDE 같은 6자 심볼은 허용됩니다.
  • 차단: 누구도 사칭할 수 없는 잘 알려진 티커 78개의 내장 목록입니다. 통화 17개(USD, EUR, CNY, JPY 등), 스테이블코인 18개(USDT, USDC, DAI 등), 주요 코인 43개(BTC, ETH, BNB, SOL, XRP, ADA, DOGE 등)입니다.
검사한 심볼 다섯 개: GOLD25와 ZABCDE는 허용, ZGLD는 Z로 시작하는 4자라서 예약, USDT는 잘 알려진 자산이라서 차단, gold는 소문자라서 거부
검사한 심볼 다섯 개: GOLD25와 ZABCDE는 허용, ZGLD는 Z로 시작하는 4자라서 예약, USDT는 잘 알려진 자산이라서 차단, gold는 소문자라서 거부

이름은 유효한 UTF-8로 된 1~64바이트입니다. 문자 <, >, ", '와 백틱을 포함할 수 없고, 제어 문자, 폭이 0인 문자, 방향을 바꾸는 문자, 일반 공백 외의 공백을 포함할 수 없으며, 공백으로 시작하거나 끝날 수 없습니다.

단위 옮기기: TransferToken

TransferToken(유형 11)은 토큰 id, 단계의 배수인 금액, 수신자, 토큰으로 수수료를 낼지 여부를 나타내는 선택적 플래그, 선택적인 생존 결제를 담습니다. 토큰 id 0은 거부됩니다. ZBC는 토큰이 아니며 SendZBC로 움직입니다. 송신자가 보유한 것보다 많은 단위를 보내는 전송은 수수료를 내는 무동작입니다. 수수료를 내고 아무것도 옮기지 않습니다.

토큰 전송도 에스크로하거나(에스크로 참조. 이때 수수료는 ZBC로 냅니다), 스트리밍하거나(리퀴드 페이먼트 (스트림) 참조), 예약할 수 있습니다(예약 이체 참조). 버전 0.5.8부터는 하나의 트랜잭션이 어떤 토큰이든 최대 32건의 토큰 전송을 배치로 담을 수 있습니다. 전부 아니면 전무로 처리되며, 전송 한 건씩의 수수료를 합한 금액을 ZBC로 내고, 메시지 요금은 한 번만 냅니다(블록당 계정당 트랜잭션 하나, 그리고 배치 참조).

토큰으로 수수료 내기

ZBC 담보가 있는 토큰은 자기 전송의 수수료를 스스로 낼 수 있습니다(플래그 바이트 1). 토큰은 하한을 감당할 만큼 담보에서 ZBC를 풀어 주고, 그에 해당하는 단위를 내놓습니다.

units given up = ceil( released ZBC × supply ÷ backing ), rounded up to the step

공급량과 담보가 함께 줄어듭니다. 선언한 수수료가 하한보다 높으면 초과 지불분은 토큰에 남습니다.

같이 보기