
코인, 잔액, 계정: "내가 얼마나 가졌나"에 답이 셋인 이유
여러 체인을 지원하는 지갑을 열어 자세히 들여다보면 이상한 점이 눈에 띕니다. 비트코인 잔액과 이더리움 잔액은 둘 다 화면 위의 숫자일 뿐이지만, 그 아래에서 계산되는 방식은 완전히 다릅니다 — 그리고 솔라나에는 또 세 번째 방식이 있습니다.
이건 잡학이 아닙니다. 비트코인 수수료가 왜 당신의 거래 이력에 좌우되는지, 이더리움 거래가 왜 실패하고도 돈이 들 수 있는지, 솔라나 계정이 왜 그냥 0까지 비워지지 않는지를 설명해 줍니다.
UTXO 모델: 당신이 가진 것은 잔액이 아니라 코인이다
비트코인에는 계정이 없고 잔액도 저장하지 않습니다. 저장하는 것은 쓰이지 않은 거래 출력의 묶음 — UTXO — 이고, 각각은 어떤 지출 조건에 잠긴 하나의 독립된 가치 덩어리입니다.
현금을 떠올려 보십시오. 주머니에 "4만 7천 원"이 있는 게 아닙니다. 2만 원권 한 장, 1만 원권 두 장, 5천 원권 한 장, 1천 원권 두 장이 있는 겁니다. 2만 3천 원을 내려면 2만 원권과 5천 원권을 건네고 2천 원을 거슬러 받습니다. 지폐를 반으로 찢을 수는 없습니다.
UTXO는 정확히 이렇게 작동합니다. 각각은 통째로 쓰여야 합니다. 1 BTC짜리 출력에서 0.3 BTC를 내려면, 지갑은 1 BTC 전부를 소모하고 새 출력 두 개를 만듭니다. 받는 사람에게 0.3, 그리고 대략 0.7이 거스름돈으로 당신에게 돌아옵니다. 1 BTC짜리 UTXO는 더 이상 존재하지 않습니다.
그러니 당신의 "잔액"은 도출된 수치입니다 — 지갑이 체인을 훑어 당신이 충족할 수 있는 조건에 잠긴 출력들을 찾아 더한 것이죠. 비트코인 블록체인 어디에도 당신이 특정 액수를 가졌다는 기록은 없습니다.
여기서 세 가지가 따라 나오고, 셋 다 실용적입니다.
수수료는 액수만이 아니라 당신의 이력에 좌우됩니다. 수수료는 바이트당 매겨지고, 쓰는 입력 하나하나가 바이트를 더합니다. 큰 UTXO 하나에서 5만 원을 내는 것은 쌉니다. 똑같은 5만 원을 자잘한 UTXO 서른 개를 합쳐 내면 비쌉니다. 거래가 물리적으로 더 크기 때문입니다. 수수료가 쌀 때 UTXO를 합쳐 두는 값어치가 여기 있습니다.
거스름돈은 어딘가로 가야 하는 진짜 출력입니다. 어느 지갑이든 알아서 처리하지만, 체인 분석가들이 당신의 주소를 서로 잇는 데 쓰는 거스름돈 주소 추정법이 기대고 있는 것도 이 구조입니다.
지출은 본디 병렬적입니다. 서로 다른 UTXO는 독립적이라, 당신의 거래를 엄격한 순서에 묶어두는 것이 없습니다.
비트코인, 라이트코인, 도지코인, 비트코인 캐시, Zcash, Ravencoin, Flux가 모두 이 방식입니다. 더 오래된 모델이고, "당신의 키가 아니면 당신의 코인도 아니다"가 가장 문자 그대로 들어맞는 모델입니다 — 계정이란 없고, 조건이 붙은 코인만 있으니까요.
계정 모델: 당신이 가진 것은 잔액과 계수기
이더리움은 그것을 버리고 은행 장부에 가까운 방식을 택했습니다. 체인은 상태를 저장합니다. 주소에서 잔액으로(컨트랙트라면 저장된 데이터로) 이어지는 거대한 대응표입니다. 0.3 ETH를 보내는 것은 한 숫자에서 0.3을 빼고 다른 숫자에 더하는 일입니다. 입력도, 출력도, 거스름돈도 없습니다.
그쪽이 더 단순하고, 스마트 컨트랙트를 실용적으로 만든 것도 그것입니다 — 컨트랙트는 읽고 쓸 수 있는 지속적 저장 공간이 필요한데, 세상이 낱낱의 코인으로 이루어져 있으면 그 일이 어색해집니다.
하지만 계정 모델은 UTXO에는 없는 문제를 들여옵니다. 거래가 그저 "앨리스에게서 0.3을 빼라"라면, 그것을 본 누구든 거듭 다시 퍼뜨려 계정을 비워버릴 수 있습니다. 해법이 논스입니다. 계정마다 있는 계수기로, 모든 거래에 담기며 정확히 하나씩 늘어야 합니다. 7번 거래는 6번 뒤에야, 그리고 단 한 번만 채굴될 수 있습니다.
EVM 체인이 그렇게 움직이는 이유가 바로 논스입니다.
당신의 거래는 엄격히 순서가 매겨집니다. 막힌 거래 하나가 같은 주소에서 나온 이후의 모든 거래를 막습니다. 순서를 건너뛰어 처리될 수 없기 때문입니다.
거래가 실패해도 수수료는 지불됩니다. 가스는 성공한 연산이 아니라 시도된 연산의 값입니다. 되돌려진 컨트랙트 호출도 검증자의 수고를 썼으니 값을 치릅니다. 이건 사람들을 끊임없이 놀라게 하고, 무효한 거래가 그저 확인되지 않고 한 푼도 들지 않는 UTXO 세계와의 진짜 차이입니다.
논스 관리는 진짜 인프라입니다. 평범한 지갑에서는 보이지 않습니다. 두 기기가 합의한 뒤에야 전파하는 멀티시그에서는 논스를 예약하고 추적하고 놓아주어야 합니다 — 논스를 다루는 일이 두 기기 서명에서 구현 세부가 아니라 거듭 등장하는 주제인 까닭입니다.
이더리움, Polygon, BSC, Avalanche, Base, XDC가 모두 이 모델을 씁니다.
솔라나: 임차료를 내는 계정
솔라나도 계정 기반이지만, 사람들의 허를 찌르는 반전이 있습니다.
솔라나에서는 사실상 모든 것이 계정입니다 — 당신의 지갑도, 보유한 토큰 하나하나도, 각 프로그램의 데이터도. 그리고 그 계정들이 검증자의 메모리를 차지하기 때문에, 살아남으려면 최소 잔액을 지녀야 합니다. 그것이 임차료 면제입니다. 충분히 넣어두면 계정은 무기한 존속하고, 그 아래로 떨어지면 회수될 수 있습니다.
실질적 효과는 이렇습니다. SPL 토큰을 보유하려면 누군가 그 토큰을 당신에게 보낼 수 있게 되기도 전에, 소량의 SOL로 자금을 댄 별도의 토큰 계정이 있어야 합니다. 받는 일은 공짜가 아닙니다. 이는 흔치 않은 성질이고 필요해지기 전에 이해해 둘 값어치가 있습니다. "토큰 보냈는데 아무것도 안 왔다"는 대개 그저 토큰 계정이 없어서니까요.
멀티체인 지갑이 셋 모두를 모델링해야 하는 이유
이 체인들을 지원하는 지갑은 "잔액"이라는 내부 개념 하나를 공유할 수 없습니다. 필요한 것은 이렇습니다.
- UTXO 체인용: 금액과 스크립트를 가진 출력들의 묶음, 그리고 어느 것을 쓸지 정하는 코인 선택 논리.
- EVM 체인용: 단 하나의 잔액 수치와 논스, 그리고 순서를 지키는 대기열.
- 솔라나용: 잔액, 연관 토큰 계정들의 묶음, 그리고 임차료 최소액에 대한 인식.
보안 구조도 적응해야 합니다. UTXO 체인에서 SSP의 2-of-2는 스크립트입니다. 잠금을 풀려면 서명 두 개를 요구하는 P2WSH 출력이고, 체인 자신의 스크립트 규칙이 이를 강제합니다. EVM 체인에는 보통 계정을 위한 동등한 스크립트 체계가 없으므로 멀티시그는 계정 추상화로 구현됩니다 — 검증 논리가 두 서명을 모두 요구하는 스마트 컨트랙트 계정이죠. 솔라나에서는 온체인 프로그램이 통제하는 프로그램 파생 주소입니다.
완전히 다른 세 가지 장치, 그리고 사용자를 향한 하나의 생각: 두 기기 없이는 아무것도 움직이지 않는다. 밑바탕의 구현들이 서로 조금도 닮지 않았다는 사실이야말로, 그 보장이 물려받아진다고 가정될 것이 아니라 체인마다 새로 세워지고 새로 감사받아야 하는 이유입니다.
이것이 당신에게 뜻하는 바
소액 결제인데 비트코인 수수료가 높아 보인다면, 입력을 보십시오. 액수보다 그것이 몇 조각으로 되어 있는지가 더 중요합니다.
이더리움 거래가 막히면 같은 주소에서 나온 뒤의 거래들이 그 뒤에 갇힙니다. 그건 결함이 아니라 논스입니다. 첫 번째를 풀면 줄이 움직입니다.
실패한 EVM 거래가 그래도 요금을 물린다면, 모델이 설계대로 작동하는 것입니다. 시뮬레이션이 그것을 피하도록 돕습니다 — 서명 전 시뮬레이션이 UTXO 체인보다 계정 기반 체인에서 더 값진 이유입니다.
솔라나 토큰 전송이 "사라졌다"면 토큰 계정을 찾아보십시오. 잃어버린 것은 없습니다. 목적지가 아직 존재하지 않았을 수 있습니다.
이 가운데 어느 것도 특정 지갑의 별난 버릇이 아닙니다. 각 체인이 여러 해 전에 내린 설계 결정의 결과이고, 자기가 어느 모델 위에 있는지 보이기 시작하면 달리 보면 어리둥절했을 많은 동작이 예측 가능해집니다.


