스티븐 루스 지음
출처: https://roose.io/blog/hark-erk-evolving-the-ark-protocol-using-ctv-and-csfs/
(이 기사는 Delving Bitcoin 포럼 에도 게시되었습니다.)
지난주 OP_NEXT 포럼에서 저는 Ark 프로토콜의 새로운 변형인 "Erk"를 제안했습니다. 이 프로토콜은 사용자가 라운드에 참여하는 데 필요한 모든 상호작용을 제거합니다. 이 글에서 Erik De Smedt와 저는 CTV( OP_CHECKTEMPLATEVERIFY
)와 CSFS( OP_CHECKSIGFROMSTACK
)를 사용하여 Ark를 기반으로 구현할 수 있는 Erk 및 기타 최적화 방안을 자세히 설명하고자 합니다.
간단히 말해서, 우리는 Ark에 대해 다음과 같은 특성을 가진 두 가지 경쟁 프로토콜을 도출했습니다.
- "에르크":
- 라운드에 참여하려면 사용자 상호 작용이 필요하지 않습니다.
- 오프라인 새로 고침(서비스 제공자가 사용자를 위해 새로 고침할 수 있음)
- 영구 오프라인 새로 고침(서비스 제공자는 만료일 없이 사용자를 위해 지속적으로 새로 고침할 수 있음)
- 단일 입력, 단일 출력 VTXO에서 가장 잘 작동합니다.
- CTV + CSFS가 필요합니다
- "듣다":
- 라운드에 참여하려면 사용자 상호 작용이 필요하지 않습니다.
- 여러 개의 입력이 있어도 매우 효율적입니다.
- 오프라인 새로 고침이 불가능합니다(적어도 지금까지는)
- CTV만 필요합니다
아크 소개
먼저 기존의 CTV 기반 Ark 프로토콜과 MuSig 기반 clArk 프로토콜을 요약한 다음, 새로운 Erk 및 hArk 변형에 대해 자세히 설명합니다.
먼저, 다음 설명에 사용될 핵심 개념을 요약해 보겠습니다.
Ark 서비스 제공자의 공개 키를 $S$로, 사용자의 공개 키를 $A, B, …$로 표시합니다.
Ark 프로토콜의 기본 구성 요소는 트랜잭션 트리로, 여러 사용자가 하나의 온체인 UTXO를 공유할 수 있도록 합니다. 아래 골격 다이어그램은 앨리스($A$)가 4 BTC, 밥($B$)이 3 BTC, 캐럴($C$)이 2 BTC, 데이브($D$)가 1 BTC를 소유한 트랜잭션 트리를 보여줍니다. Ark는 오프체인 프로토콜이므로, 낙관적인 시나리오에서는 전체 트랜잭션 트리에서 자금 조달 트랜잭션(FUNDING)만 블록체인에서 확인됩니다.
(每个方框都是一笔比特币交易) +------------+ | FUNDING | +------------+ | 10₿ +-----+------+ | NODE 1 | +-----+------+ +---------┴--------------+ 7₿ | | 3₿ +----+----+ +----+----+ | NODE 2 | | NODE 3 | +----+----+ +----+----+ | | +-----+-----+ +-----+-----+ 4₿ | 3₿ | 2₿ | | 1₿ +---+----+ +---+----+ +---+----+ +---+----+ | EXIT A | | EXIT B | | EXIT C | | EXIT D | +--------+ +--------+ +--------+ +--------+
이 설정에서 앨리스는 거래 트리의 자신의 브랜치를 브로드캐스트하여 일방적으로 자금을 인출하고 수령하다 할 수 있습니다. 그녀의 브랜치는 FUNDING , NODE 1 , NODE 2 , 그리고 EXIT A의 네 가지 거래로 구성됩니다. 앨리스가 이러한 거래(그리고 거래를 유효하게 거래소 증인 데이터)를 알고 자신의 공개 키 $A$를 사용하여 이를 사용할 수 있을 때, 그녀는 VTXO를 소유한다고 합니다.
모든 Ark VTXO에는 만료일이 있습니다. 만료일 전에 VTXO를 사용하거나 갱신해야 합니다(그렇지 않으면 사용자는 VTXO의 가치를 잃게 됩니다). "VTXO 갱신"은 기본적으로 하나의 VTXO를 갱신일이 더 늦은 새 VTXO로 교환하는 것을 의미합니다. 이 갱신 작업은 Ark 서비스 제공업체와 사용자 간의 온라인 상호작용인 Ark "라운드"에서 수행됩니다.
만료일 이후, 서비스 제공자는 전체 거래 트리에서 해당 금액을 청산할 수 있습니다. 이상적으로는 서비스 제공자가 자금 조달 거래를 직접 청산(지출)할 수 있지만, 한 명(또는 일부)의 사용자가 일방적으로 종료한 경우, 서비스 제공자는 사용자가 종료하지 않은 나머지 모든 노드의 금액만 청산할 수 있습니다.
아르쿠르
앨리스가 VTXO를 보유하고 밥에게 지불하고 싶어한다면, 새로운 오프체인 거래(일반적으로 "아쿠트 거래"라고 함)를 생성하여 자신의 VTXO(거래 종료 시 출력되는 금액)를 사용하여 밥을 위한 새로운 VTXO를 생성할 수 있습니다. 그러면 밥은 앨리스의 VTXO를 구성하는 모든 거래와 앨리스가 생성한 아쿠트 거래를 저장하여 자신의 새로운 아쿠트 VTXO를 생성할 수 있습니다.
(역자 주: "아르쿠르"는 "라운드 밖에서의 방주"의 약자입니다. 이름에서 알 수 있듯이 라운드 밖에서 연주됩니다.)
산출 지출 조건
우리는 Ark 프로토콜에서 사용되는 출력 지출 조건을 세 가지 유형으로 구분합니다.
- 노드 거래 지출 조건 : 모든 노드 거래(자금 거래 포함)에 사용되는 지출 조건
- Leaf Condition : 마지막 노드 트랜잭션의 출력에 사용된 지출 조건으로, 종료 트랜잭션에 지불됨
- 종료 조건 : 종료 거래에서 사용되는 지출 조건입니다. 종료 거래는 전체 거래 트리의 리프이며 사용자가 일방적 종료를 수행하는 데 사용할 수 있습니다.
논리적으로 이 세 가지 지출 조건은 순차적이라고 생각할 수 있습니다. 아래 다이어그램은 위에 표시된 거래소 에 대한 지출 조건을 보여줍니다. 종료 거래 다음에는 arkoor 거래 또는 relinquish 거래가 이어질 수 있습니다.
FUNDING+-------------+-----+| node policy | 10₿ |+-------------+-----+NODE 1+-------------+-----+| node policy | 7₿ |+-------------+-----+| node policy | 3₿ |+-------------+-----+NODE 2+-------------+-----+| leaf policy | 4₿ |+-------------+-----+| leaf policy | 3₿ |+-------------+-----+EXIT A+-------------+-----+| exit policy | 4₿ |+-------------+-----+
모든 변형에는 다음과 같은 공통적인 특징이 있습니다.
각 라운드는 만료된 블록 높이 $T_{exp}$에서 진행됩니다. 이 블록 생성 후, 해당 라운드의 자금(해당 거래 트리)은 Ark 서비스 제공자 키를 통해 청산될 수 있습니다.
본 구성에서 모든 거래는 수수료가 0이며 수수료 앵커 출력을 갖습니다. 실제로 서비스 제공자가 사용자 이탈 비용을 보조하는 것을 선호하는 경우 수수료는 0이 아닐 수 있습니다. 거래 수수료는 구성의 필수 조건은 아니지만, 수수료 앵커 출력은 필수 조건입니다. (역자 주: 이 앵커 출력을 통해 사용자는 "CPFP" 방식을 통해 수수료를 추가할 수 있습니다.)
노드 지출 조건 과 리프 지출 조건은 모두 대체 지출 경로로 거래 트리의 분기를 계속 진행하여 서비스 제공자가 만료 후에 자금을 청산할 수 있도록 합니다.
사용자의 경우 활성 상태 요구 사항은 VTXO가 만료되기 전(즉, $T_{exp}$ 전)에 인터넷에 다시 접속하여 VTXO를 새로 고치거나 일방적으로 종료해야 함을 의미합니다(서비스 제공자와 해당 arkoor VTXO의 이전 소유자가 부적절하게 동작하는 경우).
출구 거래가 블록에 의해 확인되면 만료 메커니즘은 무효화되고 자금은 출구 조건 에 진입합니다. 출구 조건에는 두 가지 주요 기능과 해당 용어가 있습니다.
- 사용자와 서비스 제공자가 협력하여 즉시 지출을 생성할 수 있는 방법을 제공하는 지불 조건 (Arkoor 거래 및 포기 거래 생성에 사용됨)
- 사용자가 이 VTXO로 즉시 지출을 생성하지 않을 경우 해당 자금에 액세스할 수 있는 방법을 제공하는 종료 조항
종료 조건 의 원래 설계에서는 종료 절 에 상대적 시간 잠금을 사용했지만, 업데이트된 설계에서는 절대적 시간 잠금 $T_{exp}$과 상대적 시간 잠금 $\Delta t$를 결합합니다.
- 이러한 상대적 시간 잠금은 지불 조건 이 종료 조건 보다 우선함을 보장합니다.
- 이 절대적인 시간 잠금은 이 VTXO의 후속 소유자( 지불 조건을 사용하여 arkoor 거래를 통해 이 VTXO를 받을 수 있는 모든 사람)가 $T_{exp}$ 이전에 어느 정도 온라인 상태인 것 외에는 다른 활성 요구 사항이 없음을 보장합니다.
일부 변형에 대한 자세한 설명
방주
아크 프로토콜의 원래 버전은 CTV를 기반으로 했습니다. 이 아이디어의 최신 버전도 동일합니다.
노드 지출 조건 과 종료 조건은 모두 OP_CTV
사용하여 다음 거래를 커밋합니다.
- 노드 조건 및 리프 조건 : $CTV\ 또는\ (S + T_{exp})$
- 종료 조건 : $(A + S)\ 또는\ (A + T_{exp} + \Delta t)$
라운드 중(VTXO 갱신 시), 사용자는 웨이버 트랜잭션 에 서명하여 VTXO를 서비스 제공자에게 전송합니다. 이 웨이버 트랜잭션은 다음 라운드의 성공적인 시작을 조건으로 합니다. 커넥터는 다음 라운드 자금 조달 트랜잭션의 전용 자손 트랜잭션입니다. 이는 웨이버 트랜잭션 의 출력으로 사용되어 서비스 제공자가 다음 라운드 자금 조달 트랜잭션이 성공적으로 확인된 경우에만 웨이버 트랜잭션을 실행할 수 있도록 합니다. 모든 사용자가 VTXO에 대한 웨이버 트랜잭션에 서명하면 서비스 제공자는 자금 조달 트랜잭션에 서명하고 이를 비트코인 네트워크에 브로드캐스트할 수 있습니다.
항복 거래에는 두 가지 입력이 있습니다.
- 퇴장 지출 조건 의 지불 조건을 사용하여 퇴장 거래의 출력
- 커넥터 입력, 새로운 라운드의 자금 조달 거래에서 파생된 일련의 거래의 출력
면제 거래에는 모든 자금을 서비스 제공자에게 보내는 하나의 출력만 있습니다.
forfeit tx:| inputs | outputs | +===========+=========+| exit tx | S | +-----------+---------+| connector | | +-----------+---------+
clArk, "조건 없는 방주"
clArk는 Ark와 매우 유사하지만, 트랜잭션 트리에서 재귀적 다중 서명 메커니즘을 사용합니다. 각 노드 조건 에는 해당 노드 아래의 모든 리프 노드의 공개 키를 사용하는 다중 서명 메커니즘이 포함되어 있습니다.
- 노드 조건 : $(A + B + C + … + S)\ 또는\ (S + T_{exp})$
- 잎 상태 : $(A + S) 또는\ (S + T_{exp})$
- 종료 조건 : $(A + S)\ 또는\ (A + T_{exp} + \Delta t)$
라운드 메커니즘은 동일하며 커넥터를 사용합니다. 유일한 차이점은 모든 클라이언트가 거래 트리의 각 브랜치에 서명하는 추가 단계가 필요하다는 것입니다.
에르크, "에릭의 방주"
OP_NEXT 컨퍼런스에서 Erk를 시연하고 나서, 몇 가지 추가 업그레이드를 진행했습니다.
Erk의 지출 조건은 Ark와 정확히 동일하지만, 서명을 재바인딩 가능하게 만듭니다("재바인딩 가능한 서명"은 APO 의미론을 사용하는 서명으로, 특정 UTXO 입력에 커밋하지 않으므로 동일한 공개 키가 포함된 모든 출력을 지출하는 데 사용할 수 있습니다). CTV + CSFS를 사용하여 재바인딩 가능한 서명을 구현할 수 있습니다.
- 노드 조건 및 리프 조건 : $CTV\ 또는\ (S + T_{exp})$
- 종료 조건 : $(A + S)\ 또는\ (A + T_{exp} + \Delta t)$
종료 조건 에서 $A + S$는 리바인딩 시그니처를 사용하는 곳입니다.
Erk의 핵심적이고 근본적인 원칙은 환불 거래 라고 부르는 다음 거래에 구현되어 있습니다.
refund tx:| inputs | outputs | +====================+================+| old exit tx for A | exit policy A' | +--------------------+----------------+| new exit tx for A' | S | +--------------------+----------------+
Erk 라운드에는 사용자 상호작용이 없습니다("사용자 상호작용"은 "모든 사용자가 동시에 작업을 수행하는 것"으로 정의합니다). 사용자는 새로운 공개 키($A'$)와 서명된 환불 거래를 서비스 제공자에게 전송하여 라운드에 참여합니다. 환불 거래의 한 입력은 현재 공개 키 $A$로 서명되고, 다른 입력은 새로운 공개 키 $A'$로 서명됩니다.
이 시점에서 서비스 제공자는 안전하게 새로운 VTXO 트리를 생성하고 사용자에게 동일한 VTXO를 발급할 수 있습니다(수수료 제외). 이 새로운 VTXO는 새로운 공개 키 $A'$를 사용하는 종료 조건을 갖습니다.
사용자는 언제든지 이 환불 거래에 안전하게 서명할 수 있습니다. 거래 출력 중 하나를 통해 돈을 받게 되기 때문입니다. 따라서 서비스 제공업체가 이 거래를 악의적으로 사용하더라도 사용자는 자금을 잃지 않습니다.
서비스 제공자는 이러한 서명된 환불 거래를 수신한 후에도 라운드를 생성할 수 있습니다. 사용자가 원래의 오래된 VTXO를 (악의적으로) 인출하려고 하면 서비스 제공자가 이 새로운 VTXO를 공개하고 동시에 둘 다 사용하여 사용자가 받을 자격이 없는 것을 가져갈 수 있기 때문입니다.
아르쿠르
Erk 변형에서 arkoor 트랜잭션을 구현하는 데는 특별한 주의가 필요합니다. 사용자 Alice가 arkoor 트랜잭션을 사용하여 Bob에게 새 VTXO를 보낸 후 악의적으로 기존 VTXO를 인출하려고 시도한다고 가정해 보겠습니다. 서비스 제공자는 새 VTXO를 브로드캐스트하고 환불 트랜잭션을 사용해야 하며, 이로 인해 Bob의 arkoor VTXO가 무효화됩니다.
그러나 거래 트리의 리프인 종료 거래는 환불 거래와 동일한 출력 지출 조건(공개 키 $A'$에 대한)을 가지므로, 밥은 앨리스에게 재바인딩 arkoor 서명을 요청할 수 있습니다. 이 서명은 두 출력 모두에 사용될 수 있습니다. (환불 거래는 종료 거래의 자식이므로 한 번에 하나만 존재할 수 있습니다.)
이 설계는 각각의 새로운 VTXO가 단일 VTXO 입력에서 발생한다는 전제 하에 Arkoor 트랜잭션이 Erk에서 작동할 수 있도록 합니다. 이 설계를 여러 VTXO 입력이 단일 VTXO 출력으로 결합되는 경우로 일반화하면 Arkoor 구조가 제대로 작동하지 않습니다.
오프라인 새로 고침
이제 사용자가 VTXO 생성 직후 VTXO 환불 거래에 사전 서명하고, 이 서명을 서비스 제공업체에 제출한 후 오프라인 상태가 되었다고 가정해 보겠습니다. 이는 서비스 제공업체가 언제든지 VTXO를 안전하게 재발급할 수 있음을 의미합니다. 환불 거래가 있는 한, 사용자가 두 VTXO를 동시에 수령하다 위험은 없습니다. 즉, 사용자가 수동 갱신을 포기하더라도 서비스 제공업체가 자동으로 지원할 수 있습니다. 또는 감시탑이 Ark를 모니터링하고 서비스 제공업체가 사용자의 VTXO 갱신을 지원하지 않을 경우 사용자에게 알릴 수도 있습니다.
(번역자 주: "워치타워"는 비트코인 블록체인을 모니터링하고 이를 대신하여 이벤트에 대응할 수 있는 인터넷 서비스를 말합니다.)
더욱이, 첫 번째 플러시가 공개 키 $A$를 $A'$로 변경한다고 가정하면, 앨리스는 향후 VTXO $A'$에 대한 환불 거래에 사전 서명하여 공개 키를 $A''$로 변경할 수도 있습니다. 실제로 앨리스는 여러 플러시에 사전 서명하여 각 플러시가 새로운 공개 키로 자금을 이체하고 (서비스 제공업체의 서비스 수수료로 매번 일정 금액을 공제할 수도 있습니다) 이를 통해 서비스 제공업체는 감시탑에서 서비스 제공업체가 규정을 준수하지 않는다는 경고가 발생하지 않는 한 사용자가 다시 온라인으로 돌아갈 필요 없이 VTXO를 지속적으로 플러시할 수 있습니다.
악의적인 서비스 제공자가 이러한 모든 환불 거래를 빠르게 적용하여 모든 서비스 수수료를 챙길 수도 있습니다(각 거래에 대해 채굴 수수료를 지불해야 하므로 이는 반드시 경제적인 방법은 아닙니다). 각 환불 거래에 절대적인 시간 잠금을 설정함으로써 이를 방지할 수 있습니다. 서비스 제공자는 예상 라운드 시간을 기반으로 계산된 미래 시간 이후에만 해당 환불 거래를 사용할 수 있습니다.
hArk, "해시 록 아크"
Erk는 매우 강력해 보였습니다(비록 우리는 잠재적인 코드명인 "aArk"를 버렸지만요). 하지만 두 가지 큰 단점이 있었습니다.
- 악의적인 종료에 대한 보복 조치를 취하려면 서비스 제공자는 새로운 VTXO가 있는 거래 트리 브랜치를 공개해야 합니다. 이는 사용자가 Ark로 자금을 이체할 때 생성하는 "진입 VTXO"의 경우 특히 문제가 됩니다. 진입 VTXO는 자금 조달 거래 하나와 퇴출 거래 하나로만 구성됩니다(자금 조달 거래의 출력은 리프 지출 조건을 사용함). 즉, 사용자는 악의적인 종료를 시도하는 데 드는 비용을 낮게 부담하는 반면, 서비스 제공자는 보복에 드는 비용을 높게 부담할 수 있습니다.
- Erk는 단일 VTXO 입력의 새로 고침만 지원할 수 있습니다.
hArk는 Erk의 변형이 아니라 완전히 다른 Ark의 변형입니다. 라운드 메커니즘은 사용자 상호 작용을 필요로 하지 않고, 온체인 추적을 최소화하며, 여러 VTXO 입력 상황에 완벽하게 적응합니다.
hArk에서 리프 지출 조건은 노드 지출 조건 과 다릅니다. 리프 지출 조건은 비밀 값에 대한 지식이 필요합니다.
- 노드 조건 : $CTV\ 또는\ (S + T_{exp})$
- Leaf 조건 : 개념적으로 $(CTV + secret) 또는 \(S + T_{exp})$( $secret$은 필수 비밀 값임)이지만 대안인 $(A + S + secret tweak) 또는 \(S + T_{exp})$는 Taproot 키 경로를 사용하여 사용할 수 있으므로 더 효율적입니다.
- 종료 조건 : $(A + S)\ 또는\ (A + T_{exp} + \Delta t)$
hArk 라운드 동안 사용자는 갱신하려는 VTXO 출력을 제출합니다. 서비스 제공자는 트리에 있는 각 새 VTXO에 대한 비밀 값을 생성합니다. 이 비밀 값은 처음에는 서비스 제공자만 알고 있으므로 라운드(트랜잭션 트리)에 안전하게 자금을 지원할 수 있습니다. 모든 비밀 값은 기밀로 유지되므로 처음에는 새 VTXO에 사용자가 접근할 수 없습니다.
라운드 자금 조달 거래가 블록에 의해 확인되면, 사용자는 포기 거래 에 서명합니다. 이 포기 거래는 Ark 및 clArk의 포기 거래와는 다릅니다. 서비스 제공자는 비밀 값을 공개하여 VTXO의 가치를 수령하다 할 수 있습니다.
이 기권 거래의 출력 지출 조건은 $(S + secret)\ 또는 \(A + \Delta t)$입니다. 간단히 말해, 비밀 값 확인은 간단한 해시 잠금을 사용하여 구현할 수 있지만, Taproot의 키 지출 경로에 있는 "어댑터 서명"(Schnorr 서명)을 사용하여 구현할 수도 있으며, 이를 통해 바이트를 절약할 수 있습니다.
forfeit tx:| inputs | outputs | +=========+============+| exit tx | S + secret || | or A + Δt |+---------+------------+
사용자가 포기 거래에 서명한 후, 서비스 제공자는 사용자에게 비밀 값을 알려주고, 이를 통해 사용자는 새로운 VTXO에 액세스할 수 있습니다.
사용자가 권리 포기 거래에 서명한 후 서비스 제공자가 관련 비밀 값을 제공하지 않을 경우, 사용자는 일방적인 탈퇴를 시도해야 합니다. 궁극적으로, 해당 금액은 사용자에게 반환되거나, 서비스 제공자가 온체인 비밀 값을 공개하게 됩니다.
결론적으로
CTV가 사용 가능해지면 Ark 라운드 메커니즘에서 모든 사용자 상호 작용을 완전히 없앨 수 있습니다. VTXO 갱신은 완전히 비동기적인 프로세스로 전환되어 사용자가 자유롭게 등록하고, 서비스 제공업체가 독립적으로 새로운 VTXO를 발급할 수 있으며, 사용자는 나중에 인터넷에 접속하여 전체 프로세스를 완료할 수 있습니다.
CTV 상에서 CSFS를 사용할 수 있다면 오프라인 새로 고침을 재귀적으로 사용할 수도 있습니다. 이를 통해 서비스 제공업체는 사용자 개입 없이 VTXO를 자동으로 새로 고칠 수 있으며, 사용자는 올바른 동작 모니터링 작업을 제3자(워치타워)에 위임할 수 있습니다.
Erk와 hArk는 동시에 사용할 수 있습니다. 사용자는 정해진 시간 내에 온라인에 접속할 수 없는 경우를 대비하여 언제든지 Erk 환불 거래에 사전 서명할 수 있지만, 여러 VTXO를 하나로 병합하거나 가능한 한 빨리 새로 고침하려는 경우와 같이 수동으로 라운드에 참여하려면 hArk 방식을 사용할 수 있습니다.
우리는 위의 솔루션이 Ark의 사용자 경험, 모바일 시나리오에서의 Ark의 사용성, 그리고 Ark 서비스 제공자가 제공할 수 있는 기능을 크게 향상시킬 수 있을 것으로 생각합니다.
(위에)