CSFS의 흥미로운 활용 사례 (1부)

이 기사는 기계로 번역되었습니다
원문 표시

저자: 제레미 루빈

출처: https://rubin.io/bitcoin/2025/03/05/csfs-fun/

이 블로그 시리즈에서는 제가 발견한 CSFS의 흥미로운 활용 사례 몇 가지를 기록하겠습니다.

목표는 다른 사람들이 아직 모르는 것들을 기록하는 것입니다.

내가 그것들을 발명했냐고요? 그럴 수도 있고 아닐 수도 있죠. 하지만 앞서간 사람들의 업적을 언급하는 건 언제나 환영할 만한 일입니다!

교체 불가능하고 재사용 불가능한 주소

Taproot 출력을 생성하고 "NUMS dot"을 내부 공개 키로 사용합니다(NUMS 키 경로를 사용하고 스크립트 리프(tapleaf)를 하나만 설정하여 모든 비용 옵션을 항상 알 수 있도록 함). 또한 <PK> CHECKSIG (서명 확인) 스크립트를 만족하거나 이 공개 키가 서로 다른 두 데이터에 대해 두 개 이상의 서명을 생성했음을 입증하는 스크립트 리프(tapleaf)를 사용합니다. 그런 다음 둘 중 하나를 선택합니다.

  • CTV를 사용하면 OP_RETUREN으로 보낼 수 있습니다.
  • CTV를 사용하지 않으면 누구나 쓸 수 있는 것이 됩니다.

즉, 이 주소에서 발생한 거래의 서명을 확인하면 발신자는 자금을 잃을 각오가 되어 있지 않는 한 추가 서명을 보내지 않을 것이라는 의미입니다.

더 재밌는 점:

이러한 종류의 "모호한 보험"은 새로운 담보를 통해 주소를 보호하기 위해 다양한 출력 및 주소에서 사용될 수 있으며, 심지어 소급 적용될 수도 있습니다.

함수 조회 테이블 사전 컴파일

f(x) 평가할 수 있는 opcode를 Bitcoin에 추가한다고 가정해 보겠습니다.

设x = musig(巨大的联盟,带有一次性的启动仪式)设CSFS(key, sig, data) = ...

키 연결 기법 ( 중국어 번역 )을 다시 떠올려 보세요... 키 연결을 사용하여 다음과 같은 논리를 가진 스크립트를 만드세요.

 CSFS(X, sig_x, sig_arg)CSFS(Tweaked(X, arg), sig_arg, arg)CSFS(Tweaked(X, arg), sig_f, f(arg)))sig_f != sig_arg

이제 (서명자 위원회 내에서) arg 의 모든 값에 대해 f(arg) 를 실행합니다.

이렇게 하면 스크립트의 크기에 관계없이 사용할 수 있는 조회 테이블을 얻을 수 있으며, 오버헤드는 서명 3개와 공개 키 2개, 즉 256바이트로 일정합니다. 이는 많은 경우 기본 루트가 있는 미리 생성된 트리 구조를 사용하는 것보다 비용이 저렴합니다.

이 기법은 결과가 미리 계산될 수 있는 한 여러 매개변수를 처리하도록 수정할 수도 있습니다. 단, OP_CAT 과 같이 "출력 공간이 큰" 함수는 제외되지만, 조회 테이블은 머클 트리와 같은 규칙 기반일 수 있습니다.

적용 측면에서 볼 때, 위에서 설명한 기법들은 (예를 들어) 머클 트리가 어차피 키로 서명되어야 하는 경우처럼, 신뢰도 측면에서 동일한 효과를 냅니다. 예를 들어, 사용자 잔액 저장하는 트리를 구성할 때, 모든 사용자가 서명 집합에서 자신의 잔액"조회"할 수 있도록 할 수 있습니다.

"표준 라이브러리"의 일반적인 사용 사례에서는 대규모 컨소시엄을 활용하여 일회성 신뢰 설정을 수행할 수 있습니다.

SIGHASH 태그 감지

현재 비트코인 ​​스크립트는 공개 키가 사용하는 sighash 태그를 제한할 수 없습니다. 하지만 CSFS는 Taproot 출력에서 ​​제한적인 버전을 제공할 수 있습니다. 방법은 다음과 같습니다.

CSFS를 사용하면 서명으로부터 거래 요약을 얻어 스택에 저장할 수 있습니다.

OP_CAT이 없으면 사용이 제한됩니다...

하지만 우리는 다음과 같은 공식을 가지고 있습니다.

SigMsg() 함수의 출력 길이는 얼마인가요? SigMsg() 함수의 총 길이는 다음 공식을 사용하여 계산할 수 있습니다: 174 - is_anyonecanpay * 49 - is_none * 32 + has_annex * 32

(역자 주: 여기서 is_anyonecanpay , is_none , has_annex 모두 서명에 해당 쉼표 태그가 사용되었는지 여부를 나타내는 부울 값입니다.)

즉, has_annex 설정된 경우 최대 206바이트입니다.

참고: 이 수치에는 최종적으로 sighash epoch 값 1바이트와 taggedhash 값 64바이트가 포함되어야 합니다.

즉, CSFS를 사용하면 OP_SIZE를 이용하여 특정 시그니처가 특정 시그니처 레이블을 사용하도록 제한할 수 있습니다.

  • is_anyonecanpay=0, is_none=0, has_annex=0, 크기는 174+65입니다.
  • is_anyonecanpay=0, is_none=0, has_annex=1, 크기는 206+65입니다.
  • is_anyonecanpay=0, is_none=1, has_annex=0, 크기는 142+65입니다.
  • is_anyonecanpay=0, is_none=1, has_annex=1, 크기는 174+65입니다.
  • is_anyonecanpay=1, is_none=0, has_annex=0, 크기는 125+65입니다.
  • is_anyonecanpay=1, is_none=0, has_annex=1, 크기는 157+65입니다.
  • is_anyonecanpay=1, is_none=1, has_annex=0, 크기는 93+65입니다.
  • is_anyonecanpay=1, is_none=1, has_annex=1, 크기는 125+65입니다.

즉, CSFS를 사용하면 anyonecanpaynoneannex 태그 조합을 구분할 수 있습니다. 단 is_nonehas_annex 모두 설정되었거나 설정되지 않은 경우는 예외입니다(크기가 동일하므로 구분할 수 없기 때문입니다).

다시 말해, 여러분은 다음과 같은 조합만 생각해낼 수 있을지도 모릅니다.

  • is_anyonecanpay=0, is_none=1, has_annex=0, 크기는 142+65입니다.
  • is_anyonecanpay=1, is_none=1, has_annex=0, 크기는 93+65입니다.

다음 조합들은 그다지 흥미롭지는 않지만, Annex가 일반적인 거래 플랫폼이 아니기 때문에 여전히 고려해 볼 가치가 있습니다.

  • is_anyonecanpay=0, is_none=0, has_annex=1, 크기는 206+65입니다.
  • is_anyonecanpay=1, is_none=0, has_annex=1, 크기는 157+65입니다.

참고: 이러한 조합 외에도 다른 태그를 설정할 수 있습니다!

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트