P2SH 주소를 설정하고 Golang에서 자금을 사용

사진 작성자Florian OlivoUnsplash

Golang에서 원본 다중 Sig P2SH 비트코인 거래 작성


비트코인 스크립트 언어


비트코인 스크립트 언어인 Scrip t는 스택 기반(스택: 고급 선출) 실행 언어입니다.이것은 비트코인의 안전 모델을 간소화하는 데 목적을 둔다. 따라서 이 스크립트는 어떠한 순환이나 이동 조작 코드도 없고, 이 언어는 완전하지 않다.그러나 이런 유한한 언어는 비트코인에 많은 프로그램을 작성하는 능력을 제공했다.비트코인 스크립트 언어에 대한 자세한 내용은 여기link에서 확인할 수 있습니다.

스크립트 해시에 지불(P2SH)


스크립트 지불 해시(P2SH) 거래는 BIP16에서 표준화되었다.이 업데이트는 공개 키 산열 (메인 네트워크에서 1로 시작하는 주소와 테스트 네트워크에서 m로 시작하는 주소) 이 아닌 상환 산열 (메인 네트워크에서 1로 시작하는 주소와 테스트 네트워크에서 m로 시작하는 주소) 에 거래를 보낼 수 있도록 합니다.송신자는 교환에 관한 어떤 정보도 모르고 해시만 교환할 수 있다. 교환은 다중 신호 검사, 비밀번호 검증 또는 기타 그 어떠한 내용도 할 수 있다.
P2SH UTXO에서 비트코인을 소비하려면 수신자는 UTXO에서 환전하는 해시와 일치하는 환전 스크립트와 비트코인을 소비하는 서명 스크립트(sig 스크립트라고 부른다)를 제공해야 한다.
이 자습서에서는 P2SH 형식으로 멀티sig 주소를 구축한 다음 Go 언어를 사용하는 방법을 설명합니다.

다중 Sig 상환 스크립트


m= UTXO 소비에 필요한 최소 서명 수(OP 2=2)
n= 다중 sig 스크립트에 사용된 총 공개 키 수(OP 3=3)
m과 n은 최대 16개
redeem script = <OP_2> <pubkey A> <pubkey B> <pubkey C> <OP_3> OP_CHECKMULTISIG

이것은 상기 함수의 반환값입니다: (공개 키는 굵은 글꼴)



2 **0265e6f7fb614a369c9230912a3bb09c33c5c5be2e1bcfc2293ecaed46708e0b5c**  **03f546edf7b434b50aa0115c1c82a0f9a96505d9eff55d2fe3b848c4b51c06b643**  **02908375f301c7ea583f7e113939eab1164abda4ac27898b1cf78abf1c82f02da9** 3 OP_CHECKMULTISIG

서명 스크립트=


(마지막 코드에서 이 서명 스크립트를 어떻게 구성하는지 단계적으로 설명합니다)


스크립트 실행


서명 스크립트와 상환 스크립트는 창고에서true를 생성합니다



signature script + redeem script = <OP_0> <sig A> <sig C> <OP_2> <pubkey A> <pubkey B> <pubkey C> <OP_3> OP_CHECKMULTISIG

  • 왼쪽에서 오른쪽으로 스택 상단에 각 작업 코드나 데이터를 추가하고 마지막으로 작업 CHECKMULTISIG
  • OP CHECKMULTISIG가 스택 상단에서 검사할 총 키 수를 가져옵니다(이 경우 OP 3)
  • 및 스택 상단
  • 에서 지정된 수의 공개 키를 가져옵니다(이 경우 3, OP 3=3)
  • , 그리고 창고 상단에서 제공해야 할 서명 수를 얻습니다(이 예에서 OP 2=2)
  • 마지막으로 창고에 필요한 서명이 있는지 확인합니다. 서명이 정확하면 창고에true를 남기면 비트코인을 사용할 수 있습니다

(OP 0을 추가하는 것은 비트코인 스크립트 언어에서 알려진 오류입니다. 현재는consensus의 일부분입니다. 완전한 설명을 찾을 수 있습니다 here


이것이 바로 비트코인 스크립트 언어의 작업 원리입니다.이제 우리는 P2SH에 깊이 들어갈 수 있습니다


다중 신호 P2SH


P2SH 주소로 보낸 사람은 산열을 되찾기만 하면 됩니다



redeem-hash = Hash160(redeem script)

P2SH 주소를 구축하려면 먼저 복구 스크립트를 생성해야 합니다. (우리의 예는 생성된 Multi-Sig-receive-script 부분입니다.) 그리고hash160으로 산열해야 합니다.그래서 구원 산열의 길이는 20바이트입니다


(hash160은 2단계 산열 알고리즘으로 먼저 Sha256으로 입력을 산열한 다음에 RIPEMD160으로 그 결과를 산열한다. 최종 결과는 RIPEMD160 산열 함수의 결과가 될 것이다)


이후, 상환 산열로 P2SH 주소를 구축합니다(주 네트워크에서 3부터, 테스트 네트워크에서 2부터).





함수의 반환값은



2NFhEhTAiXJ8z8yEYnXe6SJX5E8bRgB5ZgY

(2부터 네트워크 테스트용으로 생성됨)


현재 누구나 비트코인을 이 주소로 보낼 수 있습니다.발송자가 이 주소에 일정 수량의 비트코인을 보내려고 할 때 지갑은 이 주소에서 교환 산열을 추출하고 잠금 스크립트를 구축하여 거래의 출력에 넣습니다



locking script = OP_HASH160 <redeem-hash> OP_EQUAL

당신도 이것link으로 비트코인 테스트를 획득할 수 있습니다


비트코인(테스트 또는 진실)을 획득한 후 블록 자원 관리자를 검사할 수 있습니다. 예를 들어 api.blockchair.com 잠금 스크립트를 검사할 수 있습니다. 이것은 스크립트 16진법 또는 공공 키 스크립트라고도 부릅니다


블록 자원 관리자에서 스크립트 잠금





상기 함수는 잠금 스크립트를 인간이 읽을 수 있는 비트코인 스크립트 언어로 분해하고 그 반환값은



OP_HASH160 f63e2cbcc678236f683d267e7bb298ffdcd57b04 OP_EQUAL

Spend Multi-Sig P2SH


받는 사람이 이 돈을 쓰려고 할 때 UTXO는 잠금 해제 스크립트, 즉 교환 스크립트와 연결된 서명 스크립트를 제공해야 합니다



unlocking script = <OP_0> <sig A> <sig C> <redeem script>

광부는 이 잠금 해제 스크립트를 블록체인의 잠금 스크립트에 추가하고 이 프로그램을 실행합니다


스크립트 프로그램 = 잠금 해제 스크립트 + 잠금 스크립트



script program = <OP_0> <sig A> <sig C> <redeem script> OP_HASH160 <redeem-hash> OP_EQUAL

  • 및 스택에 하나씩 추가
  • 그런 다음 OP HASH160이 스택 상단 요소의 해시를 추가하고 계산합니다. 즉, 결과를 스택 상단
  • 에 보관합니다.
  • 스택 상단에 추가
  • 마지막으로 OP EQUAL
  • 추가
  • OP EQUAL 검사 스택의 상단 요소 두 개(이 예는 HASH160(구제 스크립트)와
  • 서로 같으면true를 되돌려주고 프로그램을 계속합니다. 그렇지 않으면 창고 맨 위에false를 되돌려주고 프로그램을 중단합니다
  • 따라서 수신자가 같은 상환 스크립트를 제공하여 상환 산열과 주소를 구축하는 데 사용한다면 우리는 스크립트 실행 부분과 같은 상태에 도달하고 창고의 작업 코드와 데이터가 같다

이것은 go에서 다중sig거래를 체결한 코드입니다. 비트코인 거래와 그 구조에 익숙하지 않으시면 제 이전 코드post를 보실 수 있습니다





이것은 상기 함수의 반환값입니다:



0100000001fe75a438b72fdc302b80cc216d66d5e3bbb0359bce3bb4cecf743f5fda1f4eb101000000fdfd000048304502210096b617a5b2bd676ee8d3f8d8d91bf60c599e16382d1e12a61a1f9562c35b2cb102204379706a55c07bb45d20336159f80ebe9786938e34b9309e49ed422e6d2a44470147304402201550a8bb0c28107098289fe6fe64488bdee46800d28bfbb0b0a1e1b2d64b9fb4022004684015095b999185b3da1a23d239452ad73b199a032f71978760f8ae42313f014c6952210265e6f7fb614a369c9230912a3bb09c33c5c5be2e1bcfc2293ecaed46708e0b5c2103f546edf7b434b50aa0115c1c82a0f9a96505d9eff55d2fe3b848c4b51c06b6432102908375f301c7ea583f7e113939eab1164abda4ac27898b1cf78abf1c82f02da953aeffffffff01f8a70000000000001976a914bd63bf79e39f4cd52361c092c3fba9264662285688ac00000000

이것은 원시 비트코인 거래로 테스트 네트워크에서 전송할 수도 있고 blockstream.info 또는 다른 어느 곳에서든 전송할 수도 있습니다


상기 원시 업무의 txid는



c7d1582d4cf85fbd10732002c5bb06068d4b86cfd5cca151ef88104c6702435a

당신은 모든 블록 브라우저에서 비트코인 테스트망을 검색할 수 있습니다


비트코인 테스트 웹 블록 브라우저


my previospost에서 P2PKH 거래, 거래 구조와 비용에 대한 정보를 찾을 수 있습니다


관심 가져주셔서 감사합니다


Also, Read



Get Best Software Deals Directly In Your Inbox




좋은 웹페이지 즐겨찾기