결과의 불변성(Finality of Results)
트랜잭션이 컨센서스 ledger에 적용되는 순서는 ledger가 닫히고 정확한 트랜잭션 세트가 컨센서스 과정에 의해 승인될 때까지 확정되지 않습니다. 초기에 성공했던 트랜잭션은 실패할 수 있으며, 초기에 실패했던 트랜잭션은 성공할 수 있습니다. 또한, 한 라운드에서 컨센서스 과정에 의해 거부된 트랜잭션은 나중에 컨센서스를 이룰 수 있습니다.
검증된 ledger에는 성공한 트랜잭션(tes 결과 코드)과 실패한 트랜잭션(tec 결과 코드)이 포함될 수 있습니다. 다른 결과를 가진 트랜잭션은 ledger에 포함되지 않습니다.
다른 결과 코드에 대해서는 결과가 최종인지 판단하기 어려울 수 있습니다. 다음 표는 트랜잭션 제출 결과 코드에 기반한 트랜잭션 결과의 최종성을 요약한 것입니다:
tesSUCCESS
검증된 ledger에 포함될 때 최종
모든 tec
코드
검증된 ledger에 포함될 때 최종
모든 tem
코드
프로토콜 변경으로 트랜잭션이 유효해질 때까지 최종이 아님
tefPAST_SEQ
동일한 시퀀스 번호를 가진 다른 트랜잭션이 검증된 ledger에 포함될 때 최종
tefMAX_LEDGER
유효성 검사된 ledger가 트랜잭션의 LastRedgerSequence 필드보다 높은 ledger 인덱스를 가지고 있고 트랜잭션을 포함하는 유효성 검사된 ledger가 없는 경우 최종.
그 외의 다른 트랜잭션 결과는 최종이 아닐 수 있습니다. 이 경우, 트랜잭션이 나중에 성공하거나 실패할 수 있습니다, 특히 트랜잭션이 적용되는 것을 방지하는 상황이 변한 경우에는 그렇습니다. 예를 들어, 아직 존재하지 않는 계정에 비-XRP 화폐를 보내려고 하면 실패하지만, 다른 트랜잭션이 충분한 XRP를 보내 목적지 계정을 생성하면 성공할 수 있습니다. 서버는 일시적으로 실패한 서명된 트랜잭션을 저장하고 나중에 묻지 않고 성공적으로 적용할 수도 있습니다.
비최종 결과는 어떻게 바뀔 수 있나요? (How can non-final results change?)
트랜잭션을 처음 제출할 때, rippled 서버는 그 트랜잭션을 현재 열려 있는 ledger에 임시적으로 적용한 후 그 결과를 반환합니다. 그러나 트랜잭션의 최종 결과는 그 임시 결과와 매우 다를 수 있습니다. 그 이유는 여러 가지입니다:
트랜잭션은 나중의 ledger 버전까지 지연될 수 있거나, 검증된 ledger에 포함되지 않을 수도 있습니다. 대부분, XRP Ledger는 모든 유효한 트랜잭션이 가능한 한 빨리 처리되어야 한다는 원칙을 따릅니다. 그러나 예외 상황도 있습니다:
제안된 트랜잭션이 컨센서스 라운드가 시작될 때까지 대다수의 검증자에게 중계되지 않았다면, 남은 검증자들이 트랜잭션을 가져와 유효한지 확인하는 시간을 주기 위해 다음 ledger 버전까지 연기될 수 있습니다.
어떤 주소가 같은 시퀀스 번호를 사용하여 두 가지 다른 트랜잭션을 보낸다면, 그 트랜잭션들 중 최대 하나만 검증될 수 있습니다. 이런 트랜잭션이 네트워크를 통해 다른 경로로 중계되면, 일부 서버에서는 일시적으로 성공한 트랜잭션이 실패할 수 있습니다. 왜냐하면 다른, 충돌하는 트랜잭션이 먼저 대다수의 서버에 도달했기 때문입니다.
일시적인 인터넷 중단이나 지연이 제안된 트랜잭션이 트랜잭션의 예정된 만료일 이전에 성공적으로 중계되는 것을 방해할 수 있습니다. 이것은 LastLedgerSequence 필드에 의해 설정됩니다. (트랜잭션에 만료일이 없다면, 그것은 유효하며 언제든지 성공할 수 있습니다. 이는 자체적으로 바람직하지 않을 수 있습니다. 신뢰할 수 있는 트랜잭션 제출에 대한 자세한 내용을 참조하십시오.)
두 가지 이상의 요인이 결합해서 일어날 수도 있습니다.
닫힌 ledger에 적용된 트랜잭션의 순서는 일반적으로 현재 열려 있는 ledger에 임시적으로 적용된 트랜잭션의 순서와 다릅니다. 트랜잭션에 따라, 일시적으로 성공했던 트랜잭션이 실패할 수 있고, 일시적으로 실패했던 트랜잭션이 성공할 수 있습니다. 몇 가지 예는 다음과 같습니다:
두 개의 트랜잭션이 각각 탈중앙화 거래에서 같은 제안을 완전히 소비하려고 한다면, 먼저 온 트랜잭션이 성공하고, 다른 트랜잭션은 실패합니다. 적용되는 트랜잭션의 순서가 바뀔 수 있으므로, 성공했던 트랜잭션이 실패하고, 실패했던 트랜잭션이 성공할 수 있습니다. 제안이 부분적으로 실행될 수 있으므로, 그들은 더 크거나 더 작은 범위로 여전히 성공할 수 있습니다.
교차 화폐 결제가 탈중앙화 거래의 제안을 소비하여 성공했지만, 다른 트랜잭션이 같은 오더북에서 제안을 소비하거나 생성하면, 교차 화폐 결제는 처음에 예상했던 것보다 다른 환율로 성공할 수 있습니다. 부분 결제인 경우, 다른 금액을 전달할 수도 있습니다.
송신자가 충분한 자금을 갖고 있지 않아 일시적으로 실패한 결제 트랜잭션은 필요한 자금을 전달하는 다른 트랜잭션이 표준 순서에 따라 먼저 온 경우 나중에 성공할 수 있습니다. 그 반대의 경우도 가능합니다. 필요한 자금을 전달하는 거래가 표준적인 순서로 정렬된 후에 우선되지 않았기 때문에 잠정적으로 성공한 거래가 실패할 수 있습니다.
Tip:
이러한 이유로, XRP Ledger에 대해 테스트를 실행할 때 동일한 데이터에 영향을 미치는 여러 계정이 있는 경우 트랜잭션 사이에 가까운 ledger 기다려야 합니다. stand-alone 모드에서 서버에 대해 테스트하는 경우, 이러한 경우 수동으로 ledger를 닫아야 합니다.
참고
Last updated