사용자 가이드: 트랜잭션 및 트랜잭션 실패
Does this article need to be translated?
Submit translations, corrections, and suggestions on GitHub, or reach out on our Community forums.
암호화폐와 웹3를 처음 접하시나요?
MetaMask 학습으로 이동하시면 웹3 신규 사용자를 위해 특별히 마련한 간단한 학습 환경을 체험할 수 있습니다. 이는 완전히 무료이고 다국어로 제공되며 MetaMask를 사용하여 자신의 위치를 찾는 데 도움이 되는 시뮬레이션과 같은 유용한 도구가 포함되어 있습니다.
이 자료는 트랜잭션 및 트랜잭션 실패 원인에 대한 설명과 관련 자료 링크, 그리고 더 나아가 실패한 트랜잭션의 일반적 시나리오와 이를 해결하는 방법을 볼 수 있는 링크로 구성되어 있습니다.
블록체인 트랜잭션의 구조
공개 블록체인 네트워크에서 '트랜잭션'이라고 하면, 일반적으로 두 개의 주소 간의 상호작용을 의미합니다. 즉, 대체 가능 토큰이든 아니든, 또는 기타 암호화 자산이든 한 주소에서 다른 주소로 '전송'되는 것을 뜻합니다. 또한, '내부 트랜잭션(Internal transactions)'이라고 불리는 트랜잭션도 있는데, 이는 스마트 계약 간에 발생하는 상호작용이므로 이 자료에서는 다루지 않습니다.
더 많은 정보가 필요하신가요?
블록체인 네트워크와 그 기본 작동 방식에 대해 더 알고 싶다면, 여기의 소개 자료를 확인하세요. 생소한 용어가 있다면 언제든지 용어집을 참고할 수 있습니다.
For clarity's sake, nothing is actually being sent anywhere. 이더리움과 같은 스마트 계약 지원 블록체인 네트워크에는 여러 가지 구성 요소나 기능이 존재합니다. 그중 하나는 우리가 흔히 '컴퓨터'라고 부를 수 있는 이더리움 가상 머신(Ethereum Virtual Machine, EVM)입니다. 이는 프로그램(즉, '스마트 계약')을 실행할 수 있는 기능을 갖추고 있습니다. 그러나 이 시스템의 핵심은 분산 원장(Distributed ledger) 입니다. 이 원장을 스프레드시트로 생각하면, 한쪽에 모든 이더리움 지갑 주소가 있고, 각 주소에는 해당 주소가 보유한 각종 암호화 자산을 컬럼으로 있다고 볼 수 있습니다.
예를 들어 보겠습니다. 길라임이 김주원에게 트랜잭션을 보내려고 합니다. 길라임의 계정에는 1.36 ETH가 있는데 이중 김주원에게 0.5 ETH를 보낼 계획입니다. 약세장이긴 하지만 김주원에게는 좋은 일이겠네요.
길라임은 MetaMask 지갑을 열어, 김주원의 주소를 입력하고, 지불할 의사가 있는 가스 수치를 설정한 후 '보내기' 버튼을 누릅니다.
이 시점에서 트랜잭션은 로컬 임시 보관 상태가 되는 데 이를 로컬 메모리 풀 또는 로컬 멤풀(Local mempool) 이라고 합니다. The transaction will then get 'picked up' by the closest node in the network; depending on Guillaume's gas settings, his transaction will be prioritized (the more Guillaume is willing to pay per unit of gas, the faster his transaction will be processed), and propagated to other nodes in the network. 노드들은 길라임에게 지불할 ETH가 충분한지 검증한 후, 실제로 '트랜잭션'을 수행합니다. 원장이 수정되면서, 길라임의 잔액에서 0.5 ETH가 차감되고 김주원의 잔액에 0.5 ETH가 추가됩니다.
'운명의 손이 글을 쓰면, 모든 일이 흘러간다' 는 격언이 있지만, ETH는 네트워크를 따라 흘러가지 않습니다. ETH는 이메일처럼 길라임의 컴퓨터에서 김주원의 MetaMask 받은함으로 이동하는 것이 아닙니다. 길라임은 자신의 계정에서 금액을 차감하고, 김주원의 계정에 동일한 금액을 추가하라는 **요청을 개인 키로 인증하여 MetaMask를 통해 네트워크로 보내는 것입니다. 이후, 네트워크 프로토콜에 정의된 검증 과정을 거치면 이 작업이 실행됩니다.
트랜잭션이란 결국, 한 주소에서 다른 주소로 무언가를 재할당하도록 원장에 요청하는 과정일 뿐입니다.
상황이 잘못되는 경우
상황이 잘못되는 경우, 원인은 여러 가지가 있을 수 있습니다. 대부분은 소프트웨어 관련 문제입니다. 예를 들어, MetaMask에 버그가 있거나, 사용 중인 네트워크의 설정이 잘못되었거나, 연결 오류가 발생한 경우입니다.
또한, 일반적인 문제 중 하나는 사용자가 트랜잭션 비용을 절감하려고 가스 한도를 너무 낮게 설정하는 경우입니다. 네트워크가 매우 혼잡할 때, 너무 '저렴한' 트랜잭션은 블록에 포함되지 못하고 장시간 대기 상태가 될 수 있습니다. 결국, 이런 트랜잭션은 '정체된 트랜잭션(Stale transaction)'이 되어, 사용자가 직접 취소해야 할 수도 있습니다.
만약 트랜잭션을 보냈지만 아직 완료되지 않았다면, MetaMask에서는 해당 상태가 '보류 중'으로 표시됩니다.
트랜잭션 주문을 보냈으나 실패한 경우, 가장 흔한 원인은 가스 부족입니다. 즉, 트랜잭션 실행에 필요한 가스 비용에 가스 가격을 곱했을 때 산출되는 네트워크 통화의 총량이 지갑 잔액보다 더 많아 '가스 부족'이 발생한 것입니다.
정보
더 자세한 가스 계산 방법은 여기에서 가스 가이드를 참고하세요.
트랜잭션이 실패하는 원인은 여러 가지가 있을 수 있지만, 특히 실행하려는 트랜잭션의 유형을 고려해야 합니다. 예를 들어, 네트워크 트래픽이 높은 시기에 NFT를 민팅하는 것은 가스 비용이 매우 높을 수 있습니다. 새롭거나 실험적인 트랜잭션을 시도하는 경우, 실제 네트워크 비용을 지불하기 전에 테스트 네트워크에서 실행해보는 것이 좋습니다.
문제 해결 방법
Key Factor #1: local or broadcast to network
트랜잭션 문제를 진단할 때, 특히 보류 중인 트랜잭션과 관련하여, 트랜잭션이 로컬 멤풀에 남아 있는지, 아니면 네트워크로 전송되었으나 어떤 이유로 정체되어 있지 않는지 살펴봐야 합니다. 만약 트랜잭션이 로컬 멤풀에 남아 있다면, MetaMask 지갑을 잠근 후 다시 잠금 해제하는 것만으로 해결될 수도 있습니다(그전에 비밀번호와 비밀복구구문을 반드시 확인하세요). 트랜잭션이 네트워크에 전송된 상태라면, 해결 방법이 더 복잡할 수 있습니다.
더 자세한 해결 방법은 아래 링크를 참고하세요.
핵심 요소 #2: 논스
논스라는 단어는 몇 가지 다른 의미로 사용될 수 있습니다. 이는 '단 한 번만 사용된 숫자(Number only used once)'의 약어로, 이 문맥에서는 '트랜잭션 번호', 다시 말해 보낸 주소에서 실행된 트랜잭션의 순서를 나타냅니다. 예를 들어, 동일한 지갑 주소에서 동시에 다른 두 개의 MetaMask 인스턴스를 사용하여 두 개의 트랜잭션을 실행하면 심각한 문제가 발생할 수 있습니다. 각 주소의 트랜잭션은 논스 값에 따라 순차적으로 증가해야 하기 때문입니다. 그러나 논스 문제로 인해 트랜잭션이 중단될 수 있는 것처럼, 적절한 논스 설정을 통해 트랜잭션을 다시 진행시킬 수도 있습니다.
For more on that technique, see here.
Next steps
트랜잭션이 실패 또는 보류 중인 경우 아래 리소스를 참고하세요.
트랜잭션이 '가스 부족' 오류로 인해 실패했을 때, 그 이유는 무엇인가요? 해결 방법은 무엇인가요?
FAQs
Q: 보유하고 있는 지갑의 한 계정에서 보류 중이거나 대기열에 있는 트랜잭션이 있습니다. 같은 지갑 내 다른 계정에서 새 트랜잭션을 시작할 수 있나요?
A: Yes, you can. 논스는 지갑이 아닌 개별 계정 단위로 관리됩니다.