기본 데이터 유형(Basic Data Types)

각기 다른 유형의 객체는 각기 다른 방식으로 고유하게 식별됩니다: 계정은 주소로 식별됩니다(예: "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59"). 주소는 항상 "r"로 시작합니다. 많은 rippled 메소드는 16진수 표현도 허용합니다. 트랜잭션은 트랜잭션의 바이너리 형식의 해시로 식별됩니다. 트랜잭션의 송금 계정과 시퀀스 번호로도 트랜잭션을 식별할 수 있습니다. 닫혀있는 각 ledger에는 ledger 인덱스와 해시값이 있습니다. ledger를 지정할 때 두 가지 중 하나를 사용할 수 있습니다.

주소(Addresses)

XRP Ledger의 계정은 XRP Ledger의 base58 형식의 주소로 식별됩니다. 주소는 계정의 마스터 공개 키에서 파생되며, 이는 다시 비밀 키에서 파생됩니다. 주소는 JSON에서 문자열로 표시되며 다음과 같은 특징이 있습니다:

  • 25~35자 길이.

  • 문자 r로 시작.

  • 숫자 "0", 대문자 "O", 대문자 "I", 소문자 "l"을 제외한 영숫자 문자 사용.

  • 대소문자 구분.

  • 임의의 문자로부터 유효한 주소를 생성할 확률이 약 2**32분의 1이 되도록 4바이트 체크섬을 포함합니다.

Note:

XRP 커뮤니티에서는 주소에 데스티네이션 태그를 "포장"하는 X-주소 형식을 제안했습니다. 이러한 주소는 X(메인넷의 경우) 또는 T(테스트넷의 경우)로 시작합니다. 거래소와 지갑은 X-주소를 사용하여 고객이 알아야 하는 모든 데이터를 하나의 값으로 나타낼 수 있습니다. 자세한 내용은 X-주소 형식 사이트 및 코덱을 참조하세요.

XRP Ledger 프로토콜은 기본적으로 "클래식" 주소만 지원하지만, 많은 클라이언트 라이브러리가 X-주소도 지원합니다.

자세한 내용은 계정 및 base58 인코딩을 참조하세요.

해시(Hashes)

XRP Ledger의 많은 객체, 특히 트랜잭션과 ledger은 256비트 해시값으로 고유하게 식별됩니다. 이 값은 일반적으로 일부 내용에서 SHA-512 해시를 계산한 다음 출력의 첫 번째 절반을 취하는 "SHA-512Half"로 계산됩니다. (이는 256비트, 즉 32바이트 또는 16진수 표현으로 64자에 해당합니다.) 객체의 해시는 충돌이 발생할 가능성이 극히 낮은 방식으로 내용물에서 파생되므로, 동일한 해시를 가진 두 객체는 동일한 것으로 간주할 수 있습니다. XRP Ledger 해시 값은 다음과 같은 특징을 가지고 있습니다:

  • 정확히 64자 길이.

  • 16진수 문자 집합: 0-9 및 A-F.

  • 일반적으로 대문자로 작성됩니다.

Note:

SHA-512Half는 공식적으로 정의된 SHA-512/256 해시 함수와 유사한 보안성을 가지고 있습니다. 그러나 XRP Ledger는 SHA-512/256보다 먼저 사용되었으며, 기존 SHA-512 함수 위에 구현하기가 더 쉽습니다. (이 글을 쓰는 현재, 암호화 라이브러리에서 SHA-512를 지원하는 것이 SHA-512/256보다 훨씬 더 일반적입니다.)

해시 접두사(Hash Prefixes)

많은 경우, XRP Ledger는 해시를 계산하기 전에 객체의 바이너리 데이터에 4바이트 코드를 접두사로 붙이기 때문에, 바이너리 형식이 동일하더라도 다른 유형의 객체는 다른 해시를 갖습니다. 기존 4바이트 코드는 알파벳 세 개와 0바이트가 뒤에 오는 ASCII로 인코딩된 구조로 되어 있습니다. 일부 유형의 해시는 API 요청과 응답에 나타납니다. 다른 유형은 특정 유형의 데이터에 서명하거나 상위 수준의 해시를 계산하는 첫 번째 단계로만 계산됩니다. 다음 표는 XRP Ledger가 사용하는 모든 4바이트 해시 접두사를 보여줍니다:

객체 유형
API 필드
해시 접두사(16진수)
해시 접두사(텍스트)

컨센서스 제안

N/A

0x50525000

PRP\0

Ledger 버전

ledger_hash

0x4C575200

LWR\0

Ledger 상태 데이터

ledger headeraccount_state

0x4D4C4E00

MLN\0

Ledger 데이터 내부 노드

N/A

0x4D494E00

MIN\0

Ledger 데이터 내부 노드(SHAMapv2)

N/A

0x494E5200

INR\0

결제 채널 클레임

N/A

0x434C4D00

CLM\0

서명된 트랜잭션

hash of transactions

0x54584E00

TXN\0

메타데이터를 사용한 트랜잭션

N/A

0x534E4400

SND\0

서명되지 않은 트랜잭션(단일 서명)

N/A

0x53545800

STX\0

서명되지 않은 트랜잭션(다중 서명)

N/A

0x534D5400

SMT\0

유효성 검사 투표

N/A

0x56414C00

VAL\0

유효성 검사기 매니페스트

N/A

0x4D414E00

MAN\0

Ledger 객체 ID도 비슷한 방식으로 계산되지만, 여기에 설명된 형식의 접두사 대신 "스페이스 키"라고 하는 2바이트 접두사를 사용합니다.

계정 시퀀스(Account Sequence)

시퀀스 번호는 32비트 부호 없는 정수로, 특정 발신자의 트랜잭션이 각각 한 번씩만 올바른 순서로 실행되도록 하는 데 사용됩니다.

XRP Ledger의 모든 계정에는 시퀀스 필드에 시퀀스 번호가 있으며, 해당 계정이 트랜잭션을 전송하고 해당 트랜잭션이 검증된 ledger에 포함될 때마다 시퀀스 번호는 1씩 증가합니다. 또한 각 트랜잭션에는 시퀀스 필드에 시퀀스 번호가 있으며, 트랜잭션이 실행될 때 계정의 현재 시퀀스 번호와 일치해야 합니다. 각 계정에 대해 각 시퀀스 번호는 번호 순서대로 한 번만 사용할 수 있습니다.

티켓은 이러한 규칙에서 몇 가지 예외를 적용하므로 일반적인 순서를 벗어난 트랜잭션을 보낼 수 있습니다. 티켓은 나중에 사용하기 위해 예약된 시퀀스 번호를 나타내며, 트랜잭션은 일반 시퀀스 번호 대신 티켓을 사용할 수 있습니다.

DeletableAccounts 수정으로 계정의 시작 시퀀스 번호는 계정이 생성된 ledger 버전의 ledger 인덱스와 일치합니다. DeletableAccounts 이전에는 모든 계정이 시퀀스 번호 1로 시작되었습니다.

트랜잭션이 ledger에 포함될 때마다 트랜잭션이 성공적으로 실행되었는지 또는 tec-class 오류 코드와 함께 실패했는지 여부에 관계없이 시퀀스 번호(또는 티켓)가 소모됩니다. 다른 트랜잭션 실패는 ledger에 포함되지 않으므로 발신자의 시퀀스 번호가 변경되거나 다른 영향을 미치지 않습니다.

ledger에서 주소와 시퀀스 번호는 때때로 해당 발신자와 시퀀스 번호로 유효성이 검증된 트랜잭션에 의해 생성된 객체를 식별하기 위해 함께 사용됩니다. 에스크로와 제안이 이러한 방식으로 식별되는 객체의 예입니다.

여러 개의 미확인 트랜잭션이 동일한 발신자 및 시퀀스 번호를 가질 수 있습니다. 이러한 트랜잭션은 상호 배타적이며, 최대 하나의 트랜잭션만 검증된 ledger에 포함될 수 있습니다. (다른 트랜잭션은 궁극적으로 아무런 효력이 없습니다.)

Ledger 인덱스(Ledger Index)

Ledger 인덱스는 ledger을 식별하는 데 사용되는 32비트 부호 없는 정수입니다. ledger 인덱스는 ledger의 시퀀스 번호라고도 합니다. (이는 계정 시퀀스와는 다릅니다.) 첫 번째 ledger은 ledger 인덱스 1이며, 각각의 새 ledger는 바로 앞 ledger의 ledger 인덱스보다 1 높은 ledger 인덱스를 갖습니다.

Ledger 인덱스는 ledger의 순서를 나타내며, 해시 값은 ledger의 정확한 내용을 식별합니다. 동일한 해시를 가진 두 개의 ledger은 항상 동일합니다. 검증된 ledger의 경우 해시값과 ledger 인덱스는 동일하게 유효하며 1:1의 상관관계를 갖습니다. 그러나 진행 중인 ledger의 경우 그렇지 않습니다:

  • 네트워크 전체에 트랜잭션을 전파하는 데 걸리는 지연 시간으로 인해 두 개의 서로 다른 rippled 서버는 동일한 ledger 인덱스를 가진 현재 ledger에 대해 서로 다른 내용을 가질 수 있습니다.

  • 합의를 통해 유효성을 검증받기 위해 경쟁하는 여러 개의 폐쇄 ledger 버전이 있을 수 있습니다. 이러한 ledger 버전은 ledger 인덱스는 같지만 내용이 다르고 해시가 다릅니다. 이러한 폐쇄 ledger 중 하나만 검증될 수 있습니다.

  • 현재 오픈 ledger의 해시는 계산되지 않습니다. 이는 현재 ledger의 내용이 시간이 지남에 따라 변경되어 ledger 인덱스가 동일하게 유지되더라도 해시가 변경될 수 있기 때문입니다. ledger의 해시는 ledger가 닫힐 때만 계산됩니다.

Ledgers 지정하기(Specifying Ledgers)

많은 API 메소드에서는 ledger의 인스턴스를 지정해야 하며, 검색된 데이터는 공유 ledger의 특정 버전을 기준으로 최신 데이터로 간주됩니다. ledger 버전을 허용하는 명령은 모두 동일한 방식으로 작동합니다. 사용할 ledger을 지정하는 방법은 세 가지가 있습니다:

  1. Ledger Index 매개변수의 ledger_index로 ledger를 지정합니다. 각 폐쇄 ledger는 이전 ledger보다 1 높은 ledger 인덱스를 갖습니다. (첫 번째 ledger은 ledger 인덱스가 1입니다.)

"ledger_index": 61546724
  1. ledger_hash 매개변수의 해시 값으로 ledger를 지정합니다.

"ledger_hash": "8BB204CE37CFA7A021A16B5F6143400831C4D1779E6FE538D9AC561ABBF4A929"
  1. ledger_index 매개변수에서 다음 단축키 중 하나로 ledger을 지정합니다:

  • 컨센서스에 의해 검증된 가장 최근의 ledger에 대해 검증됨.

"ledger_index": "validated"
  • 수정을 위해 닫히고 검증을 위해 제안된 가장 최근의 ledger에 대한 닫힘.

  • current는 서버의 현재 작동 중인 ledger 버전입니다.

위의 세 가지 형식 중 하나를 허용하는 더 이상 사용되지 않는 ledger 매개변수도 있습니다. 이 매개변수는 별도의 통지 없이 제거될 수 있으므로 사용하지 마세요.

ledger를 지정하지 않으면 서버가 요청을 처리하는 데 사용할 ledger을 결정합니다. 기본적으로 서버는 현재(진행 중) ledger을 선택합니다. 리포팅 모드에서는 서버가 가장 최근에 유효성이 검증된 ledger을 대신 사용합니다. ledger을 지정하는 필드를 두 개 이상 제공하지 마세요.

Note:

ledger를 지정하는 기본 동작에 의존하지 마세요. 기본 동작은 변경될 수 있습니다. 가능하면 항상 요청에 ledger 버전을 지정하세요.

리포팅 모드는 검증이 완료될 때까지 ledger 데이터를 기록하지 않습니다. 리포팅 모드 서버에 현재 또는 폐쇄 ledger을 요청하면 서버는 P2P 모드 서버로 요청을 전달합니다. 유효성이 확인되지 않은 ledger 인덱스나 해시를 요청하면 보리포팅 모드 서버는 lgrNotFound 오류로 응답합니다.

화폐 금액 지정하기(Specifying Currency Amounts)

XRP Ledger에는 두 가지 종류의 화폐가 있습니다: XRP와 토큰입니다. 이 두 가지 유형의 화폐는 서로 다른 정밀도와 반올림 동작으로 서로 다른 형식으로 지정됩니다.

결제 트랜잭션의 데스티네이션 금액과 같은 일부 필드는 두 가지 유형 중 하나를 사용할 수 있습니다. 수수료 필드(트랜잭션 비용)와 같이 일부 필드에서는 XRP만 사용할 수 있습니다.

XRP는 XRP "드롭"의 정수가 포함된 문자열로 지정되며, 여기서 백만 드롭은 1XRP와 같습니다. 대신 토큰은 소수점 금액, 화폐 코드 및 발행자 필드가 있는 객체로 지정됩니다. 예를 들면 다음과 같습니다:

  • XRP - 값이 13.1XRP인 금액 필드를 지정합니다:

"Amount": "13100000"
  • 토큰 - 값이 13.1 FOO인 금액 필드를 지정하려면 rf1B가 발행했거나:

"Amount": {
    "value": "13.1",
    "currency": "FOO",
    "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn"
}

자세한 내용은 화폐 형식을 참조하십시오.

시간 지정하기(Specifying Time)

rippled 서버와 해당 API는 시간을 부호 없는 정수로 표시합니다. 이 숫자는 2000년 1월 1일(00:00 UTC)의 "Ripple 에포크" 이후의 시간(초)을 측정합니다. 이는 유닉스 에포크가 작동하는 방식과 비슷하지만, Ripple 에포크는 유닉스 에포크 이후 946684800초가 된다는 점이 다릅니다.

Ripple 에포크 시간을 32비트 변수로 유닉스 에포크 시간으로 변환하면 정수 오버플로가 발생할 수 있으므로 변환하지 마세요.

Last updated