스테이트체인은 2018년 루벤 솜센에 의해 개발된 원래의 두 번째 레이어 프로토콜로, 엘투(또는 LN 대칭) 제안에 의존합니다. 2021년에는 원래 제안의 변형인 머큐리가 커머스블록에 의해 구축되었습니다. 2024년에는 원래 머큐리 계획의 추가 반복인 머큐리 레이어가 구축되었습니다.
스테이트체인 프로토콜은 원래 제안된 설계와 실제로 구현된 두 가지, 그리고 느슨하게 제안된 다른 가능한 설계 간의 다양한 변형으로 인해 아크나 라이트닝과 같은 다른 시스템에 비해 논의하기가 다소 복잡합니다.
아크와 마찬가지로 스테이트체인은 기능하기 위해 중앙 집중식 조정 서버에 의존합니다. 아크와는 달리, 스테이트체인은 아크 배치의 vUTXO와는 약간 다른 신뢰 모델을 가지고 있습니다. 그들은 조정 서버가 신뢰할 수 있도록 이전에 생성된 개인 키의 공유를 삭제하는 데 의존하지만, 서버가 정의된 프로토콜을 따르고 그렇게 한다면 강력한 보안 보장을 제공합니다.
스테이트체인의 일반적인 아이디어는 조정자를 통해 오프체인에서 서로 다른 사용자 간에 전체 UTXO의 소유권을 이전할 수 있는 것입니다. 라이트닝과 같은 유동성을 받을 필요가 없으며, 아크와 같은 유동성을 제공할 필요가 없습니다.
우선, 루벤 솜센이 제안한 원래 프로토콜을 살펴보겠습니다.
원래 스테이트체인
스테이트체인은 현재 소유자가 원할 때마다 체인에서 일방적으로 인출할 수 있도록 허용하는 사전 서명된 거래이며, 과거 소유자와 그들이 스테이트체인을 보낸 수신자가 해당 이전을 승인했음을 암호적으로 증명하는 서명된 메시지의 기록입니다.
원래 설계는 ANYPREVOUT을 사용하여 엘투에 기반하여 구축되었지만, 현재 동일한 기능을 활성화하는 방법에 대한 계획은 CHECKTEMPLATEVERIFY와 CHECKSIGFROMSTACK을 사용합니다(이와 관련된 고급 설명은 CHECKSIGFROMSTACK 기사 끝에 있습니다). 기본 아이디어는 해당 스크립트를 가진 모든 UTXO를 지출할 수 있는 사전 서명된 거래를 가능하게 하는 스크립트로, 특정 UTXO에 지출하는 것에 묶이지 않습니다.
프로토콜에서 스테이트체인에 코인을 입금하려는 사용자는 조정 서버에 접근하여 입금 프로토콜을 거칩니다. 입금하는 사용자인 밥은 그가 고유하게 소유할 키와 나중에 공유될 두 번째 “임시” 키를 생성합니다(이에 대한 자세한 내용은 곧 다루겠습니다). 그런 다음 그들은 조정자의 키와 임시 키로 서명해야 하는 멀티시그에 코인을 잠그는 입금 거래를 작성합니다.
이 멀티시그를 사용하여 밥과 조정자는 그 코인을 지출하고 임시 키와 조정자의 키로 서명된 다른 거래에 의해 지출될 수 있는 UTXO를 생성하는 거래에 서명합니다. 이제 밥은 적절한 금액으로 멀티시그를 자금 지원할 수 있으며, 스테이트체인이 생성되었습니다.
스테이트체인을 찰리에게 이전하기 위해 밥은 여러 단계의 과정을 거쳐야 합니다. 먼저, 밥은 스테이트체인을 찰리에게 이전할 것임을 증명하는 메시지에 자신의 고유한 개인 키로 서명합니다. 찰리도 밥으로부터 스테이트체인을 받았음을 증명하는 메시지에 서명해야 합니다. 마지막으로, 조정 서버는 찰리가 스테이트체인을 체인에서 일방적으로 주장할 수 있도록 허용하는 새로운 거래에 서명해야 하며, 그 후 밥은 찰리에게 임시 키의 복사본을 보냅니다.
이 모든 것은 어댑터 서명을 사용하여 원자적으로 이루어집니다. 이는 무작위 데이터 조각을 사용하여 무효화되도록 수정된 서명으로, 서명 보유자가 해당 정보를 받을 때 다시 유효하게 만들 수 있습니다. 모든 메시지와 새로운 사전 서명된 거래는 어댑터 서명으로 서명되며, 어댑터 데이터를 해제함으로써 동시에 원자적으로 유효하게 됩니다.
스테이트체인의 보유자는 조정 서버가 이전 소유자와 공모하여 스테이트체인을 즉시 종료하고 현재 소유자로부터 자금을 훔치지 않도록 신뢰해야 합니다. 그러나 사전 서명된 메시지의 체인은 조정자가 도난에 참여했음을 증명할 수 있습니다. 과거 소유자가 사전 서명된 거래를 사용하여 자금을 훔치려 하면, 그들의 키만 사용하여 지출 경로에 대한 타임락이 현재 소유자가 사전 서명된 거래를 제출하고 체인에서 자금을 올바르게 주장할 수 있도록 합니다.
머큐리와 머큐리 레이어
원래 스테이트체인 아키텍처는 기능하기 위해 소프트포크가 필요합니다. 커머스블록은 소프트포크 없이 기능하도록 스테이트체인의 변형을 설계했지만, 이를 위해 기능성 측면에서 트레이드오프가 이루어졌습니다.
기본 아이디어는 원래 설계와 동일하며, 모든 사용자는 자금을 일방적으로 주장할 수 있는 사전 서명된 거래를 보유하고 있으며, 조정 서버는 여전히 신뢰를 요구하는 오프체인 이전을 촉진하는 역할을 합니다. 두 가지 주요 차이점은 거래 서명 방식과 사용자에게 제공되는 사전 서명된 거래의 구조입니다.
서명과 관련하여 더 이상 사용자 간에 전달되는 임시 개인 키가 없습니다. 대신, 원래 소유자와 조정 서버가 전체 키를 소유하지 않고도 개인 키의 부분 조각을 공동 생성할 수 있도록 하는 다자간 계산 프로토콜(MPC)이 사용됩니다. 이 키는 사전 서명된 거래에 서명하는 데 사용됩니다. MPC 프로토콜은 현재 소유자와 조정자가 이전 소유자와의 거래를 통해 동일한 개인 키에 합산되는 다른 조각을 재생성할 수 있도록 합니다. 머큐리와 머큐리 레이어 프로토콜 모두에서, 이전 소유자에 해당하는 키 자료를 삭제하는 것은 정직한 조정 서버의 의무입니다. 이렇게 하면 조정자가 이전 소유자와 거래에 서명할 수 없게 되며, 그들이 가진 새로운 키 자료는 이전 소유자가 여전히 가질 수 있는 조각과 호환되지 않습니다. 이는 조정자가 정직한 한, 원래 제안보다 더 강력한 보장을 제공합니다.
머큐리와 머큐리 레이어의 사전 서명된 거래 구조는 소프트포크 없이 LN 대칭을 사용할 수 없습니다. 대신, 커머스블록은 감소하는 타임락을 사용하기로 선택했습니다. 원래 소유자의 사전 서명된 거래는 스테이트체인이 생성된 시점에서 먼 미래의 시간으로 nLocktime을 사용하여 타임락됩니다. 각 후속 사용자가 이전 소유자보다 미리 정해진 시간보다 짧은 nLocktime 값을 가진 거래를 수신할 때마다, 이는 보장합니다. 이전 소유자는 현재 소유자가 체인에서 거래를 제출하기 전에 시도조차 할 수 없습니다. 그러나 이는 결국 현재 소유자가 이전 소유자의 거래가 유효해지기 전에 체인에서 스테이트체인을 종료해야 함을 의미합니다.
머큐리와 머큐리 레이어의 주요 차이점은 이러한 거래가 서명되는 방식입니다. 머큐리의 경우, 조정 서버는 제안된 거래를 보고 이를 검증한 후 서명합니다. 머큐리 레이어는 블라인드 서명 프로토콜을 사용하여 서명하는 거래의 세부 사항을 실제로 보지 않습니다. 이는 서버가 익명화된 기록을 사용하여 스테이트체인을 추적하고, 현재 소유자의 특별한 승인 키를 사용하여 유효한 이전만 서명하도록 보장해야 합니다.
다른 레이어와의 시너지
스테이트체인은 사전 서명된 거래를 기반으로 하는 다른 레이어 2와 시너지를 낼 수 있습니다. 예를 들어, 원래 제안의 일부는 스테이트체인과 라이트닝 채널의 조합을 제안했습니다. 두 가지 모두 단순히 사전 서명된 거래이기 때문에, 실제로 스테이트체인 위에 라이트닝 채널을 중첩할 수 있습니다. 이는 현재 소유자의 일방적인 종료 키가 멀티시그가 되고, 그 출력을 라이트닝 채널로 지출하는 사전 서명된 거래를 생성하는 것만 필요합니다. 이를 통해 라이트닝 채널을 완전히 오프체인에서 열고 닫을 수 있습니다.
유사한 방식으로, 아크 배치의 vUTXO 위에 스테이트체인을 중첩할 수 있습니다. 이는 스테이트체인을 구성하는 데 필요한 사전 서명된 거래가 vUTXO 출력을 지출하는 것만 필요합니다.
마무리
스테이트체인은 완전히 신뢰할 수는 없지만, 매우 신뢰를 최소화한 방식으로 매우 유동성이 효율적이며, 스테이트체인의 신뢰 모델을 수용할 의사가 있는 모든 사용자 간에 UTXO를 오프체인에서 자유롭게 이전할 수 있게 해줍니다.
원래 제안은 아직 구축되지 않았지만, 커머스블록이 설계한 두 가지 구현은 완전히 구현되었습니다. 두 가지 모두 실제 세계에서 한계 이상의 사용을 달성하지 못했습니다. 이는 사용자가 관련된 신뢰 모델을 수용하지 않으려는 것인지, 아니면 단순히 마케팅이나 인식의 실패 때문인지 완전히 확인할 수 없습니다.
어쨌든, 두 가지 완전한 구현과 LN 대칭이 비트코인에서 가능해질 경우 더 유연한 변형에 대한 설계가 있다는 점에서, 이는 항상 존재할 옵션입니다. 오픈 소스 소프트웨어의 좋은 점은 사람들이 지금 사용하든, 미래에 선택할 경우 항상 존재한다는 것입니다.