작업 중

작업 중: MainNet에 앞서 이 사이트를 구축하고 있습니다. 세부 내용은 변경될 수 있습니다.

이 사이트는 아직 구축 중입니다

ZooBC는 공개적으로 개발되고 있습니다. 여기서 보시는 내용은 최신이며 정직하지만, 완성된 것은 아닙니다. 최종 입장이 아니라 현재의 상태로 읽어 주세요.

MainNet까지 문구, 구조, 이미지, 수치 등 많은 것이 바뀔 것입니다. 일부 페이지는 임시로 채워 둔 상태입니다.

더 넓은 ZooBC 생태계는 단계적으로 도입됩니다. 지갑, 익스플로러, 커뮤니티 채널은 MainNet이 다가오면서 하나씩 열리며, 이 사이트도 함께 성장합니다.

내용이 잘못되었거나, 깨져 보이거나, 오해의 소지가 있는 부분이 있으면 알려 주세요. 지금의 피드백이 나중의 매끄러운 출시보다 저희에게 더 큰 가치가 있습니다.

ZOOBC / 매뉴얼

ZooBC 트랜잭션 매뉴얼

체인에서 가치와 데이터를 옮기는 모든 방법: 레이아웃, 코인, 모디파이어

가치를 옮기세요. 데이터를 옮기세요. 내 조건대로.

ZooBC 트랜잭션은 유형이 지정된 작은 바디를 감싼 서명된 엔벨로프입니다. 엔벨로프는 모든 유형에서 동일하며, 실제로 무슨 일이 일어날지는 바디와 몇 가지 선택적 모디파이어가 결정합니다: 단순 송금, 토큰 전송, 베스팅되는 급여, 에스크로 거래, 앱의 수, 예약 트리거. 여기에 전체 지도가 있습니다.

01트랜잭션의 구조

모든 내용은 리틀 엔디언으로 하나의 바이트 버퍼에 직렬화된 다음 서명됩니다. 파란색 필드는 엔벨로프(모든 유형 공통)이고, 보라색 바디는 유형마다 달라집니다.

유형 4 버전 1 타임스탬프 8 발신자 4+key 수신자 4+키 / 비어 있음 수수료 8 bodyLen 4 바디 bodyLen 에스크로 비어 있음 / 섹션 msgLen 4 메시지 msgLen 서명 송금 시

계정 주소는 4바이트 유형(LE) + 공개 키로 구성됩니다. ZBC는 00000000+32B ed25519이고, 그 밖에 04000000+ETH, 05000000+BTC 등이 있습니다. 수령인이 없으면 빈 유형(02000000)으로 기록됩니다. 단순 송금의 메모는 끝부분의 메시지에 담기며, SendZBC의 바디는 금액뿐입니다. 수령인과 메모는 엔벨로프에 들어 있습니다.

02서명

계정 유형이 주소 접두사와 서명 방식을 모두 결정합니다. 서명 태그와 제네시스 해시를 앞에 붙인 엔벨로프 전체(서명 필드 제외)에 서명합니다. 세 방식 모두 결정론적이므로 브라우저 지갑과 노드의 결과가 바이트 단위까지 일치합니다.

ZooBC (ed25519) · 유형 00000000

// digest, then sign
digest = SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes)
sig    = ed25519(digest, privkey)   // 64 bytes

Solana, Cardano, Tezos, Polkadot도 같은 방식을 씁니다. ed25519 키는 같고, 주소 접두사와 표시 인코딩만 다릅니다.

Ethereum (secp256k1) · 유형 04000000

// recoverable ECDSA, low-s
digest = keccak256(SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes))
r,s,v  = secp256k1.sign(digest)
sig    = r ‖ s ‖ (v+27)          // 65 bytes

MetaMask가 자체 서명한 RLP를 보낼 수도 있습니다. 노드가 송신자를 복원해 ZBC 이체로 매핑합니다.

Bitcoin (secp256k1) · 유형 05000000

// double-sha over the SHA3 payload
digest = SHA256d(SHA3_256("ZBC-TX" ‖ genesis_hash ‖ txBytes))
sig    = secp256k1.sign(digest)
field  = [len(2)] ‖ compressedPub(33) ‖ sig

수수료 요약

최소 수수료는 크기에 따라 달라집니다: 기본 요율 × 네트워크 수수료 배율에 바이트당 스토리지/기간 요소가 더해집니다. https://zoobc.network/api/v1/blockchain/fee-params에서 실시간으로 읽거나 /estimate-fee로 정확한 트랜잭션 가격을 산정하면 지갑과 노드의 계산이 아토믹 단위까지 일치합니다. 정확한 수수료로 보낸 송금에서 초과 지불된 금액은 환불됩니다.

체인에 묶인 다이제스트(서명 버전 2)

노드 v0.4.0부터는 가장 안쪽 항이 세 방식 모두 같습니다. 노드가 이 다이제스트를 한 번 계산한 뒤, 계정 유형이 선택한 서명 방식에 넘기기 때문입니다.

  • "ZBC-TX" 는 종료 문자가 없는 6바이트 ASCII입니다: 5a 42 43 2d 54 58.
  • genesis_hash 는 서명 대상 체인의 블록 0에 해당하는 원시 32바이트입니다.

GET /api/v1/node/info에서 genesis_hash 값을 읽으세요. 같은 응답에 signing_version: 2 및 signing_tag: "ZBC-TX" 값도 함께 들어 있습니다. 절대 하드코딩하지 마세요. 테스트 네트워크를 다시 시작할 때마다 바뀝니다.

다이제스트에 제네시스 해시를 묶어 넣기 때문에 서명은 정확히 하나의 네트워크에서만 유효하며, 테스트 체인용으로 서명한 트랜잭션을 다른 체인에서 재사용할 수 없습니다. SHA3_256(txBytes) 자체에 서명하는 방식은 서명 버전 1이며, 노드는 다음 메시지와 함께 이를 거부합니다:

Invalid transaction signature: legacy unbound digest (signing v1); this chain requires signing v2

03세 가지 코인

금액은 항상 아토믹 단위입니다(1 ZBC = 100,000,000). 코인마다 달라지는 것은 token_id 필드뿐이며, 이동 방식은 동일합니다.

① 네이티브 ZBC

어디서나 token_id = 0입니다. 가스/수수료 코인이며 블록 보상과 스테이킹에 쓰입니다. SendZBC(유형 1)가 기본 경로입니다.

② 제네시스 / 브리지 토큰

제네시스 시점에 발행된 외부 자산의 래핑 토큰입니다(ZBTC, ZETH, ZSOL 등). 제네시스 설정에서 고정된 token_id가 할당된 일반 컬러드 토큰이며, 프로토콜 수준에서 특별한 점은 없습니다.

③ 사용자 발행 토큰

누구나 IssueToken(유형 10)으로 토큰을 발행할 수 있습니다: 심볼, 공급량, 소수 자릿수, 선택적 ZBC 담보. token_id는 발행 트랜잭션에서 파생됩니다. TransferToken / MintToken / BurnToken도 똑같이 적용됩니다.

바디에 token_id가 있는 곳(전송, 스왑, 앱 스테이크, 리퀴드, 베스팅 등)이라면 ZBC는 0, 컬러드 코인은 해당 토큰의 ID를 넣습니다. 담보 토큰은 ZBC 담보를 기준으로 가격이 매겨져 자기 토큰으로 수수료를 낼 수도 있습니다(fee_in_token 플래그).

04모디파이어: 하나의 결제, 다양한 형태

기본 유형 외에도 네 가지 타이밍/신뢰 래퍼가 자금이 언제 도착하는지, 그리고 실제로 도착하는지를 바꿉니다. 기능 범위가 넓게 느껴지는 것은 바로 이 래퍼 덕분입니다.

에스크로

가치를 옮기는 모든 트랜잭션의 엔벨로프에 에스크로 섹션(승인자 · 커미션 · 타임아웃 · 지시 사항)을 덧붙일 수 있습니다. 지정된 승인자가 ApprovalEscrow(유형 4)에 서명해 지급하거나 거부할 때까지, 또는 타임아웃이 지날 때까지 자금이 보류됩니다. 어떤 이체에든 조건부 거래를 얹을 수 있습니다.

리퀴드

LiquidPayment(유형 6): 일정 기간에 걸친 단일 지연 결제입니다. 기간이 끝나면 수령인이 전액을 받고, 송신자가 중간에 LiquidPaymentStop(유형 262)을 실행하면 비례분만 받습니다. 단기(수 시간)용이며 ZBC 또는 토큰을 사용합니다.

예약 / 베스팅

ScheduledTransfer(유형 29): 타이머에 따라 회차별로 지급합니다. 베스팅(자금 사전 잠금) 또는 정기 급여(매 기간 인출) 방식입니다. 클리프, 철회, 수령인 거절, 재지정을 지원합니다. 장기(수 주–수 년)용입니다. 지급 내역은 새 트랜잭션이 아니라 원장의 이동 내역으로 표시됩니다.

트리거 / 중지

가벼운 타이머: CreateTrigger(15)는 미래의 블록 높이에서 실행되도록 금액을 잠그고, CancelTrigger(16)는 이를 환불합니다. 장기 지급을 멈추려면: CancelSchedule(30) 철회/거절, LiquidPaymentStop (262).

중첩해서 쓸 수 있습니다. 에스크로까지 걸린 월 급여, 컬러드 토큰으로 지급되는 베스팅 보상처럼 기본 요소를 조합할 수 있습니다. (정기 지급과 에스크로의 완전한 조합은 로드맵에 있으며, 구성 요소는 이미 모두 갖춰져 있습니다.)

05데이터 객체 유지하기

데이터를 담는 온체인 객체, 즉 데이터셋(키/값 프로필, 채팅, 비즈니스 양식)과 토큰은 유지되려면 임대료를 내야 합니다. “객체에 자금 추가”란 객체의 존속 자금을 충전한다는 뜻입니다.

데이터셋 및 파일 → 선불 스토리지

데이터는 SetupAccountDataset(유형 3, 속성 → 값 쌍)으로 기록하고, 파일은 DFSCreateFile(8)로 저장합니다. 블록마다 계정의 선불 스토리지에서 스토리지 임대료가 차감되며, 잔액이 바닥나면 객체가 정리됩니다. AddPrepaidStorage(유형 9)로 충전하세요. 바디는 금액뿐이며 선불 스토리지 잔액에 바로 적립됩니다. 선불 잔액이 많을수록 수명이 길어집니다.

토큰 → 존속 자금

컬러드 토큰도 존속하려면 비용을 내야 합니다. FinanceToken(유형 14)은 수수료로 토큰의 존속 기간을 충전해, 사용되지 않은 담보가 생성자에게 반환되기 전까지 토큰이 활성 상태로 유지되는 기간을 늘립니다. 같은 개념을 토큰 단위로 적용한 것입니다.

06전체 트랜잭션 카탈로그

트랜잭션 유형 50개 전체와 각 유형의 정확한 리틀 엔디언 바디 레이아웃입니다. 코인 = token_id 지원 · 수정 가능 = 에스크로 섹션 허용 · 새 체인 = 합의 수준(체인 출시와 함께 제공).

바이트 레이아웃은 ZooBC 노드 직렬화 코드(transaction_util.cpp, 유형별 실행기, 아카이브 디코더)에서 그대로 옮겨 왔습니다. lp4 = 4바이트 길이 접두사 + UTF-8 바이트, addr = 4바이트 유형 + 키이며, 모든 정수는 리틀 엔디언, 금액은 아토믹 단위(ZBC는 ÷1e8)입니다. ZooBC 기반으로 지갑과 도구를 만드는 통합 개발자를 위한 참조 자료입니다.