10 / 736TX

트랜잭션

Bitcoin Transaction

비트코인을 보낼 때 일어나는 일: 금액의 출처와 잔돈의 행선지, 결제가 확인되는 시점을 알아봅니다.

Bitcoin 트랜잭션은 다른 사람에게 결제하거나 자신의 지갑 사이에서 비트코인을 옮길 때 지갑이 네트워크에 보내는 메시지입니다. 이전에 받은 금액 중 무엇을 사용할지, 새로 만들어진 금액은 어떤 조건으로 사용할 수 있을지 정합니다. 네트워크는 송금 권한이 있는지, 사용 가능한 금액보다 많이 보내지는 않는지 검사합니다. 보내기 버튼을 눌렀다고 결제가 확인된 것은 아닙니다.

아직 쓰지 않은 금액 100 000 sat이 하나 있고, 60 000 sat을 보내려 한다고 가정해 봅시다. sat은 비트코인의 최소 단위로, 1 BTC는 100 000 000 sat입니다. 지갑은 수신자에게 60 000 sat을 주고 자신에게 39 000 sat을 돌려주며, 남은 1 000 sat을 채굴자 수수료로 남기는 트랜잭션을 만들 수 있습니다. 큰 지폐로 결제하고 잔돈을 받는 것과 비슷합니다. 원래의 100 000 sat은 전부 사용되고 두 개의 새로운 금액이 생깁니다. 잔돈은 보통 내 지갑의 새 주소로 돌아오며, 낯선 사람에게 보내는 별도 결제가 아닙니다. 수수료는 사용한 총액과 새로 만든 총액의 차이이지 별도의 출력이 아닙니다. 잔돈을 빠뜨리면 의도치 않게 수수료가 너무 커질 수 있습니다. [2]

Bitcoin은 이전 트랜잭션에서 아직 사용하지 않은 출력, 즉 UTXO를 기록합니다. 지갑이 사용할 수 있는 개별 금액으로 생각하면 됩니다. 새 트랜잭션의 입력은 그런 이전 출력을 가리키고, 새 출력은 금액과 다음에 사용할 조건을 정합니다. 지갑은 여러 금액을 합치거나 여러 수신자에게 나눌 수 있습니다. 따라서 입력은 단순히 발신 주소를 적는 것이 아닙니다. 이전 트랜잭션의 식별자 txid와 해당 출력의 번호가 들어 있습니다. 이 쌍을 outpoint라고 합니다. 가리키는 출력은 존재하고 사용 가능해야 합니다. 같은 출력을 두 번 쓰거나 한 트랜잭션의 두 입력으로 중복 계산할 수는 없습니다. [1] [2]

일반적인 결제에서는 지갑이 개인 키로 디지털 서명을 만듭니다. 서명은 송금 권한을 증명하며 키를 공개하지 않고도 검증할 수 있습니다. 조건에 따라 여러 서명이 필요하거나 특정 시점까지 기다려야 할 수도 있습니다. 기술적으로 트랜잭션은 scriptSig와, 해당하는 경우 별도의 witness 부분에 필요한 데이터를 제공합니다. 노드는 이를 이용해 사용하려는 출력의 조건을 검사합니다. SIGHASH 설정은 서명이 트랜잭션의 어느 부분을 변경으로부터 보호하는지 정합니다. 하지만 유효한 서명도 없는 돈을 쓰거나 총액을 늘리거나 아직 충족하지 않은 시간 잠금을 우회하게 해주지는 않습니다. [2]

서명 후 지갑은 트랜잭션을 전파합니다. 노드는 이를 검토하고 미확인 거래의 대기실인 자신의 mempool에 넣을 수 있습니다. 여기에 들어갔다고 블록에 기록된 것은 아닙니다. 유효한 블록에 포함되어야 첫 확인이 생기고, 그 뒤에 쌓이는 블록마다 확인 횟수가 늘어납니다. 대기 거래를 전달하고 보관하는 규칙은 노드마다 다를 수 있으며 블록의 유효성을 판단하는 규칙과도 다릅니다. 대기 중인 트랜잭션은 같은 자금을 사용하는 다른 트랜잭션으로 대체될 수 있습니다. 네트워크가 유효한 기록의 다른 갈래를 따르는 재구성이 일어나면 이미 받은 확인도 사라질 수 있습니다. 따라서 다른 사람의 화면 캡처를 믿기보다 자신의 지갑에서 올바른 네트워크의 금액, 수신 대상, 확인 상태를 살펴보세요. [4]

지갑에는 보통 트랜잭션을 찾는 식별자인 txid가 표시됩니다. 기술적으로 witness 데이터를 제외한 트랜잭션 인코딩에 SHA-256을 두 번 적용한 값입니다. 두 번째 식별자인 wtxid는 witness까지 포함하며, witness가 없는 트랜잭션에서는 둘이 같습니다. 이 값은 기록을 식별할 뿐, 그 자체로 결제 확인을 증명하지는 않습니다. 수수료는 주로 데이터 크기와 선택한 요율에 따라 달라지며, 보낸 비트코인의 법정화폐 가치에 따라 정해지지 않습니다. 요율에는 가상 크기 vsize를 사용합니다. 이는 트랜잭션의 이른바 무게를 4로 나누어 올림한 값입니다. 따라서 작은 입력을 많이 합치는 비용이 하나의 큰 금액을 옮기는 비용보다 클 수 있습니다. [3]

예시 · TX

입력에서 출력을 뺀 금액이 수수료

일반 트랜잭션이 총 250 000 sat을 사용하고 잔돈을 포함한 수신 대상에 248 200 sat을 배정하면, 남은 1 800 sat이 채굴자 수수료입니다. 별도의 수수료 주소로 보내는 것이 아닙니다.

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 UTXO, Private Key, Mempool, Transaction Fees, SegWit. 다음 항목에서도 이 글을 참조합니다 Bitcoin Whitepaper, Timechain / Blockchain, Full Node, UTXO.

01확인된 Bitcoin 트랜잭션을 되돌릴 수 있나요?

Bitcoin에는 취소 버튼도, 요청을 받고 확인된 송금을 되돌려 줄 관리자도 없습니다. 돈을 돌려받으려면 보통 수신자가 새 트랜잭션으로 반환해야 합니다. 이는 결제가 일시적으로 확인을 잃을 수 있는 체인 재구성과는 다릅니다. 블록이 더 쌓일수록 이력을 대체하는 데 필요한 채굴자의 작업량, 즉 Proof of Work가 증가합니다. 따라서 확인이 많으면 신뢰도는 높아지지만 절대적인 보장은 아닙니다.

02지갑은 왜 거스름돈 출력을 만드나요?

입력은 UTXO를 통째로 소비합니다. 선택한 입력이 결제액과 수수료의 합을 초과하면 지갑은 보통 나머지를 자신의 통제 아래 돌려놓는 새 출력을 만듭니다.

DOC · 001Bitcoin Core v29.0: transaction validation1차 출처 DOC · 002Bitcoin Developer Reference: Transactions1차 출처 DOC · 003BIP 141: transaction identifiers and weight1차 출처 DOC · 004Bitcoin Core v29.0: block validation1차 출처
개정일: 1차 출처 우선 · 투자 조언이 아닙니다