명령줄 도구
ZooBC 공개 도구는 누구나 터미널이나 자기 코드에서 체인을 쓸 수 있게 합니다. 도구는 github.com/zoobc/tools에 있으며, ZooBC Foundation이 MIT 라이선스로 배포합니다. 이 라이선스는 누구나 허락을 구하지 않고 상업적이든 아니든 자기 소프트웨어에 도구를 넣을 수 있게 합니다. 도구는 노드가 아닙니다. 다른 어떤 클라이언트와 마찬가지로, 오직 노드나 게이트웨이의 공개 HTTP API를 통해서만 통신합니다.
열 가지 언어, 하나의 동작
같은 도구가 열 가지 프로그래밍 언어로 존재합니다. C++, TypeScript, JavaScript(웹 페이지가 script 태그 하나로 불러오는 의존성 없는 단일 파일), Python, Go, Rust, Kotlin, Swift, PHP, Perl입니다. 각 포팅판은 키와 주소, 트랜잭션 만들기와 서명, 그리고 모든 트랜잭션 유형을 위한 명령 하나인 zbc-cli를 제공합니다. C++, Go, Rust 포팅판은 트랜잭션마다 작은 프로그램 하나씩도 함께 제공합니다. 노드 자체 번들에는 zbc-account-gen, zbc-send, zbc-monitor, zbc-cli 같은 C++ 도구가 들어 있습니다.
열 개의 포팅판을 동일하게 유지하는 것은 하나의 공유 명세와 하나의 골든 테스트 벡터 세트(spec/vectors)입니다. 모든 포팅판이 자동 빌드 검사에서 같은 벡터를 실행하며, 바이트 하나만 달라도 빌드가 실패합니다. 따라서 Perl로 만든 트랜잭션은 Rust로 만든 트랜잭션과 바이트 하나하나까지 같습니다.
zbc-cli의 약속
zbc-cli는 모든 언어에서 똑같이 동작하므로 스크립트가 이에 의존할 수 있습니다.
- 출력: 표준 출력에 JSON 객체 하나, 그리고 0~10의 종료 코드
- 연결할 곳:
--api가 노드나 게이트웨이를 지정합니다. 없으면 도구는ZBC_API환경 변수를 읽고, 그것도 없으면 같은 컴퓨터의 노드인http://localhost:8080을 씁니다. - 타임아웃:
--timeout또는ZBC_TIMEOUT변수. 기본값은 20초입니다. - 키:
ZBC_KEY환경 변수가 키를 제공하므로, 키가 명령줄에 나타나지 않습니다. - 필드:
zbc-cli help <command>가 명령의 정확한 필드를 보여 줍니다.--json-input은 필드를 JSON으로 받고,--verbose는 더 자세한 내용을 출력합니다.
zbc-cli help send-zbc
모든 금액은 원자 단위의 정수입니다(1 ZBC = 100,000,000단위, ZBC 코인과 단위 참조). 1.5, 1e3, 12abc 같은 값은 해석하지 않고 거부합니다.
그 밖에 도구가 하는 일
도구는 오프체인 메시지에 서명하고 검증하기도 합니다. 예를 들어 트랜잭션을 보내지 않고 웹사이트에 자신이 어떤 주소를 통제한다는 것을 증명할 때 씁니다(서명된 메시지와 암호화된 메시지). 다른 모든 ZooBC 서명자와 마찬가지로, 도구는 체인의 제네시스 해시를 포함하는 다이제스트에 트랜잭션을 서명하므로, 한 네트워크를 위해 만든 트랜잭션은 다른 네트워크에서 결코 유효하지 않습니다(체인 결속 서명).
도구가 아닌 것
- 노드가 아닙니다. 노드에는 별도의 저장소와 라이선스가 있습니다.
- 블록을 만들거나 코인을 벌지 않습니다. 블록은 차례로 블록을 만드는 등록 노드에서만 나옵니다(노드 운영).
- 필수가 아닙니다. 웹 페이지는 Ed25519, SHA3-256, 체인의 제네시스 해시만으로 트랜잭션에 서명할 수 있습니다(HTML 페이지 하나로 앱 만들기). 도구는 그 수고를 덜어 줍니다.