khann's IT와 경제 블로그

반응형

https://github.com/bitcoin/bips/blob/master/bip-0347.mediawiki

 

bips/bip-0347.mediawiki at master · bitcoin/bips

Bitcoin Improvement Proposals. Contribute to bitcoin/bips development by creating an account on GitHub.

github.com

 

정리 By chatgpt-4o

BIP-347: OP_CAT을 활용한 비트코인 Tapscript 확장 제안


1. 개요 (Abstract)

BIP-347은 OP_CAT이라는 연산자를 Tapscript에 추가하는 내용을 담고 있습니다. OP_CAT은 스택(Stack) 상에서 두 개의 값을 연결(Concatenation)하는 기능을 수행합니다.
이 기능은 소프트 포크를 통해 활성화되며, 기존에 사용되지 않던 OP_SUCCESS126(10진수 126, 16진수 0x7e)을 OP_CAT으로 재정의하여 구현됩니다.


2. 기술 사양 (Specification)

OP_CAT의 동작 방식:

  1. 스택의 상단에서 두 개의 값을 꺼낸다.
  2. 꺼낸 두 값을 순서대로 연결한다.
  3. 연결된 값을 다시 스택에 넣는다.
  • 스택 예시: [x1, x2] → OP_CAT 적용 후 → [x1 || x2]
  • 여기서 ||는 연결(Concatenation) 연산을 의미함.
  • 제한 사항: **최대 스크립트 요소 크기(520바이트)**를 초과하는 경우 OP_CAT은 실패함.

3. 동기 (Motivation)

현재 비트코인의 Tapscript에는 스택에서 데이터를 결합하는 기본적인 기능이 부족하여 확장성이 제한됨.
이를 해결하기 위해 OP_CAT을 도입하여 여러 가지 기능을 추가할 수 있음.

OP_CAT을 활용한 주요 사례

  1. Bitstream 프로토콜:
    • 비트코인을 이용한 암호 해독 키의 원자적 교환(Atomic Swap) 프로토콜 구축 가능.
    • 기존 방식(Verifiable Computation 기법)은 복잡하고 계산 비용이 높았지만, OP_CAT을 사용하면 간단하게 구현 가능.
  2. 트리 서명(Tree Signatures):
    • 멀티서명(Multisig)을 보다 효율적으로 구현하여 수백만 개의 키를 포함할 수 있는 논리적 스펜딩 조건을 생성 가능.
  3. 양자 내성 서명(Post-Quantum Lamport Signatures):
    • OP_CAT을 사용하여 Lamport 서명 방식을 적용, 향후 양자 컴퓨터 시대에서도 안전한 트랜잭션이 가능하도록 함.
  4. 비트코인 결제 채널의 비양립성 계약(Non-Equivocation Contracts):
    • 결제 채널에서 중복 트랜잭션(Double Spending)을 방지하는 기능을 추가.
  5. 금고(Vault) 기능:
    • 악의적인 해커가 비밀 키를 훔쳤을 경우, 도난을 방지하는 스마트 계약을 구현 가능.
  6. CheckSigFromStack 기능 재현:
    • 기존 서명 검증을 확장하여 더욱 강력한 스마트 계약을 만들 수 있음.

4. OP_CAT의 역사적 배경

  • OP_CAT은 비트코인의 초기 버전에 존재했으나, 2010년 비트코인 개발자 사토시 나카모토에 의해 제거됨.
  • 당시 제거 이유:
    • OP_CAT을 반복 사용하면 메모리 사용량이 기하급수적으로 증가할 수 있었음.
    • 하지만 현재는 최대 스크립트 요소 크기(520바이트)가 존재하기 때문에, 이러한 문제는 해결됨.

5. 기술적 선택 및 이유 (Rationale)

  • OP_CAT을 활성화하기 위해 OP_SUCCESS126을 재정의함.
  • OP_SUCCESS126은 비트코인 초기 버전에서 OP_CAT이 사용하던 코드 값과 동일하여 혼동을 방지할 수 있음.
  • 스택 요소 크기(520바이트) 변경 여부에 대해서는 본 제안에서 다루지 않음.

6. 하위 호환성 (Backwards Compatibility)

  • 기존 Tapscript가 아닌 스크립트에서 OP_CAT을 사용하면 오류 발생 (SCRIPT_ERR_DISABLED_OPCODE).
  • OP_CAT은 Tapscript 내에서만 사용 가능하며, 소프트 포크를 통해 추가됨.

7. 참조 구현 (Reference Implementation)

비트코인의 OP_CAT 연산을 구현하는 코드:

case OP_CAT:
{
  if (stack.size() < 2)
    return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
  valtype& vch1 = stacktop(-2);
  valtype& vch2 = stacktop(-1);
  if (vch1.size() + vch2.size() > MAX_SCRIPT_ELEMENT_SIZE)
    return set_error(serror, SCRIPT_ERR_PUSH_SIZE);
  vch1.insert(vch1.end(), vch2.begin(), vch2.end());
  stack.pop_back();
}
break;

 

MAX_SCRIPT_ELEMENT_SIZE = 520 바이트로 설정.

 

9. 참고 자료

반응형

이 글을 공유합시다

facebook twitter googleplus kakaostory naver