이 페이지는 토큰을 아무것도 없는 상태에서 Rand 위의 실제로 전송 가능한 자산으로 만드는 과정을 다룹니다. RPL은 Rand의 토큰 표준이며 chain 14에서 새로 도입되었습니다. ERC-20을 배포했거나 SPL 민트를 생성해 본 적이 있다면 첫 번째 절을 천천히 읽으시기 바랍니다. RPL 토큰은 그 어느 쪽도 아니기 때문입니다. RPL tokens는 이 페이지의 바탕이 되는 개념 페이지입니다.
1. RPL 토큰이란 무엇인가
RPL 토큰은 스마트 컨트랙트가 아니라 원장의 토큰 레지스트리에 있는 하나의 항목입니다. 작성하거나 컴파일하거나 감사할 코드가 없습니다. 토큰을 만드는 일은 레지스트리에 행 하나를 추가하는 트랜잭션 한 건이며, 그 이후 토큰의 단위는 RAND와 같은 풀에 보관되고 같은 방식으로 사용되는 일반 차폐 노트입니다.
| 필드 | 규칙 |
|---|---|
| asset id | 32바이트, 토큰의 정체성. rpl1…로 표기: bech32m, 62자, 체크섬 포함 |
| index | 등록 시 체인이 부여하는 작은 숫자(1, 2, …; 0은 RAND). 이 체인에서 id를 대신하는 약칭 |
| name | 1~32바이트의 UTF-8, 생성 시 고정 |
| symbol | 인쇄 가능한 ASCII 문자 1~12자, 생성 시 고정 |
| decimals | 0~9, 생성 시 고정 |
| mint authority | 추가 발행 권한자: 없음(None), 키(Key), 또는 브리지(Bridge) |
| total supply | 공개되며, 민트 또는 소각으로만 변동 |
심볼은 고유하지 않습니다. Ethereum과 Solana에서와 마찬가지로 누구나 USDC라는 이름의 토큰을 만들 수 있습니다. 토큰의 정체성은 asset id이므로, 토큰을 받거나 상장하기 전에 심볼이 아니라 rpl1… id를 확인하십시오. 텍스트 형식에는 체크섬이 있어서, 잘못 입력한 id는 다른 곳으로 전송되지 않고 거부됩니다.
ERC-20 및 SPL과의 차이
| ERC-20 / SPL | RPL | |
|---|---|---|
| 토큰의 실체 | 컨트랙트, 또는 프로그램이 소유한 계정 | 레지스트리의 행. 토큰별 코드가 없으므로 전송세, 리베이스, 훅이 없음 |
| 잔액 | 주소별로 공개 | 차폐 노트. 누구도 보유자의 잔액을 읽거나 토큰의 보유자 목록을 조회할 수 없음 |
| 전송 | 송신자, 수신자, 금액이 공개 | 송신자가 증명하며 완전히 차폐됨. 관찰자는 RAND 결제와 구별할 수 없음 |
| 수수료 | 체인의 네이티브 코인 | RAND. ERC-20 보유자에게 ETH가 필요하듯, 보유자가 토큰을 옮기려면 소량의 RAND가 필요함 |
| 수신 | SPL은 먼저 토큰 계정이 필요 | 설정할 것이 없음. 어떤 rand1… 주소든 모든 토큰을 받을 수 있음 |
| 금액 | uint256 / u64 | u64, 소수 자릿수는 최대 9 |
| approve / transferFrom | 있음 | v1에서는 지원하지 않음 |
| 동결, 블랙리스트, 일시 중지 | 흔히 있음 | 없음 |
| 메타데이터 | 오프체인이거나 변경 가능 | 온체인이며 변경 불가 |
| 프로그램의 보유 | 가능 | v1에서는 불가 |
공개로 남는 것은 경계 부분입니다. 토큰의 등록, 모든 민트와 모든 소각이 금액과 함께 공개됩니다. 이 덕분에 누구나 총공급량을 감사할 수 있습니다. 보유자 간 전송은 어떤 토큰이 이동했는지를 포함해 아무것도 드러내지 않습니다.
2. 시작하기 전에
| 필요한 것 | 방법 |
|---|---|
rand 명령줄 도구 | Running a node에서 빌드합니다. Command line에 모든 명령이 나와 있습니다 |
| 지갑 | rand keygen이 spend-key 파일을 쓰고 rand address가 해당 rand1… 주소를 출력합니다(Accounts and addresses) |
| 연결할 노드 | 지갑은 JSON-RPC로 노드와 통신하며, 기본값은 http://127.0.0.1:8545의 자체 노드입니다. 노드는 RPC를 localhost에만 바인딩하므로, 일반적인 구성은 chain 20을 따라가는 자체 노드입니다. 노드가 없다면 --rpc https://rpc.randprotocol.org를 지정하십시오. 공개 엔드포인트는 rand faucet을 거부하지만 이 페이지의 나머지 모든 것을 처리합니다(JSON-RPC, the public endpoint) |
| 수수료용 RAND | 지갑에 약간의 RAND. faucet 한 번 호출로 받는 100 RAND면 이 페이지의 모든 작업을 충당할 수 있습니다. 다만 chain 20에서 rand faucet은 제네시스가 허용 목록에 올린 16개 지갑(staking.faucet_recipients)에만 지급하며, 그 외의 주소는 the faucet may not mint to this recipient라는 메시지로 거부합니다. 그 외의 지갑은 RAND를 가진 사람이 보내 주어야 합니다(Mint and burn) |
| 등록 수수료 | 체인의 제네시스 파라미터이며 1~10,000 RAND 사이입니다. chain 20에서는 1 RAND이므로 rand token create의 비용은 1.001 RAND입니다. 모든 트랜잭션이 내는 기본 0.001 RAND에 등록 수수료가 더해진 금액이며, chain 20은 이 등록 수수료를 블록 제안자에게 지급하지 않고 소각합니다. 여기의 다른 모든 명령은 기본 0.001 RAND만 듭니다 |
| 약 6 GB의 여유 메모리 | 모든 트랜잭션은 사용자의 기기에서 증명됩니다. chain 20에서는 증명이 두 개이며, 지갑이 각각에 대해 한 줄씩 출력합니다. proving the spend authorisation on this machine (tier 10; seconds)…, 이어서 proving the bundle (tier 14; about a minute and a half on a laptop)…입니다. 번들 증명은 실행되는 동안 약 100초와 약 5.7 GB의 메모리가 필요합니다. 두 증명은 네트워크상에서 각각 약 1.37 MB와 약 1.5 MB이며, 합쳐서 약 2.85 MB입니다. 이는 체인을 변경하는 아래의 모든 단계, 즉 생성, 각 민트, 각 전송, 각 소각에 해당합니다 |
rand --key wallet.key.json keygen # writes the spend key; refuses to overwrite
rand --key wallet.key.json address # your rand1… address
rand --key wallet.key.json faucet # testnet only, allowlisted wallets only: asks a validator node to mint 100 RAND to this wallet
rand --key wallet.key.json balance # scans the tree, prints the spendable value and the unspent note count
--key의 기본값은 wallet.key.json이며 RAND_KEY로 한 번 설정해 둘 수 있습니다. --rpc(또는 RAND_RPC)는 통신할 노드를 지정하며 기본값은 http://127.0.0.1:8545입니다. 아래 명령에서는 --key를 명시합니다. 증명을 소모하기 전에 노드가 chain 20인지 확인하십시오. 해당 노드에서 JSON-RPC 메서드 rand_chainId는 20을 반환합니다. 지갑은 chain 20 빌드인 v0.6.8이어야 합니다. chain 20은 토큰 민트를 포함한 모든 증명과 서명된 모든 메시지를 제네시스 해시에 바인딩하므로, v0.6.7 rand는 chain 20이 거부하는 증명과 서명을 만들어 냅니다.
3. 토큰 생성
token create는 금액을 토큰의 최소 단위로 받습니다. --fixed-supply와 --initial은 기본 단위의 정수입니다. --decimals 2일 때 1000000은 10,000.00 토큰입니다. 이후의 모든 명령(rand send --asset, rand token mint, rand token burn)은 v0.5.10부터 RAND 금액을 RAND 단위(1.5)로 쓰듯 토큰의 표시 단위를 받습니다. 지갑이 토큰의 레지스트리 행에서 decimals를 읽으며, 토큰이 가진 것보다 많은 소수 자릿수는 거부됩니다. 온체인에서 금액은 항상 기본 단위의 정수입니다.
먼저 한 가지를 정하십시오. 앞으로 더 많은 단위를 발행할 수 있어야 하는가? 이 답은 생성 시 토큰에 고정되며 나중에 넓힐 수 없습니다.
| 고정 공급량 | 추가 발행 가능 | |
|---|---|---|
| mint authority | None | Key: 사용자가 보유한 Dilithium2 키 |
| 공급량 | 전체 공급량을 생성 트랜잭션에서 한 번에 민트 | 0에서, 또는 --initial에서 시작하며 키 보유자가 시간에 걸쳐 민트 |
| 플래그 | --fixed-supply <N> --to <rand1…> | --authority-key-out <FILE>, 선택적으로 --initial <N> --to <rand1…> |
| 적합한 용도 | 발행 한도가 있는 토큰, 멤버십 또는 투표 단위 | 포인트나 보상 토큰처럼 공급량을 늘려 가는 발행자 |
고정 공급량 토큰
rand --key wallet.key.json token create \
--name "Example Credits" \
--symbol EXC \
--decimals 2 \
--fixed-supply 1000000 \
--to rand1…
--to는 공급량을 받는 전체 rand1… 주소이며, 예를 들어 rand address의 출력입니다. --fixed-supply는 기본 단위입니다. 소수 2자리에서 1000000은 10,000.00 EXC입니다.
이 명령은 노드에서 레지스트리의 다음 index와 등록 수수료를 읽고, 초기 민트의 노트를 만들고, 수수료 번들 하나를 증명하고, 등록을 제출한 뒤 블록을 기다립니다. 성공하면 제출 결과를 보고한 다음 index <N>, id <64 hex> (<rpl1…>) 형식의 줄을 출력하고, 이어서 committed at height <H>를 출력합니다. rpl1… id를 적어 두십시오. 이것이 토큰의 정체성이며 이후의 모든 명령이 이를 받습니다.
기본 수수료는 기본 수수료에 체인의 등록 수수료를 더한 금액이며 chain 20에서는 1.001 RAND이므로 따로 계산할 것이 없습니다. --fee(RAND 단위)로 수수료를 올릴 수 있습니다. --no-wait는 트랜잭션이 제출되는 즉시 반환하며 committed 줄을 생략합니다. --cuda는 장착된 NVIDIA GPU에서 증명하며, --features cuda로 빌드해야 하고 CPU로 대체되지 않습니다.
사용자의 토큰이 증명되는 동안 다른 토큰이 등록되면, 그 토큰이 사용자의 토큰을 위해 봉인된 index를 차지합니다. 노드는 등록을 거부하고, 명령은 실제 숫자와 함께 another token took index N first — re-run to register at N+1을 출력합니다. 거부된 등록은 블록에 들어가지 않으며, 손실되는 것은 증명에 든 약 100초의 작업입니다. 명령을 다시 실행하면 다음 index에 대해 증명합니다.
이제 전체 공급량은 --to 주소가 소유한 하나의 차폐 노트에 들어 있습니다. 등록과 그 금액은 공개되며, 수신자가 이후 그 노트로 무엇을 하는지는 공개되지 않습니다.
추가 발행 가능한 토큰
rand --key wallet.key.json token create \
--name "Example Points" \
--symbol EXP \
--decimals 0 \
--authority-key-out exp-authority.key.json
이 명령은 새 Dilithium2 키를 exp-authority.key.json에 기록하고(모드 0600, 기존 파일은 덮어쓰지 않음), 그 키를 민트 권한으로, 공급량을 0으로 하여 토큰을 등록합니다. 출력은 고정 공급량 토큰과 동일한 두 줄입니다. --fixed-supply와 --authority-key-out 중 정확히 하나만 지정해야 합니다.
같은 트랜잭션에서 첫 발행량을 민트하려면 --initial과 --to를 추가합니다. 두 옵션은 함께 지정해야 합니다.
rand --key wallet.key.json token create \
--name "Example Points" \
--symbol EXP \
--decimals 0 \
--authority-key-out exp-authority.key.json \
--initial 5000 \
--to rand1…
등록이 진행되는 동안 키는 exp-authority.key.json.pending에 있습니다. 체인이 등록을 수락하면 exp-authority.key.json으로 승격되고, 체인이 거부하면 폐기됩니다. 결과를 알 수 없는 상태에서 연결이 끊어지면 파일은 .pending에 남습니다. 삭제하기 전에 rand token list를 확인하십시오.
키 파일은 토큰을 찍어낼 수 있는 권한입니다. 오프라인으로 보관하고 백업해 두십시오. 이 키는 지갑의 지출 키와 별개이며, 송금이나 수신에는 필요하지 않습니다.
첫 민트의 수신자가 id에 포함되는 이유
등록은 생성자가 서명하지 않습니다. 멤풀에서 대기 중인 등록을 본 누구나 그 사본을 자신의 수수료 번들로 비용을 지불하여 제출할 수 있습니다. 자산 id가 이름, 심볼, 수량만 포함한다면, 그 사본은 복사한 사람의 주소를 수신자로 지정한 채 먼저 블록에 들어갈 수 있습니다. 그러면 그 사람이 해당 id를 소유하게 되고, 고정 공급량 토큰이라면 전체 공급량을 영구히 소유하게 됩니다.
그래서 id는 등록에 담긴 모든 것, 즉 초기 민트의 수량, 수신자, 무작위값, 시각, 암호화된 봉투까지 포함한 해시입니다. 수신자가 다른 사본은 다른 자산 id로 해시됩니다. 그것은 심볼만 같은 다른 토큰이며, 고유하지 않은 심볼이 약속하는 것은 애초에 그뿐입니다. 당신의 id는 오직 당신의 수신자로만 등록될 수 있습니다.
--salt <hex32>는 id에도 반영되는 32바이트 솔트를 지정합니다. 생략하면 지갑이 무작위로 선택합니다. 토큰이 존재하기 전에 id를 공개하는 경우처럼 id를 재현할 수 있어야 할 때 지정하십시오.
확인
rand token info rpl1… # by id: rpl1… or 64 hex characters
rand token info 2 # or by the index `token create` printed
rand token list --limit 20 # one page of the registry; --from <index> pages on
token info는 토큰의 행을 JSON으로 출력합니다. 필드는 index, id, id_text(rpl1… 형식), name, symbol, decimals, authority, mint_nonce, total_supply, registered_at입니다. authority는 고정 공급량 토큰이면 {"kind":"none"}이고, 민트 가능한 토큰이면 {"kind":"key","key":…,"address":…}입니다. total_supply는 기본 단위의 십진수 문자열입니다. token list는 enabled, registration_fee, next_index, 그리고 tokens 행들을 출력합니다. 두 명령 모두 노드의 전체 목록을 읽으므로, 노드는 당신이 어떤 토큰에 관심이 있었는지 알 수 없습니다.
JSON-RPC로도 조회할 수 있으며, 매개변수는 인덱스, 64자 16진수 id, rpl1… 형식 중 무엇이든 됩니다.
curl -s http://127.0.0.1:8545 -H 'content-type: application/json' -d '{
"jsonrpc": "2.0", "id": 1,
"method": "rand_getToken",
"params": ["rpl1…"]
}'
결과는 token info가 출력하는 것과 같은 행이며, 해당 토큰이 없으면 null입니다. 형식이 잘못된 id(체크섬 오류, 대소문자 혼용, 길이 오류)는 오류 -32602를 반환합니다. rand_getTokens는 [from_index, limit]을 받아 등록된 모든 토큰을 페이지 단위로 조회하고, rand_getTokenSupply는 { total_supply, backings }만 반환합니다. 어느 것도 키가 필요하지 않습니다. JSON-RPC를 참고하십시오.
현재 chain 20에 존재하는 행은 인덱스 1의 브리지 토큰인 zUSD입니다. 탐색기는 자체 노드 없이도 노드의 레지스트리를 제공합니다.
curl -s https://randscan.org/api/v1/tokens
2026-09-20의 chain 14에서는 "registration_fee": 1000000000, "next_index": 2와 하나의 토큰을 반환했으며, 여기서는 첫 번째 담보만 남기고 줄였습니다.
{
"index": 1,
"id": "32e5ab28c782c663e14da2650a3feb12f16a12db85599f4f62dc169d26f37b1f",
"id_text": "rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx",
"name": "Shielded USD",
"symbol": "zUSD",
"decimals": 8,
"authority": {
"kind": "bridge",
"backings": [
{ "chain": 2, "token": "000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7",
"decimals": 6, "locked": "0", "minted_today": "0", "mint_day": 20716,
"mint_cap_per_day": "10000000000000" }
]
},
"mint_nonce": 0,
"total_supply": "0",
"registered_at": 256
}
chain 20에서 이 행의 id, id_text, 이름, 심볼, 담보는 동일하지만, zUSD는 높이 256에서 등록된 것이 아니라 제네시스에 등재되어 있으며(registered_at은 0), 공급량은 chain 19에서 이월된 99 zUSD로 시작했습니다. 내역은 Ethereum USDT에 22, BSC USDT에 22, Tron USDT에 30, Solana USDT에 25가 잠겨 있습니다. (chain 19는 모두 Solana에 있는 10 zUSD로 시작했고, chain 18은 Tron 9와 Solana 1로 시작했습니다.) 각 담보 행에는 롤링 윈도 필드인 minted_in_window, mint_window_secs, mint_headroom도 포함됩니다.
탐색기의 registration_fee는 JSON 숫자이며, 노드의 RPC는 다른 모든 금액과 마찬가지로 십진수 문자열로 반환합니다. chain 20에서는 chain 15 이후의 모든 체인과 마찬가지로 노드의 rand_getTokens가 max_tokens(4096), burn_registration_fee, bound_note_value(둘 다 true)도 함께 반환합니다(RPL tokens).
4. 민트와 권한 이양
Key 권한이 있는 토큰만 민트할 수 있으며, 해당 키로만 가능합니다.
rand --key wallet.key.json token mint \
--asset rpl1… \
--to rand1… \
--amount 5000 \
--authority-key exp-authority.key.json
--amount는 토큰의 표시 단위입니다. 소수 자릿수가 0인 이 토큰에서 5000은 5,000 기본 단위이고, 소수 자릿수가 6인 토큰에서 1.5는 1,500,000입니다. 지갑은 노트나 증명을 만들기 전에 토큰의 행을 읽고, 토큰이 Key 권한이 아니거나 --authority-key가 레지스트리에 기재된 키가 아니면 거부합니다. 성공하면 제출 사실을 보고하고 minted <amount> (<base units> units) of asset <index> to <address>를 출력합니다. --fee(기본값 0.001 RAND), --no-wait, --cuda는 token create와 동일하게 동작합니다.
민트는 수신자를 위한 노트 하나를 추가하고 총 공급량을 늘립니다. 수량과 수신자의 공개 키는 와이어에 노출됩니다. 민트는 브리지를 통한 입금과 마찬가지로 설계상 공개 이벤트입니다. 수신자가 그 노트를 이동하면 다른 모든 것과 같이 차폐됩니다. 수수료를 지불하는 지갑(--key)과 민트를 승인하는 키(--authority-key)는 서로 다른 키이며, 서로 다른 사람이 보유할 수 있습니다.
각 민트는 체인 id, 자산 id, 레지스트리가 유지하는 카운터에 대해 서명되고, chain 20에서는 제네시스 해시에 대해서도 서명됩니다(rand-rpl-mint-2). 따라서 민트는 이 체인에서 재전송될 수 없고, 체인 id가 같은 다른 체인으로 복사될 수도 없습니다. set-authority도 같은 방식으로 묶여 있습니다.
권한을 새 키로 옮기거나 영구히 포기하려면 다음을 사용합니다.
rand --key wallet.key.json token set-authority \
--asset rpl1… \
--authority-key exp-authority.key.json \
--new-key next-authority.key.json
rand --key wallet.key.json token set-authority \
--asset rpl1… \
--authority-key exp-authority.key.json \
--renounce
--new-key는 키 파일을 받아 토큰을 그 파일의 공개 키에 넘깁니다. --new-key와 --renounce 중 정확히 하나만 지정해야 합니다. 명령은 asset <index>'s mint authority is now <public key hex> 또는 asset <index>'s mint authority is renounced for good을 출력합니다. 각각 기본 0.001 RAND와 한 차례의 증명 생성 비용이 듭니다. --renounce는 토큰을 현재 공급량의 고정 공급량 토큰으로 바꿉니다. 이는 되돌릴 수 없습니다. 권한은 키에서 키로, 또는 키에서 아무도 아닌 상태로만 넘어갈 수 있고, 그 밖의 경로는 없습니다. 고정 공급량으로 만들어진 토큰은 민트 가능하게 될 수 없습니다.
5. 사용
송금
rand --key wallet.key.json send rand1… 250 --asset rpl1…
이 명령은 표시 단위로 이 토큰 250을 보냅니다. 소수 자릿수 0이면 250 EXP, 2이면 250.00 EXC(25,000 기본 단위)입니다. 수신자와 수량은 RAND와 마찬가지로 위치 인자입니다. 증명을 시작하기 전에 지갑은 to fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <symbol> (<base units> units) 한 줄을 출력하고 send? [y/N]을 묻습니다. 지문은 수신자의 지문과, 기본 단위는 의도한 값과 대조하여 확인하십시오. --yes는 질문을 건너뛰며, 스크립트는 반드시 이를 전달해야 합니다. 없으면 터미널이 아닌 stdin은 거부됩니다. --asset은 인덱스, rpl1… id, 64자 16진수 id를 받으며, 생략하면 RAND를 보냅니다. --memo <text>는 최대 510바이트의 텍스트를 결제의 봉투 안에 수신자 앞으로 봉인하며, chain 18이 이를 처음 허용한 체인입니다. 메모가 있다는 사실은 체인 어디에도 드러나지 않습니다. --fee는 항상 RAND 단위이며 기본값은 0.001입니다. --no-wait와 --cuda도 적용됩니다. id는 노드의 전체 레지스트리 목록에서 인덱스로 변환되고, 숫자 인덱스는 노드에 전달되지 않으므로, 노드는 어떤 토큰이 이동하려 하는지 알지 못합니다. 이것은 RAND를 보내는 것과 동일한 rand send이며, 증명도 동일합니다. 트랜잭션은 어떤 자산이 이동했든 널리파이어 네 개, 커밋먼트 네 개, RAND 수수료, 시각, 암호화된 봉투 네 개, 번들 증명, 그리고 chain 17 이후에는 인가 커밋먼트와 그 증명을 공개합니다. 관찰자는 토큰 전송과 RAND 결제를 구별할 수 없고, 어떤 토큰인지도 알 수 없으며, 발신자, 수신자, 수량도 볼 수 없습니다.
수수료는 같은 번들에서 RAND로 지불되므로, 보내는 지갑은 RAND를 어느 정도 보유해야 합니다. 지갑은 증명을 시작하기 전에 이를 확인합니다.
잔액 확인
rand --key wallet.key.json asset-balance 2 # one token, by index
rand --key wallet.key.json asset-balance # a row for every token this wallet holds
인자는 레지스트리 인덱스입니다. 토큰 하나를 지정하면 지갑은 기본 단위로 asset <index> balance: <N> units를 출력합니다. rand notes는 지갑이 열어 본 모든 노트를 asset 인덱스와 함께 나열합니다. 지갑은 뷰잉 키로 체인을 스캔하여 자신의 노트를 찾습니다. 체인에는 조회할 수 있는 잔액이 어디에도 없습니다.
소각
rand --key wallet.key.json token burn rpl1… 100
자산과 수량은 위치 인자입니다. 자산은 인덱스, rpl1…, 16진수 중 하나이고, 수량은 send --asset이 읽는 것과 같은 토큰의 표시 단위입니다. --fee의 기본값은 0.001 RAND이며, --no-wait와 --cuda도 적용됩니다.
소각은 단위를 파기하고 총 공급량을 줄입니다. 민트와 마찬가지로 공개 경계입니다. 수량과 토큰은 보이지만 보유자는 보이지 않습니다. zUSD 같은 브리지 토큰은 이 방식으로 소각되지 않습니다. token burn은 증명 전에 이를 거부하며, 이 토큰은 그 뒤에 있는 코인을 해제하는 rand bridge-burn을 통해 떠납니다.
6. 탐색기에서 확인
randscan.org는 토큰의 공개 정보, 즉 등록, 발행과 소각, 총 공급량을 누구에게나 보여 줍니다. 모든 토큰은 randscan.org/tokens에 나열되며, 개별 토큰의 페이지는 /tokens/<rpl1…>, /tokens/<64 hex> 또는 /tokens/<index>입니다. randscan.org/tokens/1은 zUSD입니다. 같은 데이터는 GET /api/v1/tokens와 GET /api/v1/tokens/:id에서도 제공되며, 후자는 토큰의 배포 트랜잭션과 등록, 발행, 소각으로 이루어진 공급량 이력을 함께 반환합니다(Explorer API).
전송의 공개 페이지에는 자산도, 금액도, 당사자도 표시되지 않습니다. 체인이 그 정보를 가지고 있지 않기 때문입니다. 감사인, 거래 상대방, 거래소 등 다른 사람에게 결제를 증명하려면 키를 건네야 합니다.
| 키 | 보유자가 볼 수 있는 것 |
|---|---|
| 트랜잭션 키 | 한 트랜잭션의 출력 하나가 열립니다: 토큰, 금액, 당사자 |
| 조회 키 | 지갑이 보내거나 받은 모든 노트를 같은 수준의 세부 정보와 함께, 각 노트가 사용되었는지 여부까지 볼 수 있습니다 |
rand --key wallet.key.json tx-key <TX_HASH> # the keys for one transaction
rand --key wallet.key.json viewing-key # the wallet's viewing key, 64 hex characters
tx-key는 해당 트랜잭션의 출력 중 이 지갑이 보냈거나, 받았거나, 잔돈으로 보관한 출력마다 한 행씩 출력합니다. 각 행에는 출력(bundle:0부터 bundle:3까지, 번들의 네 슬롯), 역할, 금액(RAND 단위, 토큰은 N (asset I)), 그리고 그 출력을 봉인한 트랜잭션별 키가 담깁니다. sent 행의 키를 전달하십시오. 지갑이 체인에서 키를 복구하므로, 과거의 어떤 트랜잭션에도 사용할 수 있습니다.
트랜잭션 키를 randscan의 해당 트랜잭션 페이지에 붙여 넣으면 그 출력이 열립니다. 탐색기는 자산 인덱스를 레지스트리에서 조회하여 토큰을 이름으로 표시하고, 소수 자릿수를 적용합니다. 조회 키는 randscan.org/viewing에 입력합니다. 탐색기는 키를 보관하지 않으며, 서버에서 어떤 것도 복호화하지 않습니다. JSON-RPC에서는 같은 공개를 rand_checkTransaction(hash, key)로 수행합니다. 두 키 모두 아무것도 사용할 수 없습니다. 조회 키는 한 번 공유하면 되돌릴 수 없으므로, 증명이 필요한 결제가 하나뿐이라면 트랜잭션 키를 사용하는 편이 좋습니다.
7. 브리지된 토큰
zUSD(“차폐 USD”)도 RPL 토큰이며, Bridge 권한을 가집니다. 이 토큰의 단위는 가디언이 Ethereum, Binance Smart Chain, Tron 또는 Solana에서의 USDT 또는 USDC 예치를 증명할 때에만 발행되며, 공급량은 항상 그곳에 잠긴 금액과 같습니다. zUSD는 체인 14에서 높이 256의 트랜잭션으로 인덱스 1, 백킹 7개와 함께 등록되었고, 이후 모든 체인(체인 20 포함)의 제네시스에 같은 id인 rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx로 다시 수록되어 있습니다. 체인 15는 체인 14가 중단되었을 때 남아 있던 zUSD 10개를 이어받았고, 체인 16부터 19까지는 같은 zUSD 10개로 시작했으며, 체인 20은 체인 19에 남아 있던 zUSD 99개로 시작했습니다. 체인 20에서 브리지는 각 예치와 각 상환에서 10 bps를 zUSD로 떼어 트레저리 노트로 보냅니다(Bridge). zUSD는 바스켓입니다. 백킹은 액면가로 풀링되므로, 보유자는 자신이 예치한 코인만이 아니라 목록에 있는 모든 코인의 위험을 부담합니다(RPL tokens). 공급량은 예치와 상환이 있을 때마다 변하며, 현재 수치는 rand token info 1 또는 탐색기의 /tokens/1에서 확인할 수 있습니다.
이전 testnet이었던 체인 14에서의 이력입니다(2026-09-20에 탐색기에서 확인). 이 표는 체인 14의 기록입니다. 체인 14는 폐기되었으므로 이 트랜잭션들은 체인 20 탐색기에 없습니다.
| 내용 | 트랜잭션(체인 14) | 높이 |
|---|---|---|
등록(register_bridged_token) | 7fa28fe6277a82401dcc440ff32da13c5e5763f79826fb17cc508f4c15abdd13 | 256 |
브리지 발행(bridge_attest) | f2f24d75bc0e7d84dff1f4e4518a9d4bef115392492a39befca1528a2404851d | 2,572 |
| 차폐된 zUSD 전송 | e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed | 3,259 |
브리지 소각(bridge_burn) | f9f365ca170a5fb51ff9381d7b5cc39538c1a621e5f6e8c1bd74d8751c7bbc49 | 3,481 |
이 전송의 페이지에는 모든 토큰 전송이 보여 주는 것, 즉 널리파이어 4개, 커밋먼트 4개, 수수료만 표시되었고, zUSD가 이동했다는 단서는 어디에도 없었습니다.
키가 무엇을 공개하는지 보여 주기 위해, 풀노드의 v0.5 릴리스 노트는 체인 14의 그 전송에 대한 키 두 개를 공개했습니다. 이 키들은 그 목적을 위해 만든, 다른 자산은 전혀 들어 있지 않은 데모 지갑에서 나온 것입니다.
| 키 | 값 | 열리는 것 |
|---|---|---|
| 전송의 트랜잭션 키 | 7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4ef | 해당 트랜잭션 하나의 출력 bundle:0: asset 1의 100000000, 즉 1 zUSD |
| 데모 지갑의 조회 키 | a93c673ffeff7204447161347828d8e549b7070460813ae1b7e664694e1dcd5d | 그 지갑이 보내거나 받은 모든 노트 |
체인 14에서는 이 트랜잭션 키로 전송 페이지에서 해당 출력이 열렸고, JSON-RPC에서는 호출 한 번으로 가능했습니다(2026-09-20에 확인). 체인 20에서도 자신의 트랜잭션에 대해서는 같은 형태로 호출합니다. 위의 체인 14 값을 사용하면 체인 20 노드는 그 트랜잭션을 가진 적이 없으므로 null로 응답합니다(2026-10-01에 확인).
curl -s https://rpc.randprotocol.org -H 'content-type: application/json' -d '{
"jsonrpc": "2.0", "id": 1, "method": "rand_checkTransaction",
"params": ["e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed",
"7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4ef"] }'
사용 중인 지갑의 조회 키는 절대 공개하지 마십시오. 그 지갑의 전체 이력이 영구히 노출됩니다.
일반 주소로는 브리지된 토큰을 만들 수 없습니다. rand token create는 Bridge 권한을 거부하며, 브리지된 토큰을 등록하거나 기존 토큰 뒤에 코인을 추가하려면 브리지의 양자내성 가디언 집합이 서명한 쿼럼이 필요합니다. 그런 절차 없이 스스로 zUSD라고 이름 붙인 토큰은 심볼만 빌린 또 하나의 토큰일 뿐이며, 이것이 rpl1… id를 확인해야 하는 또 하나의 이유입니다. Rand에서 브리지된 토큰의 소수 자릿수는 항상 8입니다.
예치, 상환, 가디언 집합은 Bridge에서 다룹니다.