Rand Protocol
문서
레퍼런스

명령줄

rand-node와 rand의 모든 명령을 인수와 기본값과 함께 설명합니다. 노드 및 운영자 바이너리, shielded 지갑, 위임 prover를 다룹니다.

cargo build --release를 실행하면 세 개의 바이너리가 생성됩니다. rand-node(노드와 운영자 명령), rand(차폐 지갑), rand-prover(위임 prover)입니다. 모든 명령은 -h/--help를 받습니다. 이 페이지는 chain 20이 실행하는 빌드인 v0.6.8 릴리스(c9c9bd3c)를 설명하며, v0.6.7에서 동작이 달랐던 곳은 그렇게 명시합니다. v0.6.8보다 오래된 rand 지갑은 chain 20에서 전송할 수 없습니다. chain 20의 제네시스가 모든 증명과 서명 메시지를 그 해시에 묶기 때문입니다. 앞의 두 바이너리는 서로 다른 종류의 키를 보유합니다. 노드 키는 블록에 서명하는 Dilithium2 키 쌍이고, 지갑 키는 체인에서 아무것에도 서명하지 않는 차폐 지출 키입니다.

rand-node

rand-node <COMMAND>
  keygen      Generate a new Dilithium2 key file (refuses to overwrite an existing one)
  address     Print the address, public key, and libp2p peer id of a key file
  genesis     Write a genesis.json: every validator key is staked, each --alloc becomes a deposit note
  alloc-note  Print one genesis alloc note as JSON, RAND or a listed token, for splicing into a genesis
  init        Initialise a data directory from a genesis file
  run         Run the node
  verify      Verify the chain in a data directory without running the node
  db          Database maintenance on a stopped node's data directory
  safety      status | clear-halt | release-lock: a stopped validator's consensus safety state
  status      Show node status
  register    Print this node's Registration, for the wallet that bonds it in
  admit       sign | submit: the validator set's vote to admit a new key (admission by vote)
  unbond      Move bonded stake into unbonding
  withdraw    Pay released stake and rewards into a note at the payout address
  bridge-gov  rotate-pq | rotate-pause | cancel-rotation: the bridge's post-quantum rotations
  vesting     status | claim | revoke | bond | unbond: genesis vesting (chains with a vesting section)
  aggregator  register | unbond | withdraw — the aggregator role (aggregation chains only)
  aggregate   The aggregate daemon (aggregation chains only)

safety, admit, bridge-gov는 v0.6.8에서 새로 추가되었습니다. balance와 transfer는 없습니다. 전송에는 차폐 지출 키가 필요한데, 그 키는 지갑만 보유하기 때문입니다.

전역 플래그 --allow-test-fri-profile(또는 RAND_ALLOW_TEST_FRI_PROFILE=1) 하나가 init, run, verify가 fri_profile이 test인 제네시스를 받아들이도록 합니다. 이 프로파일은 건전성이 약 17비트이고 제네시스 파일을 작성하는 사람은 누구나 이를 지정할 수 있으므로, v0.6.8부터 노드는 이 플래그 없이는 그런 제네시스를 거부합니다. 테스트 스위트는 이 플래그를 설정하지만, 그 밖에는 어디에서도 설정해서는 안 됩니다.

keygen, address

명령인자기본값
keygen--out <OUT>node.key.json
address--key <KEY>필수

keygen은 { "seed": <32-byte hex>, "address": <base58>, "public_key": <hex> }를 모드 0600으로 기록합니다. 이 파일이 시드의 유일한 사본입니다. v0.6.8부터 keygen은 이미 존재하는 --out을 거부하고(… already exists or cannot be created; refusing to overwrite a key file) 그 파일을 그대로 둡니다. --force는 없으므로, 교체하려면 기존 파일을 먼저 옮겨 두어야 합니다. v0.6.7 이하는 묻지 않고 덮어썼습니다. address는 address, public_key(1,312바이트 hex), peer_id를 출력합니다.

genesis

인자기본값의미
--chain-id <CHAIN_ID>1체인 id. 트랜잭션과 gossip 토픽이 여기에 묶입니다
--validator <KEY,STAKE,PAYOUT>필수, 반복 가능레지스터 항목 하나: 키 파일 경로 또는 hex 공개 키, RAND 단위의 스테이크(최소 1,000), rand1… 지급 주소
--epoch-blocks <N>1000에폭당 블록 수
--alloc <ALLOCS>없음, 반복 가능입금 노트: rand1<address>=<amount in RAND>
--out <OUT>genesis.json출력 경로
--faucet꺼짐testnet 전용: Mint를 활성화합니다. bridge 섹션과 함께 쓰려면 --testnet이 필요합니다
--testnet꺼짐v0.6.8: "testnet": true를 기록합니다. 이 표식이 있어야 faucet이 bridge 섹션과 함께 존재할 수 있습니다. 지정하면 제네시스 해시에 포함됩니다
--no-confidential꺼짐Deploy와 Call을 비활성화합니다
--fri-profile <production|test>productiontest는 안전하지 않으며 테스트 스위트용입니다. init, run, verify는 --allow-test-fri-profile 없이는 이런 파일을 거부합니다
--max-program-words <N>없음(4096)배포가 담을 수 있는 가장 큰 프로그램, 1..=65535. 지정했을 때만 기록되며, 존재하면 항상 제네시스 해시에 포함됩니다. 따라서 --max-program-words 4096은 이 플래그를 생략한 것과 다른 체인입니다. 이런 파일에 init을 실행하기 전에 모든 노드에 v0.4 바이너리가 필요합니다
--max-proof-bytes <N>없음(2,097,152)트랜잭션이 담을 수 있는 가장 큰 증명, 1048576..=33554432. 모든 증명 상한이 이 값을 따릅니다
--max-block-bytes <N>없음(4,194,304)가장 큰 블록, 따라서 가장 큰 트랜잭션, 4194304..=67108864이며 2 × max_proof_bytes + 1 MiB 이상이어야 합니다. 호출이 증명 세 개(bundle, auth, call)를 담는 --auth-guest에서는 3 × max_proof_bytes + 1 MiB 이상이어야 합니다
--max-call-envelope-bytes <N>없음(18,432)가장 큰 호출 입력 envelope, 18432..=1048576
--max-program-public-words <N>없음(0)배포가 고정할 수 있는 가장 큰 공개 입력, 0..=65535. 0이면 공개 입력을 허용하지 않습니다
--tokens <TOKENS.JSON>없음RPL tokens 섹션을 JSON 파일 {"registration_fee": …, "mint_cap_per_day": …, "tokens": [...]}로 지정합니다. 생략하면 파일에 이 섹션이 없고 이전과 같이 해시됩니다. bridge 섹션에는 0이 아닌 mint_cap_per_day(담보별, UTC 하루 기준, 토큰의 소수점 8자리 단위)를 가진 이 파일이 필요하고, 목록에 오른 토큰에는 bridge 섹션이 필요합니다
--envelope-bytes <N>없음(기존의 1,348바이트 envelope)모든 노트 envelope의 정확한 크기: bundle 출력, faucet mint, withdraw, bridge 입금, 제네시스 alloc. 모든 envelope가 암호화된 메모를 담을 수 있게 하는 크기인 1860만 허용됩니다. 지정하면 제네시스 해시에 포함되며, 이 명령의 --alloc 노트가 봉인되기 전에 설정됩니다
--vesting <VESTING.JSON>없음vesting 섹션: 시간 잠금 할당, {"entries": [{"id", "class", "beneficiary", "amount", "start_ms", "cliff_ms", "linear_ms", "step_ms"?, …}]}. v0.6.8부터 회수 가능한 항목은 revokers(키 1~5개), threshold, 회수 시 지급받는 treasury를 명시해야 하며, 하나라도 빠진 파일은 거부됩니다
--staking <STAKING.JSON>없음v0.6.8: staking 섹션을 JSON 파일(faucet_budget_per_epoch, bond_activation_epochs, max_weight_bps, max_stake_entry_per_epoch 또는 max_stake_entry_bps_per_epoch, registration_v2, faucet_recipients, faucet_minters, admission_by_vote, slashing)으로 지정하며, 빌드가 이를 검증합니다
--consensus-domain <0|1>없음(0)v0.6.8: 1은 모든 vote, new-view, proposal을 이 제네시스에 묶습니다
--bundle-guest <v1|v2|v3>v1hc_bundle로 고정되는 bundle guest: v1(chain 14와 15가 실행한 숨김 자산 guest), v2(chain 16의 분기 없는 guest), v3(분리된 인가: guest가 지출 키 대신 nk와 salt를 받습니다). v3에는 --auth-guest가 필요합니다
--auth-guest꺼짐이 빌드의 auth guest를 hc_auth로 고정합니다. 그러면 모든 bundle이 지출 키에 대한 auth 증명을 담으며, 이 증명은 해당 트랜잭션에 묶이고 출력이 bundle의 auth_commit과 같습니다. --bundle-guest v3에는 필수이고 v1 또는 v2와는 함께 쓸 수 없으며, 어떤 파일도 기록되기 전에 거부됩니다. 지정하지 않으면 파일에 hc_auth 필드가 없습니다
--hardening-v6꺼짐v0.6 규칙을 유효성 규칙(hardening_v6)으로 승격합니다: pc 윈도, 호출 불가능한 deploy, 정규 증명 형태와 proof-of-work 워드, 호출 바인딩, 프로그램 테이블 하한. 지정하지 않으면 노드는 이를 여전히 풀 단계에서 정책으로 거부합니다
--gas-price <UNITS>없음(gas 섹션 없음)체인이 호출에 직접 부과하는 gas당 단위(10⁻⁹ RAND). 이 플래그가 gas 섹션(metering: "circuit")을 기록하며, 아래 세 플래그는 이 플래그 없이는 거부됩니다. 제네시스 해시에 포함됩니다
--byte-price <UNITS>800, --gas-price와 함께일 때만호출 증명과 입력 envelope의 KiB당(또는 그 일부당) 단위, 바이트 0부터 계산합니다
--bundle-gas-limit <N>20479, --gas-price와 함께일 때만모든 bundle 증명이 선언해야 하는 정확한 GAS_LIMIT. 다른 값을 선언한 bundle 증명은 거부됩니다. 제네시스는 tier-14 bundle guest의 gas_max(14, 0, 0)인 20479만 허용합니다
--gas-dynamic <TARGET_BYTES,TARGET_GAS,ADJUST_BPS>없음(고정 가격)블록별 가격 컨트롤러를 켭니다. 하한은 섹션 자체의 시작 gas_price와 byte_price입니다. --aggregation과 함께 쓸 수 없습니다
--max-gas-price <UNITS>, --max-byte-price <UNITS>없음(상한 없음)v0.6.8: 컨트롤러가 가격을 그 이상으로 올리지 않는 상한이며, 각각 시작 가격 이상이어야 합니다. --gas-dynamic 없이는 거부됩니다
--gas-byte-load paying없음(모든 트랜잭션의 바이트)v0.6.8: 호출의 증명과 입력 envelope만 byte_price를 움직이므로, 전송으로 이루어진 블록은 이를 움직이지 않습니다. --gas-dynamic 없이는 거부되며, 허용되는 값은 paying뿐입니다
--binding-domain <0|1>없음(필드 없음)v0.6.8: 1은 제네시스 해시를 모든 트랜잭션 바인딩과 모든 서명된 액션 메시지(faucet mint, unbond, withdraw, RPL 토큰 메시지, aggregator 액션, bridge 거버넌스 메시지)에 묶어, 이 체인용 증명이나 서명이 다른 어떤 체인에서도 검증되지 않게 합니다. 생략하면 명령이 경고합니다. v0.6.8 지갑은 14~19를 제외한 모든 chain id에서 제네시스에 묶인 형태로 증명하므로, 20 이후의 모든 체인은 1로 생성됩니다
--proof-window-blocks <N>없음(256)v0.6.8: bundle의 앵커와 그 time이 얼마나 오래되어도 되는지를 정하는 단일 윈도, 256~4,096 블록. rand_getLimits.proof_window_blocks로 제공됩니다
--program-state-cell-fee <UNITS>없음(program_state 섹션 없음)v0.6.8, RPL-2: 프로그램 셀, 프로그램 vault, Invoke 액션을 켜며, 호출이 생성하는 셀마다 invoke의 수수료 하한에 더해지는 셀 수수료를 RAND 단위(최대 1,000 RAND)로 지정합니다. --tokens, --gas-price, --hardening-v6, --auth-guest가 필요하며, 빠진 것은 어떤 파일도 기록되기 전에 이름과 함께 거부됩니다
--aggregation <BOND,MAX_COVERS,SUBSIDY,HALVING,WINDOW>, --admitted-shape <…>없음aggregation 섹션. v0.6.8 빌드는 이 섹션이 있는 제네시스에서는 시작을 거부합니다

--alloc마다 alloc 줄 하나를 출력한 뒤, 제네시스 해시, validator와 노트의 개수, 에폭 길이, 다섯 가지 상한, hc_bundle과 hc_auth(--auth-guest가 없으면 none)를 출력하고, 이어서 gas 줄을 출력합니다. gas 줄은 gas: price P/gas, B/KiB, bundle limit N, dynamic: target … B / … gas, adjust … bps, floor …/…, ceiling …/…, byte load all|paying이며, --gas-price가 없으면 gas: none입니다. --program-state-cell-fee가 있으면 program_state: cell fee N RAND 줄이 추가됩니다. init도 같은 gas 줄을 출력합니다. 다섯 가지 상한 플래그는 모두 같게 동작합니다. 생략하면 파일에 해당 필드가 없고 체인은 기본값으로 동작하며, 지정하면 기본값과 같더라도 그 필드가 제네시스 해시에 포함됩니다. chain 20은 다음 플래그로 생성되었습니다(deploy/cut-chain20-genesis.sh):

--max-program-words 65535 --max-proof-bytes 4194304 --max-block-bytes 20971520 \
--max-call-envelope-bytes 65536 --max-program-public-words 32768 \
--tokens tokens.json \
--bundle-guest v3 --auth-guest --hardening-v6 \
--gas-price 100 --byte-price 800 --bundle-gas-limit 20479 --gas-dynamic 10485760,262144,1250 \
--max-gas-price 10000 --max-byte-price 80000 --gas-byte-load paying \
--envelope-bytes 1860 \
--testnet --binding-domain 1 --proof-window-blocks 1024 --program-state-cell-fee 10000000 \
--epoch-blocks 1000 --faucet --fri-profile production

체인 18과 19는 --envelope-bytes 1860까지는 같은 플래그로 생성되었으며, v0.6.8의 플래그는 하나도 사용하지 않았습니다. 증명 상한은 체인 13~16의 8 MiB에서 4 MiB로 낮아졌습니다. 분할 승인 트랜잭션은 최대 세 개의 증명을 담으며, 3 × 4 MiB + 1 MiB는 20 MiB 블록에 들어갑니다. tokens.json에는 1 RAND의 registration_fee, 10000000000000의 mint_cap_per_day, max_tokens 4096, burn_registration_fee, bound_note_value가 있으며, zUSD가 일곱 개의 담보와 함께 등재되어 있습니다. --bridge 플래그는 없으며, 생성 스크립트는 이후에도 bridge, staking, consensus_domain 섹션을 파일에 끼워 넣습니다(체인 20의 경우: 가디언 세트 1과 여덟 개의 PQ 가디언 키를 갖춘 브리지, 일시 중지 키, rules_v2, rotation, fees; 파우셋 허용 목록, admission_by_vote, 2,500 bps의 진입 예산을 담은 staking 섹션; consensus_domain: 1; 그리고 alloc-note --asset 1 --envelope-bytes 1860으로 만든 zUSD의 제네시스 노트). 의미가 있는 제네시스 해시는 완성된 파일에 대해 init이 출력하는 값입니다.

각 --alloc은 새로운 커밋먼트 난수로 입금 노트를 하나 만들므로, 두 번 생성하면 서로 다른 해시가 나옵니다. 이 명령은 항상 cm과 amount 옆에 노트의 오프닝을 함께 기록하며, tokens 섹션이 있는 체인에서는 이것이 필수입니다.

"alloc": [
  { "cm": "<64 hex>",
    "envelope": { "kem_ct": "<hex>", "to_receiver": "<hex>", "to_sender": "<hex>", "body": "<hex>" },
    "amount": 1000000000000,
    "opening": { "pk": "<64 hex>", "time": 0, "r": "<64 hex>" } }
]

따라서 제네시스 노트의 소유자와 금액은 파일이 공개되는 순간 설계상 공개됩니다. 이후 언제, 무엇으로 사용되는지만 비공개로 유지됩니다. 제네시스는 한 번만 생성하고 그 파일을 보관하십시오.

alloc-note

--to <rand1…>(필수), --amount <N>(필수), --asset <INDEX>(기본값 0), --envelope-bytes <N>(기본값: 레거시 형식). alloc 노트 하나를 JSON으로 출력하며, genesis --alloc이 봉인하는 방식과 같이 --to에 봉인됩니다. envelope_bytes를 설정한 제네시스는 이에 맞는 --envelope-bytes 없이 봉인된 노트를 거부합니다. --amount는 자산의 정수 단위입니다. RAND는 소수점 아래 아홉 자리, 브리지된 토큰은 여덟 자리입니다(자산 1에서 10은 10 zUSD입니다). 등재된 토큰의 노트에는 해당 토큰의 담보가 locked 금액을 가져야 하며, 그 합계가 해당 토큰의 노트 총액과 정확히 일치해야 합니다.

init

인자의미
--datadir <DATADIR>생성할 데이터 디렉터리
--genesis <GENESIS>제네시스 파일. <datadir>/genesis.json으로 복사됨

제네시스 해시와 genesis와 같은 gas: 행을 출력합니다.

run

인자기본값의미
--datadir <DATADIR>필수초기화된 데이터 디렉터리
--key <KEY>필수키 파일: 검증자 신원, p2p 신원, 수수료 수령자
--listen <LISTEN>/ip4/0.0.0.0/tcp/30303libp2p 수신 multiaddr, 반복 지정 가능
--bootstrap <BOOTSTRAP>없음, 반복 지정 가능/ip4/<ip>/tcp/<port>/p2p/<peer-id>. 시작할 때 연결을 시도하며, 연결이 끊긴 동안에는 30초마다 다시 시도합니다. v0.6.8부터 해당 peer id는 예약됩니다
--reserved-peer <PEER_ID>없음, 반복 지정 가능v0.6.8: 인바운드 연결 상한을 넘어서도 허용되며, 동기화 예산 중 검증자 몫에서 서비스를 받는 피어입니다. 부트스트랩과, 이 노드가 서명된 피어 바인딩을 확인한 모든 검증자는 이 플래그 없이도 예약됩니다. 아직 바인딩이 저장소에 없는 새로 생성된 체인에서는 플랫폼의 검증자를 여기에 나열하십시오
--strict-gossip꺼짐v0.6.8: gossipsub의 엄격한 검증으로, 유효한 작성자 서명, 시퀀스 번호, 출처를 가진 메시지만 수락합니다. 엄격 노드와 허용 노드는 서로 호환되므로 노드 단위로 순차 적용할 수 있습니다
--rpc <RPC>127.0.0.1:8545운영자의 JSON-RPC 리스너: 모든 메서드를 제공하며 루프백을 신뢰합니다. 루프백에만 두고, 공개 엔드포인트를 이곳으로 포워딩하지 마십시오
--public-rpc <ADDR>꺼짐v0.6.8: 고정된 메서드 집합을 가진 두 번째 공개 리스너(뷰잉 키 메서드, rand_mint, rand_getPeers 없음, 배치 없음, WebSocket 없음, 모든 호출자에 대한 단일 미터). 리버스 프록시나 SSH 포워드가 가리켜야 하는 대상입니다(JSON-RPC)
--rpc-viewing-token-file <PATH>꺼짐v0.6.8: --rpc의 뷰잉 키 메서드에 Authorization: Bearer <파일의 첫 줄>(32자 이상)을 요구합니다
--validator꺼짐이 키로 합의에 참여합니다
--no-mdns꺼짐LAN 디스커버리를 끕니다
--block-interval-ms <MS>1000제안 사이의 최소 간격
--view-timeout-ms <MS>3000기본 뷰 타임아웃. 연속 타임아웃마다 두 배가 되며 최대 8×까지 늘어납니다
--verify-chain <MODE>quickoff, quick, full
--keep-raw-proofs꺼짐집계 체인의 아카이브 모드
--prune-history <WINDOW>없음(전부 유지)이 만큼의 블록 이력만 유지합니다. <n>m, <n>h, <n>d 형식이며 최소 1h입니다. 그보다 오래된 블록은 블록, QC, 트랜잭션, 영수증을 잃으며 원장은 유지됩니다. 체인 20에서는 26개 검증자 중 24개가 24h로 실행되고 두 노드는 아카이브입니다. 아카이브와 mainnet 노드에는 이 값을 설정하지 않습니다. 하한 아래의 높이 조회는 -32010으로 응답합니다(JSON-RPC)
--min-free-disk-mb <MB>1024데이터 디렉터리의 파일 시스템에 남은 공간이 이보다 적으면 시작을 거부합니다. rand_getHealth는 이 값의 네 배 미만이 되면 disk_low라고 알립니다. 0은 이 보호 장치를 끕니다
--rpc-viewing-open꺼짐루프백이 아닌 호출자도 뷰잉 키 메서드를 사용하게 합니다. 인증을 수행하는 구성 요소 뒤에서만 사용하십시오
--gas-price <UNITS>100이 노드의 풀이 호출에 요구하는 가스당 단위(10⁻⁹ RAND)이며, 호출의 증명 헤더에 있는 gas_max에 곱해집니다. 이는 체인 규칙이 아니라 수락 정책입니다. 더 저렴한 호출을 담은 블록도 여전히 유효합니다. --byte-price 0과 함께 0이면 어떤 정책도 적용되지 않습니다. 체인 20처럼 제네시스에 gas 섹션이 있는 체인에서는 체인 자체의 가격이 유효성 규칙입니다
--byte-price <UNITS>800호출의 증명과 입력 엔벨로프에 대한 KiB당(또는 그 일부당) 단위이며, 같은 정책 아래 바이트 0부터 계산합니다
--prover <ADDR>꺼짐이 주소에서 위임된 증명자(prover_* JSON-RPC)를 호스팅합니다. 별도의 리스너이며 --rpc와 달라야 합니다. rand-prover keygen으로 만든 <prover-home>/prover.key.json이 없으면 노드는 시작을 거부합니다
--prover-home <DIR><datadir>/prover증명자의 prover.key.json과 pairings.json
--prover-accept-spend-key폐기됨v0.6.8부터 시작 시 거부됩니다. 이 플래그를 준 run은 노드 키를 읽기 전에 플래그 이름을 밝히며 종료합니다. 더 이상 어떤 증명자도 spend-key 증인을 받지 않으므로 유닛 파일에서 제거하십시오. v0.6.7에서는 번들 게스트 v1 또는 v2 체인의 spend-key 증인을 받았습니다
--prover-max-parallel <N>1호스팅된 증명자가 동시에 실행하는 증명 수. 5.74 GB × N + 1 GiB의 메모리를 사용할 수 없으면 시작이 거부됩니다
--prover-max-queue <N>8실행 중인 작업 외에 대기열에 넣는 작업 수
--prover-cuda꺼짐CUDA 백엔드에서 증명합니다(--features cuda로 빌드). CPU 폴백 없음
--prover-skip-memory-check꺼짐여유 메모리 검사를 건너뜁니다
--prover-fee <RAND>, --prover-fee-address <rand1…>없음호스팅된 증명자에게 보내는 모든 작업이 지불해야 하는 수수료이며, 소수점 아래 아홉 자리까지의 RAND로 지정합니다. 증명되는 번들 안에서 해당 주소로 가는 RAND 출력 하나입니다. 두 플래그는 서로를 필요로 합니다
--prover-allow-origin <ORIGIN>브라우저 확장 프로그램과 루프백 페이지페이지가 증명자의 응답을 읽을 수 있는 브라우저 오리진이며 반복 지정할 수 있습니다. 한 번 이상 지정하면 그 값들이 전체 목록이 됩니다. *는 모든 웹사이트를 허용하며 경고를 출력합니다

환경 변수: RUST_LOG(기본값 info,libp2p=warn,libp2p_mdns=off). Ctrl-C 또는 SIGTERM은 노드를 정상적으로 종료합니다.

공개 엔드포인트 https://rpc.randprotocol.org는 아카이브 노드 앞에 놓인 허용 목록 프록시이며, 2026-10-01부터 그 허용 목록은 공개 리스너의 메서드 집합입니다.

safety

중지된 검증자의 합의 안전성 상태입니다(v0.6.8). 각 명령은 데이터 디렉터리를 직접 열므로 실행 중인 노드와 함께 실행할 수 없습니다.

rand-node safety status       --datadir <dir>
rand-node safety clear-halt   --datadir <dir> --i-have-compared-this-node-with-the-fleet
rand-node safety release-lock --datadir <dir> --i-give-up-this-validators-lock

status는 커밋된 헤드, 뷰와 마지막으로 투표한 뷰, high QC, 검증자가 자신의 헤드보다 높은 곳에서 잠겨 있는지 여부, 그리고 기록된 안전성 중단을 출력합니다. 인증된 three-chain이 자신의 커밋된 헤드의 후손이 아닌 블록을 커밋하려는 것을 본 노드는 멈추고 이를 기록합니다(audit v6, CON-5). 이후 run은 clear-halt가 실행될 때까지 그 기록과 함께 종료합니다. 해제하기 전에 이 노드의 헤드를 다른 두 검증자의 헤드와 비교하고, 다르면 아카이브에서 다시 동기화하십시오. v0.6.8부터(CON-4) “보유하지 않음”이라는 응답의 어떤 쿼럼도 더 이상 잠금을 해제하지 않습니다. 얻을 수 없는 블록에 잠긴 검증자는 justify가 잠금보다 높은 제안이 도착하거나 그 블록을 가져올 때까지 침묵합니다. release-lock은 저장된 잠금을 커밋된 헤드의 인증서로 낮춥니다. 한 번에 한 검증자에게만, 그리고 블록이 영구적으로 유실된 경우에만 사용하십시오. 승인 플래그가 없으면 쓰기 명령은 수행할 작업을 출력할 뿐 아무것도 변경하지 않습니다.

verify

인자기본값의미
--datadir <DATADIR>필수노드가 실행 중이면 안 됩니다
--mode <MODE>fullquick 또는 full
--repair꺼짐손상된 끝부분을 잘라냅니다. 안전성 상태는 유지됩니다

일관되면 종료 코드 0, --repair 없이 문제가 발견되면 2입니다.

db

db drop-receipts-index --datadir <DATADIR>를 노드를 중지한 상태에서 실행하면 receipts_by_program 인덱스를 삭제합니다. 이 인덱스가 있는 데이터베이스를 열 수 없는 v0.3 이전 빌드로 롤백하기 전에 사용합니다. 이후 시작할 때 영수증으로부터 인덱스가 다시 만들어집니다.

status

--rpc <URL>(기본값 http://127.0.0.1:8545). rand_status를 그대로 출력합니다.

register, unbond, withdraw

명령인자의미
register--key, --payout <rand1…>, --rpc, --v2이 노드의 키로 서명한 16진수 Registration을 출력합니다. RPC에서 체인 ID를 읽고, --v2를 쓰면 제네시스 해시도 읽습니다. 제네시스에서 staking.registration_v2를 설정한 체인(체인 20이 그러합니다)에서는 --v2가 필수이며, 그곳에서 v1 등록은 거부되고 그 외 모든 체인에서는 v2 등록이 허용됩니다
unbond <amount RAND>--key, --rpc, --no-wait스테이크를 언본딩으로 옮깁니다. 수수료는 없으며, 두 에폭 뒤에 인출할 수 있습니다
withdraw <amount RAND>--key, --rpc, --no-wait해제된 스테이크와 보상을 기본 수수료 0.001 RAND를 제외하고 지급 주소의 노트로 지급합니다

admit sign|submit

투표에 의한 승인(v0.6.8)입니다. 제네시스에서 staking.admission_by_vote를 설정한 체인(체인 20이 그러합니다)에서는, 투표 가중치의 3분의 2를 엄격히 넘는 밸리데이터가 서명해 승인한 뒤에야 새 밸리데이터 키를 등록할 수 있습니다.

명령인자의미
admit sign--candidate <key hex, registration hex, or a file holding either>, --key <validator key>, --genesis-hash <hex>제네시스 해시와 후보의 주소에 대한 이 밸리데이터의 투표를 <voter key hex>:<signature hex> 한 줄로 출력하므로, 정확히 하나의 체인에서만 유효합니다. 오프라인 동작이며 노드를 읽지 않습니다
admit submit--candidate …, --signature <line> (반복 가능), --rpc, --no-wait모든 투표를 노드의 제네시스 해시와 대조해 검사하고(다른 제네시스나 다른 후보에 대한 투표, 또는 같은 투표자의 중복 투표는 지목해 알려 줍니다), 순서를 정렬한 뒤 수수료 없는 AdmitValidator를 제출합니다

후보는 등록에 담길 키입니다. rand-node address --key가 이를 출력하며, register가 출력한 16진수에도 이 키가 들어 있습니다. 승인이 커밋된 뒤의 본딩은 이전과 같고(rand bond … --registration) 이 승인을 소모합니다. rand_getAdmitted는 승인되어 대기 중인 항목을 나열합니다.

bridge-gov

가디언과 일시 정지 키 보유자를 위한 브리지의 양자 내성 이후(post-quantum) 키 교체(v0.6.8)입니다. 모든 단계는 --rpc(기본값 http://127.0.0.1:8545)에서 체인 ID, 그 바인딩 도메인, rand_getBridgeState.rotation_nonce를 읽습니다.

명령동작
rotate-pq message --new-key K…현재 nonce에 대한 16진수 교체 메시지를 출력하며, 모든 서명자에서 서로 비교하는 용도입니다
rotate-pq sign --new-key K… --key F --index I [--possession]I:signature를 출력합니다. 현재 PQ 가디언의 쿼럼 줄(I는 현재 집합에서의 인덱스)이며, --possession을 쓰면 새 키 보유자의 줄(I는 새 집합에서의 인덱스)입니다. I 위치의 키가 아닌 키 파일은 거부합니다
rotate-pq submit --new-key K… --quorum @F [--possession @F] [--no-wait]RotatePqGuardians를, 또는 소유 증명 줄이 있으면 V2 액션을 조립해 전송합니다. 소유 증명을 받지 않는 체인에서 이를 제공하거나, 체인 20처럼 이를 요구하는 체인에서 이를 생략하면 거부합니다
rotate-pause message|sign|submit --new-key K일시 정지 키에 대한 동일한 절차입니다(소유 증명 인덱스 0)
cancel-rotation sign --kind pq|pause --key PAUSE_KEY취소 메시지에 대한 0:signature를 출력하며, 체인의 현재 일시 정지 키와 대조해 검사합니다
cancel-rotation submit --kind pq|pause --signature @FCancelRotation을 전송하여, 대기 중인 교체를 지연 시간이 끝나기 전에 취소합니다

--new-key는 16진수 Dilithium2 공개 키, 그 키가 담긴 @file, 또는 @key-file(그 파일의 공개 키)입니다. 서명 줄은 index:hex 형식이며 공백이나 줄 바꿈으로 구분하고, # 주석을 쓸 수 있습니다.

vesting status|claim|revoke|bond|unbond

제네시스에 vesting 섹션이 있는 체인에서, 시간 잠금이 걸린 제네시스 할당의 보유자 측과 회수자 측 명령입니다. 체인 20에는 이 섹션이 없습니다. 키는 rand-node keygen 파일입니다.

명령인자의미
vesting status <ENTRY>--rpcrand_getVesting이 제공하는 항목으로, 조건, 베스팅된 양, 지금 청구할 수 있는 양을 보여 줍니다
vesting claim--entry <id>, --to <rand1…>, --amount <RAND> 또는 --all, --key, --rpc, --no-wait잠금이 풀린 금액을 기본 수수료 0.001 RAND를 제외하고 --to의 노트로 지급합니다. 수혜자 키로 서명합니다
vesting revoke prepare--entry, --margin-secs (기본값 600), --out (기본값 revoke.json), --rpcv0.6.8, 키 불필요: 모든 회수자가 서명할 회수 트랜잭션을 작성합니다. 아직 베스팅되지 않은 부분을 헤드로부터 --margin-secs초 뒤 기준으로 담은 노트이며, 항목의 제네시스 treasury로 지급됩니다(--to는 없습니다)
vesting revoke sign--proposal <file>, --key, --index?회수자 키 하나로 오프라인에서 <index>:<signature hex>를 출력합니다
vesting revoke submit--proposal <file>, --signature <index:hex> (반복 가능), --rpc, --no-wait항목의 threshold 이상의 서명과 함께 prepare로부터 256블록 이내에 회수 트랜잭션을 전송합니다. v0.6.7의 단일 키 방식 vesting revoke --to는 폐지되었습니다
vesting bond <amount RAND>--entry, --validator <address>, --registration <hex>, --key, --rpc, --no-wait철회 불가 항목용: 잠긴 RAND를 해당 밸리데이터의 스테이크로 본딩합니다. 아직 등록부에 없는 밸리데이터에는 register가 출력한 값이 필요합니다
vesting unbond <amount RAND>--entry, --key, --rpc, --no-wait본딩된 RAND를 잠금으로 되돌립니다. 언본딩 에폭이 지나면 다시 청구할 수 있습니다

aggregator register|unbond|withdraw, aggregate

aggregation 섹션이 있는 체인에서 집계자 역할이 쓰는 명령입니다. aggregator register --key --bond <RAND> --payout <rand1…> --rpc는 서명된 AggregatorRegistration을 출력하고, aggregator unbond와 aggregator withdraw는 밸리데이터용 명령 쌍과 같은 방식으로 동작합니다. aggregate --key <KEY> [--rpc <URL>] [--watch] [--interval-secs 15] [--no-wait]는 rand_getUnsealed를 폴링하여 집계 하나를 증명하고 제출하는 데몬입니다. 제네시스에 aggregation 섹션이 없는 체인 20에서는 동작하지 않습니다.

rand (지갑)

서브커맨드 앞이나 뒤에 쓸 수 있는 전역 옵션입니다.

옵션환경 변수기본값
--rpc <RPC>RAND_RPChttp://127.0.0.1:8545. http 또는 https를 쓸 수 있습니다(공개 엔드포인트는 https://rpc.randprotocol.org). 64 MiB를 넘는 응답은 거부합니다
--key <KEY>RAND_KEYwallet.key.json. 노트 저장소는 그 옆의 <key>.notes.json에 있습니다. 저장소는 스캔했던 체인(노드의 rand_getGenesisHash)에 묶여 있어, 다른 체인을 가리키면(예: 체인 19에서 20으로 전환되는 동안 유지한 지갑) 경고와 함께 비워지고 리프 0부터 다시 스캔됩니다. v0.6.8부터 모든 명령은 그룹이나 다른 사용자가 읽을 수 있는 키 파일을 거부하며, 해결 방법(chmod 600 <key>)을 알려 줍니다
--prover꺼짐. 이 머신 대신 이 지갑과 페어링된 증명자(rand prover pair)에서 번들을 증명합니다. 증명은 트랜잭션에 넣기 전에 이곳에서 검사합니다(다이제스트, 크기, 로컬 검증). 번들을 증명하는 모든 명령에 적용되며, call과 program invoke에서는 수수료를 내는 번들만 증명자로 가고 호출 증명은 로컬에 남습니다. 페어링이 없으면 거부하며, call을 제외하면 --cuda와 함께 쓸 때도 거부합니다. 체인 20과 같은 분리 승인 체인에서는 증명자에게 뷰잉 키 nk와 솔트가 전달되고 지출 키는 절대 전달되지 않습니다. 증명자는 이 지갑의 전체 내역을 읽을 수 있지만 지출할 수는 없습니다. 인증 증명은 항상 이 머신에서 만듭니다. 번들 게스트가 v1 또는 v2인 체인에서는 v0.6.8이 증명자에게 아무것도 묻기 전에 --prover를 거부합니다
--max-prover-fee <RAND>1. 페어링된 증명자가 번들당 청구할 수 있는 최대 금액입니다. 이를 넘는 견적은 번들을 만들기 전에 거부되며, 0은 어떤 수수료도 거부합니다. 수수료는 같은 번들에 RAND 출력 하나를 추가하는 형태이며 prover fee: <amount> RAND to <fingerprint>로 표시됩니다

금액은 소수점 아래 아홉 자리까지의 십진수 RAND입니다(1, 1.5, .25, 0.000000001). send, token mint, token burn의 토큰 금액과 randpay: 링크의 토큰 금액은 해당 토큰 레지스트리 행의 decimals에 따른 표시 단위입니다(zUSD의 10은 10 zUSD입니다). bridge-burn, token create --fixed-supply, --initial은 토큰의 최소 단위로 된 일반 정수를 받으며, asset-balance가 이 값을 출력합니다. 명령이 토큰을 받는 곳에서는 레지스트리 인덱스, rpl1… ID, 64자리 16진수 ID를 모두 받습니다. ID는 토큰별 조회가 아니라 노드의 전체 레지스트리 목록(rand_getTokens, 모든 페이지)으로 인덱스로 변환하는데, 토큰별 조회는 어떤 토큰이 곧 이동할지를 노드에 알려 주기 때문입니다. 숫자 인덱스는 노드에 전혀 전달되지 않습니다.

명령인수동작
keygen--key 위치에 새 spend-key 파일을 모드 0600으로 기록합니다. 덮어쓰기는 거부합니다
address--uri [--amount A] [--asset X] [--memo M], --qr, --qr-png <FILE>이 지갑의 rand1… 주소를 stdout에 출력합니다. 출력은 주소와 개행 문자뿐이므로 스크립트에서 $(rand address)를 쓸 수 있습니다. 주소의 fingerprint XXXX-XXXX-XXXX-XXXX는 stderr에 출력합니다. 이는 Crockford base32 문자 16자로, 사람이 주소를 확인하기 위한 값이며 네트워크로는 전송되지 않습니다. --uri는 randpay: 링크(주소에 선택 사항인 금액, 자산, 메모를 더한 것)도 출력합니다. --qr은 그 링크를 터미널에 QR 코드로 렌더링하고, --qr-png는 PNG로 기록합니다
contacts add <NAME> <TO> / list / show <NAME> [--qr] / remove <NAME>--yes (add)이 지갑이 이름으로 송금할 수 있는 이름 붙은 주소입니다. TO는 rand1… 주소 또는 randpay: 링크이며, 링크의 경우 주소만 보관합니다. add는 fingerprint를 출력하고 add? [y/N]을 묻습니다. --yes가 없을 때 터미널이 아닌 stdin은 거부합니다. <key>.contacts.json에 모드 0600으로 저장합니다. 이름은 1자에서 64자이며, rand1 또는 randpay:로 시작할 수 없고, 중복될 수 없습니다
prover pair <LINK> / prover pair --trusted / show / forget--name <NAME>, --yes (pair)이 지갑을 위임 증명자 하나와 페어링합니다. pair는 rand-prover pair가 출력한 randprover: 링크를 받아, https://가 아닌 URL(평문 http://는 localhost, 127.0.0.1, [::1]에 한함)을 거부하고, 증명자가 받게 될 내용(this prover will receive this wallet's viewing key: it can read the wallet's whole history; it cannot spend)을 알린 뒤 pair? [y/N]을 묻습니다. --yes는 질문을 건너뛰며, 터미널이 아닌 stdin은 --yes 없이는 거부합니다. 이어서 증명자의 prover_info를 조회하고, 키 fingerprint가 링크에 명시된 것과 다르면 거부한 뒤, <key>.prover.json을 모드 0600으로 기록하며 이전 페어링이 있으면 대체합니다. --trusted(v0.6.8)는 링크를 받지 않습니다. 빌드에 포함된 링크로 밸리데이터 증명자 풀 https://prover.randprotocol.org와 페어링하며, 운영자는 이 지갑의 내역을 읽을 수 있지만 지출할 수는 없습니다. show는 이름, URL, fingerprint, own, 증명자의 키를 출력하며 토큰은 출력하지 않습니다. forget은 파일을 삭제합니다. v0.6.7은 페어링 전에 묻지 않았습니다
viewing-key이 지갑의 viewing key nk를 64자리 hex로 출력합니다. rand_importViewingKey가 받는 매개변수입니다. 이 키로 지갑이 보내거나 받은 모든 노트를 읽을 수 있으며, 지출은 할 수 없습니다
balance트리를 스캔하고, 저장소를 저장하며, 지출 가능한 금액과 미사용 노트 수를 출력합니다
sync--rescan잔액을 출력하지 않고 스캔합니다. 첫 동기화는 리프보다 먼저 모든 블록 헤더를 읽습니다(호출당 1,024개). --rescan은 체인 바인딩을 유지한 채 모든 노트, 지출 표시, 커서를 지우고 리프 0부터 다시 스캔합니다. 노드가 이 지갑의 노트를 잘못 지출된 것으로 보고했을 때 원상으로 되돌리는 방법입니다. 신뢰하는 노드를 대상으로 실행하는 것이 좋습니다
notes--memo이 지갑이 연 모든 노트를 출력합니다: 인덱스, 자산, 금액, 높이, spent, pending, 그리고 24자로 자른 메모(--memo를 쓰면 전체 메모)
asset-balance [INDEX]스캔한 뒤 이 지갑이 한 자산으로 보유한 양을 출력하며, 인덱스를 생략하면 보유한 자산마다 한 행씩 출력합니다. 금액은 해당 자산의 최소 단위입니다
history--memo이 지갑이 다른 사람을 위해 생성한 모든 노트를 notes와 같은 메모 열과 함께 출력합니다
send <TO> [AMOUNT]--asset <INDEX|rand|rpl1…|hex> (기본값 0, RAND), --memo <M>, --fee <RAND> (기본값 0.001), --no-wait, --yes, --cudaTO는 rand1… 주소, randpay: 링크, 저장된 연락처 이름 중 하나이며 이 순서로 시도합니다. 링크에 담긴 금액, 자산, 메모는 명령줄에서 생략한 항목을 채웁니다. AMOUNT는 링크에 금액이 있을 때만 생략할 수 있으며, 두 곳에 값을 주었는데 서로 다르면 거부합니다. 명령은 확인 내용인 to <contact, if any> · fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <asset>을 출력하고, 메모가 있으면 memo: "<text>" 줄을 따로 출력한 뒤, --yes가 없으면 증명하기 전에 묻습니다. 스크립트는 --yes를 넘겨야 합니다. 터미널이 아닌 stdin은 stdin is not a terminal: pass --yes to send without confirmation과 함께 거부됩니다. 이어서 해당 자산의 노트를 최대 두 개, 수수료용 RAND 노트를 최대 두 개 선택하고, 메모를 지급 출력에만 봉인하며, 숨겨진 자산 4슬롯 번들 하나를 증명하고, 분리 승인 체인에서는 지출 승인도 로컬에서 증명한 뒤 제출하고 커밋을 기다립니다. 제네시스에 envelope_bytes가 없는 체인에서는 비어 있지 않은 메모를 증명하기 전에 거부합니다. AMOUNT는 자산의 표시 단위입니다. RAND는 소수 RAND이고, 토큰은 레지스트리 행 자체의 decimals를 따르며, 노드가 어떤 인덱스로 응답했든 0 또는 rand만 RAND로 읽습니다. 토큰 id는 노드에 묻기 전에 디코딩하며, 목록 행이 인덱스 0으로 응답하거나 id 필드가 서로 일치하지 않으면 거부합니다. 확인 내용에는 토큰 금액을 표시 단위와 기본 단위로 함께 보여 주므로(10.00000000 zUSD (1000000000 units)), 노드가 토큰의 decimals를 속이면 전송 전에 드러납니다. 자산 인덱스와 수수료는 증명 전에 출력합니다. 체인상에서 토큰 전송은 일반 번들이며 RAND 결제와 구별되지 않습니다. 수수료는 RAND이고, 지출 가능한 RAND가 없는 지갑은 증명 전에 거부됩니다
bond <VALIDATOR> <AMOUNT>--registration <hex>, --fee, --no-wait, --cuda밸리데이터에 스테이킹합니다. 번들이 해당 금액을 소각합니다
faucet [ADDRESS]--amount <RAND> (기본값 및 최대 100)testnet 전용: 밸리데이터 노드에 발행을 요청합니다. 체인 20에서 faucet은 제네시스 허용 목록에 있는 지갑 16개에만 지급합니다
program build--guest <fib|memcpy|bubble_sort|balance_check|private_payment|public_echo|rpl2_counter>, --arg N (반복 가능), --out <file> (기본값 program.json)내장 게스트를 어셈블하고 프로그램 id를 출력합니다. rpl2_counter(v0.6.8)는 RPL-2 시연 프로그램입니다
program deploy <FILE>.json, 원시 .bin, 또는 rand-guest build가 기록하는 이미지 컨테이너; --public <FILE>, --input <u32> (반복 가능) 또는 --check-call, --cuda프로그램 id, hc, 워드 수를 출력합니다. 체인의 상한을 넘는 프로그램은 증명 전에(rand_estimateFee를 통해) 거부하고, 배포 하한 수수료를 번들로 지불한 뒤 기다립니다. --public은 공개 입력을 프로그램과 함께 저장합니다(공백으로 구분한 u32 워드 또는 ELF .so). 크기는 체인의 max_program_public_words 이내여야 하며, 이후 프로그램 id가 이 입력에 바인딩됩니다. --input 또는 --check-call을 쓰면 지갑이 먼저 해당 비공개 입력으로 에뮬레이터에서 호출을 시험 실행하고, 호출 티어 상한(14)에 맞지 않으면 거부합니다. 이 검사를 위해 증명하는 것은 없습니다
program show <ID>배포된 프로그램의 메타데이터
program invoke <PROGRAM-ID>--transition <FILE.json> (필수), --input N (반복 가능, 비공개), --inputs-file <FILE.json> (u32 JSON 배열, 뒤에 추가됨), --fee <RAND>, --gas-limit <N|max>, --tier T, --no-waitv0.6.8, RPL-2: 프로그램의 상태 전이를 선언하고 체인이 이를 적용하게 합니다. 증명하기 전에 다음을 확인합니다. 체인에 program_state 섹션이 있는지, 프로그램이 존재하는지, 전이의 컨텍스트가 세그먼트 규칙에 맞는지, 각 reads 항목이 실제 셀과 일치하는지(rand_getProgramCell, 불일치하면 오래된 셀을 명시하고 종료 코드 3으로 종료합니다), 볼트가 모든 pays 항목과 이 전이가 예치하는 금액을 지불할 수 있는지, 이 지갑이 예치와 수수료에 필요한 토큰과 RAND를 보유하는지. 이어서 쓰기로 생성되는 셀을 세고, 실제 컨텍스트 워드로 프로그램을 시험 실행하며, 트랜잭션에 바인딩된 호출을 증명하고, 그다음 번들(수수료, 그리고 burn_r로 소각하는 deposit.rand와 burn_a로 소각하는 deposit.asset의 deposit.amount)과 승인 증명을 증명합니다. 기본 수수료는 선언한 가스에 대한 호출 하한에 생성된 셀당 셀 수수료를 더한 값이며, call과 같이 가격 단계 두 개만큼의 여유를 둡니다. 각 지급을 출력하고, --no-wait가 아니면 영수증의 outputs 여덟 개를 출력합니다. 포함 시점에 읽기가 오래된 경우에도 종료 코드 3으로 종료하므로, 호출하는 도구는 다시 읽고 재시도할 수 있습니다. 입력 트랜스크립트는 공개하지 않습니다. 전이 파일의 모든 필드는 선택 사항입니다: {"reads": [{"key", "value"}], "writes": [...], "deposit": {"rand": "<units>", "asset": N, "amount": "<units>", "kind": "none"|"deposit"|"burn"}, "pays": [{"asset": N, "amount": "<units>", "to": "rand1…"}], "mints": [...]}. 키와 값은 64자리 hex Word8이고, 금액은 자산 고유 단위의 십진 문자열이며, to의 기본값은 이 지갑입니다
program state <ID>--cell <64 hex>v0.6.8: 프로그램의 모든 셀을 키 순서로 출력하거나(rand_getProgramCells, 끝까지 페이지 단위로 조회), --cell로 셀 하나를 출력하며 없으면 64개의 0을 출력합니다. program_state 섹션이 없는 체인에서는 거부됩니다
program vault <ID>v0.6.8: 프로그램의 볼트(rand_getProgramVault)로, 보유한 자산마다 한 행씩이며 금액은 기본 단위입니다. 섹션이 없는 체인에서는 거부됩니다
call <PROGRAM-ID>--input N (반복 가능), --expect-public <FILE>, --tier T, --gas-limit <N|max>, --fee, --auditor <rand1…>, --no-envelope, --print-call-key, --cuda먼저 에뮬레이터에서 호출을 실행하고 gas: <exact> (declaring <limit>, tier <t>)를 출력합니다. 정확한 가스는 witness이므로 지갑 밖으로 나가지 않고, 선언한 한도는 증명의 공개 값 GAS_LIMIT입니다. 가스 섹션이 있는 체인에서 기본 한도는 정확한 가스를 2^(t−2)의 배수로 올림한 값입니다. max는 헤더의 상한 gas_max를 선언하며, 티어가 이미 드러내는 것 외에는 아무것도 노출하지 않습니다. N이 정확한 가스보다 작거나 상한을 넘으면 거부합니다. 섹션이 없거나 --cuda를 쓰면 기본값은 max입니다. 그다음 프로그램의 공개 입력에 대해 호출을 로컬에서 증명하고, 입력 트랜스크립트를 봉인하며, 번들로 지불하고, 영수증을 출력합니다. 기본 수수료는 선언한 한도에 대한 하한, 즉 rand_getLimits가 제공하는 가격에서의 BUNDLE_BASE + gas_price·GAS_LIMIT + byte_price·KiB에 가격이 움직이는 곳에서의 가격 단계 두 개만큼의 여유를 더한 값이며, fee … RAND (incl. two price steps of headroom)로 출력됩니다. hardening_v6 체인에서는 증명이 존재하기 전에 수수료가 정해지므로, 기본값은 증명 대신 체인의 증명 상한으로 가격을 매기며 이는 초과 지불만 일으킬 수 있습니다. --fee는 정확한 금액을 지불합니다. --expect-public은 프로그램의 공개 입력이 그 파일의 워드와 같지 않으면 증명 전에 거부합니다
open-call <TXHASH>--call-key <hex>, --as-auditor호출의 트랜스크립트를 열고, H_IN과 대조하며, 프로그램을 다시 실행합니다. 불일치하면 0이 아닌 코드로 종료합니다
receipt <TX>커밋된 호출의 영수증
bridge-mint <ATTESTATION>hex 또는 @path, --pq <JSON or @path> (필수), --to <rand1…> (기본값: 이 지갑), --fee (기본값: 해당 동작의 하한), --no-wait, --cuda가디언이 서명한 증명서를 노트로 예치합니다. --pq는 가디언의 Dilithium2 공동 서명 정족수이며 [{"index":0,"signature":"<4840 hex>"},…] 형식입니다. 증명하기 전에 증명서를 디코딩하고, 정족수를 노드의 pq_guardians 및 체인 id와 대조하며, 수신자와 자산 id를 확인하고, 나열된 인덱스를 읽습니다(rand_getAssets). 예치 노트의 blinding은 증명서의 다이제스트에서 r = blake3("rand-deposit-r-1" || mu)로 유도되며, 체인이 허용하는 유일한 r입니다. 수수료 번들은 정족수를 포함한 전체 트랜잭션에 대해 증명됩니다. 노트의 owner, time, r을 출력합니다
bridge-rotate <ROTATION>hex 또는 @path, --pq <JSON or @path> (필수), --fee (기본값: 해당 동작의 하한), --no-wait, --cuda현재 PQ 집합의 공동 서명 정족수로 가디언 집합 교체를 제출하며, 아무것도 예치하지 않는 BridgeAttest로 보냅니다. Rand의 집합을 한 단계만 올리는 교체가 아니면 증명 전에 거부합니다. 이후 guardian_set_index를 출력합니다
bridge-pause--sig <HEX or @path> (필수), --no-wait브리지 발행을 일시 중지합니다. 번들도 수수료도 없는 PauseMints이므로 키 파일도 RAND도 필요하지 않습니다. 파일은 rand-bridge-gov pause의 출력이며, 브리지의 현재 pause_nonce에 대해 만든 일시 중지 키의 2,420바이트 서명을 hex로 나타낸 것입니다. 전송 전에 노드의 pause_key 및 체인 id와 대조합니다. 일시 중지 중에도 소각과 교체는 열려 있습니다
bridge-unpause--pq <JSON or @path> (필수), --no-wait현재 pause_nonce에 대해 만든 PQ 가디언 정족수(rand-bridge-gov pq-unpause의 파일)로 일시 중지를 해제합니다. 번들도 수수료도 없으며, 일시 중지 키만으로는 해제할 수 없습니다
bridge-burn <ASSET> <AMOUNT> <TO_CHAIN> <TOKEN> <TO>--relayer-fee N, --fee (기본값 0.01), --no-wait, --cuda, --yes브리지된 자산을 외부로 소각합니다. TO_CHAIN의 코인 TOKEN이 ASSET을 뒷받침하고 AMOUNT 이상이 잠겨 있는지, 그리고 AMOUNT와 relayer 수수료가 정수 단위의 해제 단위인지 확인한 뒤, 하나의 번들을 증명합니다. 이 번들은 슬롯 0–1에서 자산을 지출하고, 그중 정확히 AMOUNT를 소각하며(burn_a, burn_asset), 슬롯 2–3에서 RAND 수수료를 지불합니다. --relayer-fee는 AMOUNT의 일부이며 추가 부과가 아닙니다. 체인 20처럼 브리지 수수료가 있는 체인(rand_getBridgeState.fees)에서는 v0.6.8이 먼저 체인이 보유할 수수료(해당 자산 기준)와 해제될 금액을 출력하고 확인을 묻습니다. --yes는 질문을 건너뛰며, 터미널이 아닌 stdin은 --yes 없이는 거부합니다. 이후 잠금 및 relayer 수수료 검사는 해제될 금액을 기준으로 합니다
token create--name, --symbol, --decimals <0..=9>, --salt <hex32> (지정하지 않으면 무작위), 그리고 --fixed-supply <N> --to <rand1…>, --authority-key-out <FILE> [--initial <N> --to <rand1…>], 또는 (v0.6.8) --program <PROGRAM-ID> 중 하나. 마지막은 발행 권한이 해당 프로그램인 토큰으로, 그 프로그램의 invoke만 발행하거나 소각할 수 있고, 공급량 0에서 시작하며, 체인의 program_state 섹션이 필요합니다. 그 밖에 --fee (기본값: 번들 기본 수수료에 레지스트리의 registration_fee를 더한 값. 노드가 10 RAND를 넘는 등록 수수료를 보고하면 거부하므로, 더 큰 수수료를 의도적으로 내려면 --fee를 지정), --no-wait, --cuda레지스트리의 다음 인덱스에 토큰을 등록합니다. 고정 공급(한 번 발행, 권한 none) 또는 Key 승인 방식(새 Dilithium2 키 파일을 0600으로 기록하며 덮어쓰기는 거부)입니다. 권한 키는 체인이 등록을 수락할 때까지 <FILE>.pending에 있습니다. 다른 등록이 먼저 그 인덱스를 차지하면 another token took index N first — re-run to register at N+1을 출력하고, 성공하면 인덱스와 id(hex 및 rpl1…)를 출력합니다
token mint--asset, --to <rand1…>, --amount <N> (토큰의 표시 단위), --authority-key <FILE>, --fee (기본값 0.001), --no-wait, --cudaKey 승인 방식 토큰을 추가로 발행합니다. 토큰이 Key 승인 방식이 아니거나 키가 그 토큰의 권한이 아니면 증명 전에 거부합니다
token set-authority--asset, --authority-key <FILE>, 그리고 --new-key <FILE> 또는 --renounce 중 하나, --fee (기본값 0.001), --no-wait, --cudaKey 승인 방식 토큰을 다른 키에 넘기거나, 발행 권한을 영구히 포기합니다
token burn <ASSET> <AMOUNT>--fee (기본값 0.001), --no-wait, --cuda이 지갑이 보유한 RPL 토큰 AMOUNT(토큰의 표시 단위)를 소멸시키며, 공개 공급량이 정확히 그만큼 줄어듭니다. 브리지된 토큰은 증명 전에 거부되며, bridge-burn을 통해 나갑니다
token info <INDEX|rpl1…|hex>토큰 하나의 rand_getTokens 전체 행을 출력합니다: 이름, 심볼, decimals, 권한, mint_nonce, 총 공급량, registered_at, id(hex 및 id_text), 그리고 브리지된 토큰이면 각 담보(locked, mint_cap_per_day, minted_today, mint_day)
token list--from <index> (기본값 0), --limit <N> (기본값 1000)rand_getTokens의 한 페이지: enabled, registration_fee, next_index, tokens
token register-bridged--name, --symbol, --salt <hex32>, --chain, --token <hex32>, --decimals (첫 번째 담보의 원천 decimals), --pq <JSON or @path> (필수), --fee (기본값: 번들 기본 수수료에 노드의 registration_fee를 더한 값이며, token create와 같은 10 RAND 거부 규칙이 적용됨), --no-wait, --cuda제네시스 이후에 브리지된 토큰을 첫 번째 담보와 함께 등록하며, 노드의 list_nonce에 대해 만든 PQ 가디언 정족수(rand-bridge-gov pq-register의 파일)로 승인합니다. 먼저 Rand에 등록하고, 그다음 엔드포인트에서 setToken을 실행합니다
token list-backing--asset <index>, --chain, --token <hex32>, --decimals, --pq <JSON or @path> (필수), --fee (기본값: 번들 기본 수수료), --no-wait, --cuda브리지된 토큰에 담보를 추가하며, 노드의 list_nonce에 대한 PQ 가디언 정족수(rand-bridge-gov pq-list의 파일)로 승인합니다
bridge브리지의 공개 상태: 가디언, 에미터, 자산 레지스트리, 소각 시퀀스
bridge-message <SEQUENCE>외부로 나간 소각 메시지 하나를 원문 그대로 출력합니다
fee bundle / fee deploy <words> / fee call <tier>--public-words M (deploy); --gas N, --bytes B, --keccak-log-height K, --sha256-log-height S (call)노드의 수수료 일정에서 산출한 최소 수수료입니다. 가스 섹션이 있는 체인에서 fee call <tier> --gas N은 rand call이 출력하는 선언 한도에 대해, 팁 시점의 가격으로 여유 없이 가격을 매깁니다. 즉 하한 그 자체입니다. --gas가 없으면 상한 gas_max(tier, K, S), 곧 그러한 호출에 들 수 있는 최대 비용으로 가격을 매깁니다. --bytes는 호출의 증명과 입력 envelope 바이트를 합한 값입니다
tx <HASH>커밋된 트랜잭션과 그 높이 및 인덱스
tx-key <HASH>이 지갑이 보냈거나 받았거나 거스름돈으로 보관한 해당 트랜잭션의 출력마다 한 행씩 출력합니다: output(bundle:0 … bundle:3, 번들 하나의 슬롯 네 개, 또는 mint:0), 역할, 금액(RAND 단위, 토큰은 N (asset I)), 담겨 있던 메모(없으면 -), 그리고 봉인에 쓰인 트랜잭션별 키. sent 행의 키를 수취인이나 감사인에게 건네면 rand_checkTransaction <HASH> <KEY>가 메모를 포함해 그 출력 하나를 공개합니다. 더미 슬롯은 누구에게도 열리지 않으며 행이 없습니다
block <ID>높이 또는 해시로 조회한 블록
head{ height, hash, view }
statusrand_status
peers연결된 피어
validators밸리데이터 등록부

--cuda는 --features cuda로 빌드해야 하며 대체 경로가 없습니다. 아직 PTX는 빌드되지 않았습니다. 호출 입력 봉투(envelope)를 봉인할 수 없으므로 rand call --cuda에는 --no-envelope가 필요합니다. 가스 상한만 선언하며 --gas-limit N은 거부합니다.

CLI가 출력하는 모든 메모와 연락처 이름(send의 확인 메시지, notes, history, tx-key)은 먼저 하나의 표시 규칙을 거칩니다. 제어 문자, 유니코드 서식 문자(양방향 제어 문자, 폭이 없는 문자, 소프트 하이픈) 및 U+2028/U+2029는 U+FFFD로 표시하며, 연속된 공백 구분 문자는 공백 하나로 표시합니다.

첫 번째 shielded 전송

rand keygen                                   # wallet.key.json
rand address                                  # rand1… on stdout, its fingerprint XXXX-XXXX-XXXX-XXXX on stderr
rand faucet                                   # testnet, allowlisted wallets only: 100 RAND into a note only you can open
rand balance                                  # balance: 100 RAND
rand send rand1q9f… 1.5                       # asks to confirm, then a minute and a half to two minutes of local proving, then the commit
rand notes                                    # the spent note, and the change note

주소 공유와 메모

rand address --uri --amount 1.5 --memo "invoice #42" --qr   # a randpay: link, as a terminal QR
rand contacts add alice rand1q9f…                           # shows the fingerprint, asks add? [y/N]
rand send alice 1.5 --memo "coffee"                         # the memo is sealed into the payment output
rand history --memo                                         # alice's row shows the whole memo
rand tx-key <hash>                                          # hand the sent row's key to alice or an auditor

메모는 노트와 같은 봉인된 본문 안에 들어 있으므로, 하나를 열 수 있는 쪽은 다른 하나도 열 수 있습니다. 수취인은 notes로, 해당 출력의 트랜잭션별 키를 가진 사람은 누구나 rand_checkTransaction <hash> <key>로 열 수 있습니다. 제네시스에서 envelope_bytes를 설정한 최초의 체인은 Chain 18입니다. 체인 14에서 17까지는 증명을 만들기 전에 --memo가 거부되었습니다.

나중에 다시 열어볼 수 있는 기밀 호출

rand program build --guest balance_check --arg 1000 --out bc.json
rand program deploy bc.json                   # prints the program id
rand call <id> --input 100 --input 200 --input 300 --input 400
rand open-call <txhash>                       # inputs: [100, 200, 300, 400] — verdict: faithful (exit 0)

상태를 가진 프로그램: RPL-2 카운터

체인 20과 같이 program_state 섹션이 있는 체인에서의 예입니다. 카운터는 셀 하나를 읽어 첫 번째 워드에 1을 더해 다시 기록하는 전이만 정확히 허용합니다. 전이의 나머지 부분(번들이 예치하는 금액, 볼트가 지급하는 금액, 프로그램이 발행하는 금액)은 검증 없이 그대로 통과하므로, 이 프로그램은 시연용일 뿐 가치를 맡길 프로그램이 아닙니다.

rand program build --guest rpl2_counter --out counter.json
rand program deploy counter.json                          # prints the program id
rand token create --name "Counter Share" --symbol CTR --decimals 0 --program <id>   # say index 2
rand program state <id> --cell 0100000000000000000000000000000000000000000000000000000000000000   # 64 zeros: absent
cat > step.json <<'JSON'
{ "reads":  [{ "key": "0100…00", "value": "0000…00" }],
  "writes": [{ "key": "0100…00", "value": "0100…00" }],
  "deposit": { "rand": "500000000", "kind": "none" },
  "pays":   [{ "asset": 0, "amount": "200000000", "to": "rand1…" }],
  "mints":  [{ "asset": 2, "amount": "1" }] }
JSON
rand program invoke <id> --transition step.json           # exit 3 if the cell moved since; re-read and retry
rand program vault <id>                                   # asset 0: 300000000 units (0.5 RAND in, 0.2 out)

파일의 …는 전체 64자리 16진수 문자를 나타내며, 지갑은 이를 요구합니다.

deploy와 call이 출력하는 내용

분할 인가(split-authorisation) 체인에서는 모든 번들이 이 머신에서 만든 두 개의 증명으로 구성됩니다. tier-10 지출 인가와 tier-14 번들입니다. 2026-09-30, 체인 18에서 rand v0.6.7로 실행한 program deploy의 출력입니다.

proving the spend authorisation on this machine (tier 10; seconds)…
authorisation proved in 6.8s: tier 10, 1368908 bytes
proving the bundle (tier 14; about a minute and a half on a laptop)…
proved in 116.7s: tier 14, 1500710 bytes
submitted deploy <hash>
  0 RAND out, 59.8545 RAND change, fee 0.1007 RAND, anchored at height 97831, proved in 116.7s (bundle) + 6.8s (auth)

call은 호출 증명 전에 가스와 수수료를 출력하고, 이어서 지불용 번들을 같은 방식으로 증명합니다.

proving the call locally (90 inputs stay private, over the program's 11-word public input)…
gas: 5636 (declaring 6144, tier 12)
fee 0.006191437 RAND (incl. two price steps of headroom)
proved in 29.2s: tier 12, 3346865 bytes, outputs [...]

여기서 6,144는 5,636을 2^10의 배수로 올림한 값이며, rand fee call 12 --gas 6144 --bytes <B>는 여유분 없이 tip의 가격으로 이 한도를 산정합니다.

rand-prover

위임 prover를 별도의 바이너리로 만든 것으로, 지갑의 tier-14 번들 증명을 다른 머신에서 생성합니다. rand-node run --prover는 같은 서비스를 노드 안에서 호스팅합니다. 모든 하위 명령은 --home <DIR>(환경 변수 RAND_PROVER_HOME, 기본값 ~/.rand-prover)을 받으며, 이 디렉터리에 prover.key.json과 pairings.json이 있습니다.

commandargumentsbehaviour
keygenprover.key.json을 모드 0600으로 기록하고 키의 지문을 출력합니다. 덮어쓰기는 거부합니다
pair--name <LABEL> (필수), --url <URL> (기본값 http://127.0.0.1:8600), --own, --qr토큰을 발급하고, 해시만 레이블 아래에 저장하며, rand prover pair가 받는 randprover: 페어링 링크를 출력합니다. 토큰은 링크 안에 한 번만 표시됩니다. --url은 지갑이 이 prover에 접속하는 주소이고, --own은 own=1을 추가하며, --qr은 링크를 터미널 QR 코드로도 출력합니다
unpair--name <LABEL>페어링을 제거합니다. 실행 중인 prover는 시작할 때 파일을 읽으므로 재시작해야 적용됩니다
pairings페어링당 한 줄: 레이블, own 또는 -, 생성 날짜
run--listen <ADDR> (기본값 127.0.0.1:8600), --max-parallel <N> (1), --max-queue <N> (8), --per-token <N> (2), --cuda, --skip-memory-check, --allow-origin <ORIGIN> (반복 가능), --fee <RAND>와 --fee-address <rand1…>, --accept-spend-keyCtrl-C 또는 SIGTERM을 받을 때까지 prover_* JSON-RPC를 제공합니다. 5.74 GB × --max-parallel + 1 GiB의 메모리를 사용할 수 없으면 시작이 거부됩니다. --per-token은 하나의 페어링이 동시에 대기열에 넣거나 증명 중일 수 있는 작업의 수입니다. --accept-spend-key는 v0.6.8에서 폐기되었습니다. run은 이 옵션이 있으면 시작을 거부하며, prover는 viewing-key 증인(witness)만 받습니다. v0.6.7에서는 spend-key 증인을 허용했으며, 이는 번들 게스트 v1 또는 v2를 사용하는 체인만 보냅니다

체인 20의 prover는 지갑의 viewing key nk와 새로운 솔트(salt)를 받습니다. prover는 지출할 수 없지만, 그 지갑이 받았거나 보낸 모든 내역을 읽을 수 있습니다. 거래 내역을 보여줘도 되는 prover와만 페어링하십시오. 지갑은 돌려받은 모든 증명을 검증합니다.

키 파일 형식

노드 키:

{ "seed": "hex of 32 bytes", "address": "base58 of blake3(\"rand-address\" || public key)", "public_key": "hex of 1312-byte Dilithium2 public key" }

지갑 키, 버전 2:

{ "version": 2, "spend_key": "hex of 8 little-endian u32 words (64 characters)" }

rand keygen은 이를 모드 0600으로 기록하며, v0.6.8부터 모든 rand 명령은 그룹 또는 기타 사용자가 읽을 수 있는 지갑 키 파일을 거부합니다. 수동으로 복사하거나 복원한 키는 0600으로 되돌려야 합니다(chmod 600 <key>). 지갑 키를 잃으면 그 키로 열 수 있던 모든 노트를 잃게 되며, 이번 릴리스에는 복구 문구가 없습니다.

fullnode 커밋 c0878c3f(chain 21) 기준으로 2026-10-12에 마지막으로 검증되었습니다. 코드와 이 페이지의 내용이 다를 경우 코드가 옳습니다. 알려 주시기 바랍니다.