For the complete documentation index, see llms.txt
Ledger error reference
midnight-ledger 크레이트는 트랜잭션 검증, 실행, 상태 관리 오류의 전체 분류 체계를 정의합니다. 노드가 표면화하는 숫자형 LedgerApiError 코드 뒤에 있는 Rust 수준 오류 타입입니다.
Error hierarchy
중첩된 오류 출력을 읽을 때는 상위 수준부터 하위 수준까지 이어지는 연결 고리를 이해하는 것이 중요합니다. 연결 고리 상단의 MalformedTransaction::InvalidProof가 컨트랙트 트랜스크립트 실행 내부 깊숙한 곳의 OnchainProgramError::Decode까지 거슬러 올라갈 수 있습니다.
MalformedTransaction
└─ wraps zswap::MalformedOffer
└─ wraps TranscriptRejected
└─ wraps OnchainProgramError
└─ wraps InvalidBuiltinDecode
└─ wraps merkle_tree::InvalidUpdate
Error types
다음 섹션에서는 연결 고리에 속한 각 오류 타입을 상위 수준의 트랜잭션 엔벨로프부터 하위 수준의 트리 및 VM 작업까지 설명합니다.
MalformedTransaction
50개가 넘는 변형이 있으며 MalformedTransaction<D>로 매개변수화됩니다. 레저가 상태를 적용하기 전에 검사하는 구조적 유효성 오류입니다. 레저는 잘못된 형식의 트랜잭션을 상태 변경 없이 거부합니다.
Proof and cryptographic errors
영지식 증명 검증 또는 암호학적 일관성 검사의 실패를 나타내는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
BindingCommitmentOpeningInvalid | 바인딩 커밋먼트 opening이 커밋된 값과 일치하지 않는 경우 | 트랜잭션 구성 버그를 나타냅니다. 커밋먼트 생성 과정을 다시 확인하세요 |
InvalidNetworkId | 트랜잭션이 다른 네트워크를 대상으로 하는 경우(예: Mainnet vs. Devnet) | 올바른 네트워크 ID를 대상으로 트랜잭션을 다시 빌드하세요 |
InvalidProof | 영지식 증명이 검증에 실패한 경우 | 다시 증명해야 합니다. witness와 public input이 일치하는지 확인하세요 |
InvalidSchnorrProof | Schnorr 서명 증명이 검증에 실패한 경우 | 키 불일치 또는 서명 데이터 손상입니다. 다시 서명하세요 |
PedersenCheckFailure | Pedersen 커밋먼트 일관성 검사에 실패한 경우 | 잔액 또는 값 인코딩 오류입니다. 트랜잭션 값을 다시 확인하세요 |
Structural errors
정규 형식이나 트랜잭션 구조 규칙의 위반을 나타내는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
FallibleWithoutCheckpoint | 폴러블 트랜잭션 세그먼트에 필수 체크포인트가 없는 경우 | 폴러블 세그먼트에 체크포인트를 추가하세요 |
NotNormalized | 트랜잭션 필드가 필수 정규 정렬 순서가 아닌 경우 | 제출 전에 레저 사양에 따라 트랜잭션 필드를 정렬하고 정규화하세요 |
TooManyZswapEntries | 트랜잭션에 프로토콜이 허용하는 것보다 많은 Zswap 항목이 포함된 경우 | Zswap 작업을 여러 트랜잭션으로 분할하세요 |
TransactionTooLarge | 직렬화된 트랜잭션이 최대 허용 바이트 크기를 초과한 경우 | 더 작은 트랜잭션으로 분할하거나 페이로드 크기를 줄이세요 |
VerifierKeyTooLarge | 트랜잭션의 검증자 키가 크기 한도를 초과한 경우 | 올바른(디버그가 아닌) 검증자 키를 사용하고 있는지 확인하세요 |
Claims errors
코인 클레임 데이터가 일관되지 않거나 검증에 실패할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
ClaimCoinMismatch | 클레임에서 참조한 코인이 예상 코인과 일치하지 않는 경우 | 클레임이 올바른 코인 데이터를 대상으로 하는지 확인하세요 |
ClaimNullifierFailed | 클레임의 널리파이어가 유효하지 않거나 일치하지 않는 경우 | 올바른 키와 코인 데이터로 널리파이어를 다시 생성하세요 |
ClaimOverflow | 클레임 값을 합산하는 중 산술 오버플로우가 발생한 경우 | 개별 클레임 값을 줄이세요. 합계가 u64::MAX를 초과할 수 있습니다 |
ClaimReceiveFailed | 코인 수신 클레임이 유효하지 않거나 레저가 검증하지 못하는 경우 | 클레임 데이터가 대상 코인과 일치하는지 확인하세요 |
ClaimSpendFailed | 코인 지출 클레임이 검증에 실패한 경우 | 지출 권한과 널리파이어 데이터를 확인하세요 |
UnclaimedCoinCom | 코인 커밋먼트가 존재하지만 대응하는 클레임이 없는 경우 | 모든 코인 커밋먼트에 유효한 클레임이 연결되어 있는지 확인하세요 |
UnclaimedNullifier | 널리파이어가 존재하지만 대응하는 코인 클레임이 없는 경우 | 모든 널리파이어에 대응하는 지출 클레임이 있는지 확인하세요 |
Unbalanced | 트랜잭션 입력과 출력의 잔액이 맞지 않는 경우(값이 보존되지 않음) | 모든 입력과 출력의 토큰 수량을 다시 확인하세요 |
Committee errors
트랜잭션의 위원회 서명이 누락되거나, 부족하거나, 유효하지 않을 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
InvalidCommitteeSignature | 위원회 서명의 형식이 잘못됐거나 검증되지 않는 경우 | 유효한 위원회 구성원으로부터 서명을 다시 수집하세요 |
KeyNotInCommittee | 서명에 사용된 키가 예상 위원회의 구성원이 아닌 경우 | 해당 에포크의 위원회 구성원으로 등록된 키를 사용하세요 |
ThresholdMissed | 필요한 위원회 서명 임계값에 도달하지 못한 경우 | 제출 전에 더 많은 위원회 구성원의 서명을 수집하세요 |
Intents errors
트랜잭션 인텐트의 서명이 유효하지 않거나 세그먼트 식별자가 충돌할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
IntentAtGuaranteedSegmentId | 인텐트가 허용되지 않는 보장 세그먼트 ID를 대상으로 하는 경우 | 인텐트를 보장 세그먼트가 아닌 곳으로 옮기세요 |
IntentSegmentIdCollision | 두 인텐트가 동일한 세그먼트 ID를 참조하는 경우 | 각 인텐트에 고유한 세그먼트 ID를 할당하세요 |
IntentSignatureVerificationFailure | 인텐트의 서명이 검증에 실패한 경우 | 올바른 키로 인텐트에 다시 서명하세요 |
IntentSignatureKeyMismatch | 서명 키가 인텐트에 선언된 키와 일치하지 않는 경우 | 인텐트가 참조하는 키를 사용하는지 확인하세요 |
Balance check errors
트랜잭션 검증 중 토큰 잔액 검증이 실패할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
BalanceCheckConversionFailure | 잔액 검증 중 타입 변환에 실패한 경우 | 값 인코딩 버그를 나타냅니다. 토큰 타입 일관성을 확인하세요 |
BalanceCheckOutOfBounds | 잔액 값이 검사에 유효한 숫자 범위를 벗어난 경우 | 모든 토큰 수량이 프로토콜이 정의한 범위 내에 있는지 확인하세요 |
BalanceCheckOverspend | 트랜잭션이 가용 금액보다 많이 지출하려는 경우 | 지출 금액을 줄이거나 충분한 입력을 추가하세요 |
DUST errors
DUST 등록 또는 지출 작업이 검증에 실패할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
InsufficientDustForRegistrationFee | DUST 수량이 등록 수수료를 충당하는 데 필요한 최소치보다 적은 경우 | 최소 수수료 기준을 충족하도록 DUST 수량을 늘리세요 |
InvalidDustRegistrationSignature | DUST 등록 서명이 유효하지 않은 경우 | 올바른 키로 DUST 등록에 다시 서명하세요 |
InvalidDustSpendProof | DUST 지출 증명이 유효하지 않은 경우 | 올바른 witness 데이터로 지출 증명을 다시 생성하세요 |
MultipleDustRegistrationsForKey | 하나의 트랜잭션에서 동일한 키가 여러 DUST 등록에 나타나는 경우 | 트랜잭션당 각 DUST 키를 한 번만 사용하세요 |
OutOfDustValidityWindow | DUST 등록 또는 지출이 허용된 유효 시간 창을 벗어난 경우 | 블록 높이를 확인하고 유효 시간 창 안에서 재제출하세요 |
Version errors
증명이나 트랜스크립트가 노드가 인식하지 못하는 버전을 사용할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
FallibleTranscriptVersion | 폴러블 세그먼트에 트랜스크립트 버전이 유효하지 않은 경우 | 폴러블 세그먼트가 올바른 트랜스크립트 버전 형식을 사용하는지 확인하세요 |
GuaranteedTranscriptVersion | 보장 세그먼트에 트랜스크립트 버전이 유효하지 않은 경우 | 보장 세그먼트가 올바른 트랜스크립트 버전 형식을 사용하는지 확인하세요 |
UnsupportedProofVersion | 증명이 노드가 지원하지 않는 버전을 사용하는 경우 | SDK를 업그레이드하거나 지원되는 버전으로 증명을 다시 생성하세요 |
Check errors
트랜잭션 이펙트나 세그먼트 순서에 대한 정적 일관성 검사가 실패할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
DisjointCheckFailure | 서로 분리되어야 할 세그먼트가 리소스나 상태를 공유하는 경우 | 세그먼트가 서로 겹치지 않는 상태에서 동작하도록 하세요 |
EffectsCheckFailure | 트랜잭션의 선언된 이펙트가 정적 일관성 검사에 실패한 경우 | 선언된 이펙트가 컨트랙트 실행 결과와 일치하는지 확인하세요 |
SequencingCheckFailure | 트랜잭션이 세그먼트 순서 제약을 위반한 경우 | 순서 요구사항을 충족하도록 세그먼트를 재정렬하세요 |
Sorting and deduplication errors
트랜잭션 입력 또는 출력이 정규 순서나 고유성 요구사항을 위반할 때 발생하는 오류입니다.
| Variant | Description | Fix |
|---|---|---|
DuplicateInputs | 동일한 입력이 트랜잭션에 두 번 이상 나타나는 경우 | 중복 입력을 제거하세요 |
InputsNotSorted | 트랜잭션 입력이 필수 정규 정렬 순서가 아닌 경우 | 트랜잭션을 빌드하기 전에 레저의 정규 순서에 따라 입력을 정렬하세요 |
InputsSignaturesLengthMismatch | 입력 서명 수가 입력 수와 일치하지 않는 경우 | 각 입력에 정확히 하나의 서명을 제공하세요 |
OutputsNotSorted | 트랜잭션 출력이 필수 정규 정렬 순서가 아닌 경우 | 트랜잭션을 빌드하기 전에 출력을 정규 순서로 정렬하세요 |
TransactionInvalid
레저가 구조적으로 유효한 트랜잭션을 현재 상태에 적용했지만 상태 불일치로 거부할 때 발생하는 상태 적용 오류입니다. 이 enum은 #[non_exhaustive]이며 19개의 변형을 정의합니다.
| Variant | Description | Fix |
|---|---|---|
BalanceCheckOutOfBounds | 상태 적용 중 잔액 값이 유효 범위를 벗어난 경우 | 현재 상태를 반영한 후에도 토큰 수량이 범위 내에 있는지 확인하세요 |
ContractAlreadyDeployed | 컨트랙트 배포가 이미 컨트랙트가 있는 주소를 대상으로 하는 경우 | 다른 주소에 배포하거나 배포 고유성을 확인하세요 |
ContractNotPresent | 트랜잭션이 해당 주소에 존재하지 않는 컨트랙트를 호출하는 경우 | 컨트랙트 주소를 확인하고 해당 주소에 컨트랙트가 존재하는지 확인하세요 |
DivideByZero | 트랜잭션 처리 중 0으로 나누기가 발생한 경우 | 트랜잭션 값 계산 버그를 나타냅니다 |
DustDeregistrationNotRegistered | 활성 등록이 없는 DUST 키를 등록 해제하려는 경우 | 등록 해제 전에 해당 키에 활성 등록이 있는지 확인하세요 |
DustDoubleSpend | 트랜잭션이 지출하려는 DUST 코인이 이미 지출된 경우 | 현재 DUST UTXO 상태를 확인하세요. 해당 코인은 이미 지출됐습니다 |
EffectsMismatch | 트랜잭션을 적용한 실제 이펙트가 선언된 이펙트와 다른 경우 | 선언된 이펙트는 컨트랙트 실행 결과와 정확히 일치해야 합니다 |
GenerationInfoAlreadyPresent | 이 에포크/키에 대한 생성 정보가 이미 온체인에 기록된 경우 | 생성 정보는 에포크당 한 번만 제출할 수 있습니다 |
InputNotInUtxos | 트랜잭션 입력이 현재 상태에 존재하지 않는 UTXO를 참조하는 경우 | 해당 UTXO가 이미 지출됐을 수 있습니다. 트랜잭션을 빌드하기 전에 최신 상태를 가져오세요 |
InsufficientClaimable | 트랜잭션이 클레임 가능 풀의 가용량보다 많이 클레임하려는 경우 | 클레임 금액을 줄이거나 클레임 가능 자금이 더 쌓일 때까지 기다리세요 |
InvariantViolation | 레저가 내부 불변 조건 위반을 감지한 경우 | 버그로 신고하세요. 올바르게 구현된 노드나 SDK에서는 발생하지 않아야 합니다 |
MerkleTreeError | 상태 적용 중 머클 트리 작업이 실패한 경우 | 자세한 내용은 merkle_tree::InvalidUpdate 섹션을 참조하세요 |
ReplayCounterMismatch | 리플레이 보호 카운터가 예상 값과 일치하지 않는 경우 | 노드에서 현재 리플레이 카운터를 가져와 트랜잭션에 사용하세요 |
ReplayProtectionViolation | 트랜잭션이 리플레이 보호 제약을 위반한 경우 | 트랜잭션이 중복되거나 순서를 벗어나지 않았는지 확인하세요 |
RewardTooSmall | 보상 금액이 필요한 최소치보다 적은 경우 | 프로토콜 최소치를 충족하도록 보상 금액을 늘리세요 |
Transcript | 레저가 컨트랙트 트랜스크립트 실행을 거부한 경우(TranscriptRejected를 래핑) | 자세한 내용은 TranscriptRejected 오류 섹션을 참조하세요 |
VerifierKeyAlreadyPresent | 검증자 키 등록이 이미 등록된 키를 대상으로 하는 경우 | 기존 검증자 키를 다시 등록하지 마세요 |
VerifierKeyNotFound | 트랜잭션에서 참조한 검증자 키가 온체인에 등록되지 않은 경우 | 해당 키를 참조하는 트랜잭션을 제출하기 전에 검증자 키를 등록하세요 |
Zswap | Zswap 하위 작업이 실패한 경우(zswap::TransactionInvalid를 래핑) | 자세한 내용은 Zswap 오류 섹션을 참조하세요 |
OnchainProgramError
Impact VM 온체인 실행 엔진 내부에서 컨트랙트 트랜스크립트 실행이 실패할 때 표면화되는 오류입니다. 이 enum은 17개의 변형을 정의합니다.
| Variant | Description |
|---|---|
ArithmeticOverflow | 산술 연산이 지원 정수 범위를 오버플로우한 경우 |
AttemptedArrayDelete | 지원되지 않는 배열 요소 삭제를 시도한 경우 |
BoundsExceeded | 배열 또는 버퍼 접근이 범위를 벗어난 위치를 대상으로 한 경우 |
CacheMiss | 실행 중 필요한 값의 캐시 조회가 결과를 반환하지 않은 경우 |
CellBoundExceeded | 셀 값이 최대 허용 크기를 초과한 경우 |
Decode | 스택 또는 프로그램 데이터에서 값 디코드에 실패한 경우(InvalidBuiltinDecode를 래핑) |
ExpectedCell | VM이 스택 위치에서 셀 값을 기대했으나 다른 타입을 발견한 경우 |
InvalidArgs | 내장 함수가 유효하지 않거나 개수가 잘못된 인자를 받은 경우 |
LogBoundExceeded | 로깅 작업이 최대 허용 로그 크기를 초과한 경우 |
MerkleTreeError | VM 내부에서 머클 트리 내장 작업이 실패한 경우 |
MissingKey | 컨트랙트 상태 맵에서 필요한 키를 찾을 수 없는 경우 |
OutOfGas | 컨트랙트 실행 중 트랜잭션의 가스가 소진된 경우 |
RanOffStack | VM 스택 공간이 부족한 경우. 빈 스택에서 pop 또는 read를 시도했습니다 |
RanPastProgramEnd | 프로그램 카운터가 바이트코드 끝을 넘어 진행한 경우 |
ReadMismatch | 컨트랙트 상태에서 읽은 값이 트랜스크립트에 선언된 값과 일치하지 않는 경우 |
StackOverflow | VM 호출 스택이 너무 깊어져 재귀 한도를 초과한 경우 |
TooLongForEqual | 동등성 비교가 최대 비교 가능 길이를 초과하는 값을 대상으로 한 경우 |
TypeError(String) | VM 실행 중 타입 불일치가 발생한 경우. 문자열이 불일치 내용을 설명합니다 |
TranscriptRejected
이 타입은 OnchainProgramError를 래핑하며 온체인 컨트랙트 실행 중 발생하는 실패를 나타냅니다. 5개의 변형을 정의합니다.
| Variant | Description |
|---|---|
Decode | 실행이 시작되기 전에 트랜스크립트 입력 디코드에 실패한 경우 |
EffectDecodeError | 컨트랙트 실행이 발생시킨 이펙트의 디코드에 실패한 경우 |
Execution | 컨트랙트 실행이 실패한 경우(OnchainProgramError를 래핑). 내부 오류에 VM 수준의 실패 내용이 담깁니다 |
FinalStackWrongLength | 실행이 완료된 후 스택의 요소 수가 예상과 다른 경우 |
WeakStateReturned | 프로토콜이 전체 상태를 요구했으나 컨트랙트가 약화된 상태를 반환한 경우 |
Zswap errors
Zswap은 실드 전송, 코인 커밋먼트, 이중 지출 방지를 포함한 프라이빗 코인 작업을 관리합니다.
zswap::TransactionInvalid
레저가 Zswap 작업을 현재 상태에 적용할 때 발생하는 상태 수준 Zswap 실패입니다.
| Variant | Description | Fix |
|---|---|---|
CommitmentAlreadyPresent | 코인 커밋먼트가 커밋먼트 트리에 이미 존재하는 경우 | 중복 커밋먼트입니다. 리플레이 또는 구성 오류 여부를 확인하세요 |
MerkleTreeError | Zswap 상태 적용 중 머클 트리 업데이트가 실패한 경우 | 자세한 내용은 merkle_tree::InvalidUpdate 섹션을 참조하세요 |
NullifierAlreadyPresent | 널리파이어가 이미 지출된 경우. 이는 이중 지출 시도입니다 | 해당 코인은 이미 지출됐습니다. 다시 지출하려 하지 마세요 |
UnknownMerkleRoot | 증명에서 참조한 머클 루트를 현재 상태가 알지 못하는 경우 | 노드에서 현재 머클 루트를 가져와 증명을 다시 빌드하세요 |
zswap::MalformedOffer
상태 적용 전에 검사하는 구조적 Zswap 오류입니다.
| Variant | Description | Fix |
|---|---|---|
ContractSentCiphertext | 이 맥락에서 허용되지 않는 ciphertext 전송을 컨트랙트가 시도한 경우 | 컨트랙트는 ciphertext 출력을 직접 생성해서는 안 됩니다 |
InvalidProof | Zswap 영지식 증명이 검증에 실패한 경우 | 올바른 witness와 public input으로 증명을 다시 생성하세요 |
NonDisjointCoinMerge | 코인 병합이 서로 분리되지 않은 코인 집합을 대상으로 한 경우 | 병합하는 코인 집합이 완전히 분리되어 있는지 확인하세요 |
NotNormalized | 오퍼가 정규 정규화 형식이 아닌 경우 | 트랜잭션에 포함하기 전에 오퍼를 정규화하세요 |
zswap::OfferCreationFailed
Zswap 오퍼를 구성하는 중에 발생하는 클라이언트 측 오류입니다.
| Variant | Description | Fix |
|---|---|---|
InvalidIndex | 오퍼 구성에 유효하지 않은 인덱스를 사용한 경우 | 코인 인덱스가 머클 트리의 유효 범위 내에 있는지 확인하세요 |
MerkleTreeError | 오퍼 구성 중 머클 트리 작업이 실패한 경우 | 자세한 내용은 merkle_tree::InvalidUpdate 섹션을 참조하세요 |
NotContractOwned | 오퍼가 예상 컨트랙트가 소유하지 않은 코인을 참조하는 경우 | 올바른 컨트랙트가 소유한 코인에 대해서만 오퍼를 구성하세요 |
Proving | 오퍼 생성 중 영지식 증명 단계가 실패한 경우 | 모든 witness가 유효한지 확인하고 올바른 입력으로 증명을 다시 실행하세요 |
TreeNotRehashed | 최근 업데이트 후 머클 트리에 rehash가 필요한 경우 | 오퍼를 구성하기 전에 트리 rehash 작업을 호출하세요 |
Merkle tree errors
커밋먼트 머클 트리에 대한 작업이 실패할 때 표면화되는 오류입니다.
merkle_tree::InvalidIndex
제공된 인덱스가 현재 트리 크기의 범위를 벗어날 때 반환됩니다.
| Variant | Description |
|---|---|
InvalidIndex(u64) | 제공된 인덱스가 현재 머클 트리 크기의 범위를 벗어난 경우 |
merkle_tree::InvalidUpdate
머클 트리 업데이트 시 발생하는 구조적 실패를 나타내는 6개의 변형입니다.
| Variant | Description |
|---|---|
BadUpdatePath | 업데이트에 제공된 머클 경로가 잘못됐거나 일관되지 않은 경우 |
CollapsedIndex | 업데이트가 collapse(가지치기)된 서브트리 노드를 대상으로 한 경우 |
EndBeforeStart | 업데이트 범위의 끝 인덱스가 시작 인덱스보다 앞에 있는 경우 |
EndOutOfTree | 업데이트 범위의 끝 인덱스가 트리 경계를 넘어선 경우 |
NotFullyRehashed | 트리에 rehash되지 않은 대기 중 업데이트가 있는 경우. 일관되지 않은 상태입니다 |
StubUpdate | 업데이트가 업데이트를 받을 수 없는 stub 노드를 대상으로 한 경우 |
WrongNumberOfSegments | 업데이트가 예상과 다른 수의 세그먼트를 제공하는 경우 |
Other error types
다음 타입들은 클라이언트 측 구성, 수수료 계산, 시스템 트랜잭션, 보조 작업을 다룹니다.
FeeCalculationError
트랜잭션 제출 전 수수료 계산 중에 발생하는 오류입니다.
| Variant | Description |
|---|---|
BlockLimitExceeded | 수수료 계산 중 트랜잭션이 블록 한도를 초과한 경우 |
OutsideTimeToDismiss | 트랜잭션이 해당 바이트 크기에 허용되는 최대 time-to-dismiss를 초과한 경우 |
MalformedContractDeploy
컨트랙트 배포 트랜잭션에 특화된 오류로, 상태 적용 전에 검사합니다.
| Variant | Description |
|---|---|
IncorrectChargedState | 컨트랙트 배포에 잘못 계산된 charged key 맵이 포함된 경우 |
NonZeroBalance | 컨트랙트 배포에 0이 아닌 토큰 잔액이 실린 경우. 컨트랙트 배포에는 기존 잔액이 포함되어서는 안 됩니다 |
SystemTransactionError
에포크 전환, 위원회 업데이트 같은 프로토콜 수준 시스템 트랜잭션에서 발생하는 오류입니다. 이 타입은 10개의 변형을 정의합니다.
| Variant | Description |
|---|---|
CommitmentAlreadyPresent | 코인 커밋먼트가 트리에 이미 존재하는 경우. 이는 이중 지출 시도입니다 |
GenerationInfoAlreadyPresent | 이 에포크의 DUST 생성 정보가 이미 존재하는 경우. 레저가 중복 삽입을 거부합니다 |
IllegalPayout | 지급액 또는 브릿지 금액이 남은 네이티브 토큰 공급량이나 브릿지 풀을 초과하는 경우 |
IllegalReserveDistribution | 배분 금액이 남은 리저브 토큰 공급량을 초과하는 경우 |
InsufficientTreasuryFunds | 재무부가 요청을 충족할 만큼 요청한 타입의 토큰을 보유하지 못한 경우 |
InvalidBasisPoints | cardano_to_midnight_bridge_fee_basis_points 값이 10,000 이상으로 유효 범위를 벗어난 경우 |
InvariantViolation | 트랜잭션이 함의하는 총 NIGHT 공급량이 MAX_SUPPLY를 초과하는 경우 |
MerkleTreeError | 시스템 트랜잭션 중 머클 트리 작업이 실패한 경우. 자세한 내용은 merkle_tree::InvalidUpdate를 참조하세요 |
ReplayProtectionFailure | 시스템 트랜잭션이 리플레이 보호 제약을 위반한 경우(TransactionApplicationError를 래핑) |
TreasuryDisabled | 거버넌스가 아직 재무부를 활성화하지 않은 경우. 이해관계자가 합의에 이르기 전까지 레저는 재무부 접근을 거부합니다 |
TransactionConstructionError
트랜잭션을 제출 전에 빌드하는 중에 발생하는 클라이언트 측 오류입니다.
| Variant | Description |
|---|---|
MissingVerifierKey | 컨트랙트 작업에 검증자 키가 없는 경우. 증명 단계를 진행할 수 없습니다 |
ProofFailed | 트랜잭션 조립 중 증명 생성이 실패한 경우(ProvingError를 래핑) |
TransactionEmpty | 트랜잭션에 작업이 없는 경우. 제출 전에 최소 하나를 추가하세요 |
UnfinishedCall | 클라이언트가 컨트랙트 호출을 시작했으나 트랜잭션을 빌드하기 전에 완료하지 않은 경우 |
TransactionProvingError
다음 오류들은 증명 단계에서 발생합니다.
Proving 변형은 불투명한 anyhow::Error 별칭인 ProvingError를 래핑합니다. Tokio 변형은 std::io::Error를 래핑하며 비동기 런타임의 I/O 실패를 표면화합니다.
| Variant | Description |
|---|---|
LeftoverEntries | 컨트랙트 작업의 트랜스크립트에 증명이 소비한 것보다 많은 항목이 있는 경우 |
MissingKeyset | 필요한 회로 위치의 증명 키를 찾을 수 없는 경우 |
Proving | 기반 증명 백엔드가 오류를 반환한 경우(ProvingError를 래핑) |
RanOutOfEntries | 증명이 완료되기 전에 컨트랙트 작업의 트랜스크립트 항목이 소진된 경우 |
Tokio | 비동기 증명 생성 중 I/O 오류가 발생한 경우(std::io::Error를 래핑) |
EventReplayError
온체인 이벤트에서 지갑 상태를 동기화하는 데 사용되는 이벤트 로그 리플레이 중에 발생하는 오류입니다.
| Variant | Description |
|---|---|
DtimeUpdateForUntracked | 클라이언트가 추적하지 않는 DUST 생성 항목을 대상으로 한 경우 |
EventForPastTime | 이벤트의 타임스탬프가 클라이언트가 이미 동기화한 시점보다 이른 경우 |
MerkleTreeError | 이벤트 리플레이 중 머클 트리 작업이 실패한 경우. 자세한 내용은 merkle_tree::InvalidUpdate 섹션을 참조하세요 |
NonLinearInsertion | 클라이언트가 머클 트리에 이벤트를 비선형적으로 삽입한 경우. 예상 인덱스와 수신 인덱스가 일치하지 않습니다 |
DustLocalStateError
다음 오류들은 클라이언트 측의 로컬 DUST 상태 관리에서 발생합니다.
| Variant | Description |
|---|---|
BackingNightNotFound | 주어진 backing NIGHT 논스에 대한 생성 정보가 없는 경우 |
CommitmentIndexNotFound | 주어진 커밋먼트 인덱스에 대한 커밋먼트가 없는 경우 |
GenerationIndexNotFound | 주어진 생성 인덱스에 대한 생성 정보가 없는 경우 |
MerkleTreeError | 로컬 상태 관리 중 머클 트리 작업이 실패한 경우. 자세한 내용은 merkle_tree::InvalidUpdate 섹션을 참조하세요 |
NonLinearInsertion | 클라이언트가 머클 트리에 값을 비선형적으로 삽입한 경우. 예상 인덱스와 수신 인덱스가 일치하지 않습니다 |
WrongGenerationInfo | 주어진 인덱스에 저장된 생성 정보가 유효하지 않은 경우 |
Cross-reference: Rust error to node error code
노드 오류 코드를 디버깅할 때는 다음 방법으로 기반 Rust 오류를 찾으세요.
- 노드 오류 코드 레퍼런스에서 숫자형
LedgerApiError코드를 조회해 상위 수준 범주를 파악합니다. - 노드의 구조화된 오류 응답 본문을 확인합니다. Rust 오류 타입은 대개
detail또는cause필드에 문자열로 직렬화됩니다. - Rust 타입 이름을 이 레퍼런스의 표와 대조합니다.