개념 정리
블록은 여러 성공한 트랜잭션들을 포함한 채, 블록체인에 기록할 때 사용하는 자료구조입니다. 따라서 블록이 기록되지 않았는데 (질문자 분의 표현으로는 “실패”) 트랜잭션이 성공할 일은 없습니다. 트랜잭션들이 성공했다는 뜻은 블록체인에 그 내역이 성공적으로 기록되었다는 것을 뜻하니까요.
질문에 대한 답
트랜잭션을 전송하는 from address는 하나로 고정하고 여러 개의 트랜잭션을 만들어서 클레이튼 노드로 전송한 상황을 가정해보겠습니다.
이 때 하나의 트랜잭션이 실패하면 다른 트랜잭션이 실패하는 이유에 대해서도 말씀드리겠습니다.
트랜잭션이 어떤 정보들로 이루어져 있는지를 먼저 파악해보셔야 하는데요,
트랜잭션에는 nonce 라는 필드가 존재합니다.
특정 account로부터 이전에 트랜잭션이 몇개나 발생했는지를 기록하는 용도입니다. 그리고 이 nonce는 오직 하나씩만 증가할 수 있습니다.
예를 들어, 특정 account의 nonce가 5인 상황에서 nonce가 7인 트랜잭션은 성공하지 못합니다.
질문자분께서 여러 트랜잭션을 발생시켰다는 것은 (편의를 위해 나머지 필드들은 생략) 아래와 같이 트랜잭션을 구성하신 뒤 노드로 전송했다는 건데요, [{from: 발신자 주소, to: 수신자 주소, nonce: 1}, {from: 발신자 주소, to: 수신자 주소, nonce: 2}, {from: 발신자 주소, to: 수신자 주소, nonce: 3}, {from: 발신자 주소, to: 수신자 주소, nonce: 4}, ...]
위와 같은 상황에서 nonce가 1인 트랜잭션이 처리되지 못했다고 가정해보겠습니다. 그러면 계정의 nonce는 정상적으로 증가하지 않은 상황에서 더 높은 nonce의 값들을 가진 트랜잭션들이 들어온다면 이는 받아들여지지 않습니다.
이 부분을 먼저 이해해보시고 어떻게 처리하면 좋을지를 고민해보시면 좋을 거 같습니다.
감사합니다.