트랜잭션에 대해 궁금합니다.
오랫동안 pending 상태인 트랜잭션은 소멸된다고알고있는데요 ,
어떤경우에 어떤식으로 소멸되는건가요 ?
그리고 트랜잭션의 내용을 수정하는것이 가능하다고들었는데요 ,
nounce 가 같은 트랜잭션이기때문에 예전 트랙잰션을 덮어씌우기로 가능한건가요 ?
txid 를바꾸어야 가능한건지요 ?
안녕하세요. 블록에는 포함 가능한 트랜잭션 수가 정해져있고 모든 트랜잭션을 블록에 다 넣지는 못합니다. 때문에 수수료와 지연시간으로 가중치를 측정하여 블록에 트랜잭션 내역을 포함하게 되죠. 그리고 마이너마다 트랜잭션 풀이 존재하는데 이 트랜잭션 풀 내에는 기본적으로 가스비 순으로 정렬이 되어 있어서 트랜잭션 풀이 꽉 차게되면 낮은 가스비의 트랜잭션부터 버려지게 됩니다. 여기서 오랫동안 pending이 되는 상태의 트랜잭션 소멸이 되는 원리를 이해하실 수 있겠죠.
pending 중인 경우 수수료 가중치와 지연 시간이 상대적으로 높지 않다는 의미이며 보통 수수료를 낮게 설정하여 암호화페를 보내게 되면 무한 pending 상태가 걸리곤 합니다. 무한히 pending이 걸리는게 아니라 그냥 매우 늦게 처리가 된다고 생각을 하시면 됩니다.
때문에 무한 pending 중인 상태의 트랜잭션을 취소하기 위해서는 동일한 nonce 값으로 수수료를 높게 책정해 새로운 트랜잭션을 생성시키게 되면 기존 pending 상태의 트랜잭션은 비정상 트랜잭션으로 인식시켜 취소시킬 수 있습니다. nonce가 같은 트랜잭션이기 때문에 기존 트랜잭션을 overwrite 하는 개념으로 생각하시면 됩니다.