어제도 도서전에 갔다왔어요. 이전에는 하루만 도서전을 가서 책을 왕창 샀어요. 그러다 보니 가방에 책이 쌓이다 보면 가방이 무거워서 많이 괴로웠어요. 이번에는 회사에서 가깝다 보니 짧게 짧게 자주 가는 전략을 썼더니 가방이 가벼워 행복하네요.
오늘은 트랜잭션의 nonce를 사용해서 할 수 있는 두가지에 대해서 알아볼게요.
트랜잭션이 처리가 안되고 있는 상황
지난 15번 레터에서 트랜잭션 수수료에 대해서 알아보았어요. 트랜잭션을 보낼 때 가스비를 낮게 보내면 트랜잭션이 늦게 처리될 수 있어요. 이더리움의 가스비는 상황에 따라 급격하게 바뀔 수도 있어요. 그래서 평범한 가스비를 설정해서 트랜잭션을 보내더라도 가스비가 갑자기 올라가면 의도치 않게 트랜잭션이 늦게 처리될 수 있어요.
트랜잭션 하나가 막히면 뒤에도 막혀
트랜잭션이 오랫동안 처리가 안되면, 생각보다 큰 일이 발생해요. 이더리움에서 트랜잭션은 항상 nonce 숫자 순으로 실행됩니다. 그래서 nonce 3짜리 트랜잭션이 처리가 안되면, nonce 4짜리 트랜잭션, 5짜리 트랜잭션도 실행이 안되요. 그래서 앞 트랜잭션이 가스비가 낮게 설정되어서 처리가 안되면 꽤 곤란한 상황이 생겨요. 돈이 있어도 쓸 수 없는 상황이 될 수 있어요.
트랜잭션 부스팅
막힌 트랜잭션을 처리하는 방법 중 하나는, 똑같은 내용의 트랜잭션을 더 높은 가스가격으로 보내는 거에요. 물론 이전에 보냈던 트랜잭션과 같은 nonce 값으로 보내야해요. 이렇게 더 높은 가격으로 보내면 마이너가 가스비가 높은 트랜잭션을 먼저 처리하기 때문에 막힌 트랜잭션이 빠르게 처리됩니다.
트랜잭션 취소하기
이더리움에서의 트랜잭션 취소는 다른 IT와는 좀 달라요. 트랜잭션을 취소하기 위해서는, 아무일도 안하는 트랜잭션을 높은 가스가격으로 보내는 거에요. 물론 막혀있는 트랜잭션과 같는 논스 값을 설정해서요. 그러면 블록체인 마이너가 더 높은 가스가격의 취소 트랜잭션을 처리하게되고, 이전에 보낸 트랜잭션은 취소가 됩니다. 같은 논스의 트랜잭션은 딱 하나만 처리될 수 있기 때문이에요.
오늘은 조금 어려운 내용이었어요. 하지만 블록체인을 자주사용하다 보면 꼭 급할 때 트랜잭션이 처리가 안 될 때가 있어요. 그럴 때 오늘 내용을 기억하시면 무엇을 해야하는지 판단을 하실 수 있을거에요.