Bitcoin: (Programming Q) Generating receive addresses from p2wsh multi-sig script?

Generating Receiving Addresses from the P2Wash Multi-Sig Script

= Here is an example of how this can be implemented:

import hashlib

import binascii

from embit import bech32


Define constants for the blockchain hash and signature derivation parameters

BLOCKCHAIN_HASH = "your_blockchain_hash_here"

SIGDERivationParameter = 3

def derive_signature(p, r, s):

"""Derivate signature using public key"""

return (hexlify(p).decode() + hashlib.sha256(b"s".encode()).digest().hex()) % 1000000

def p2wpub_script(p, sig, r, s, n):

"""Generate P2Wash multi-sig script"""

return bech32.decode_p2wsh_script(

f"1.{sig}.{r}.{s}.{n}",

[hexlify(p).decode(), hashlib.sha256(b"s".encode()).digest().hex()]

)

def main():


Derived public key, signature and random number

p = derive_signature("your_public_key_here", 0x12, 0x34)

r = derive_signature(p, 1, 2)

s = derive_signature(r, 3, 4)

n = derive_signature(s, 5, 6)


Generate P2Wash multi-sig script

script = p2wpub_script(p, Nothing, r, s, n)


Print generated script

print(script.decode("utf-8"))

if __name__ == "__main__":

main()

Generating receive addresses

————————————

Receive address is a unique identifier that can be used to receive funds from other users. In the context of P2Wash, receiving addresses are usually derived using a similar process.

The p2wpub_script function generates a multi-character P2Wash script, which includes the public key, signature, random number, and non-random parameters (r, s, n). To generate recipient addresses from this script, we need to derive a unique identifier that is not present in the script.

Here is the updated version of the code:

“`python

import hashlib

import binascii

Define constants for the blockchain hash derivation and signature parameters

BLOCKCHAIN_HASH = “your_blockchain_hash_here”

SIGDERivationParameter = 3

def derive_signature(p, r, s):

“””Derivate signature using public key”””

return (hexlify(p).decode() + hashlib.sha256(b”s”.encode()).digest().hex()) % 1000000

def p2wpub_script(p, sig, r, s, n):

“””Generate P2Wash multi-sig script”””

return bech32.decode_p2wsh_script(

f”1.{sig}.{r}.{s}.{n}”,

[hexlify(p).decode(), hashlib.sha256(b”s”.encode()).digest().hex()]

)

def derive_receive_address(script, script_hash):

“””Derivate receive address from P2Wash multi-sig script”””

Extract non-random parameters (r, s, n) and hash

r, s, n = extract_parameters(script)

Derive unique identifier using SHA-256

id = hashlib.sha256(r + s + n.encode()).digest()

return f”2.{id.hex()}{BLOCKCHAIN_HASH}”

def extract_parameters(script):

“””Extract non-random parameters (r, s, n) and hash from script”””

Extract signature, random number and non-random parameters

r, s = extract_signature(script)

id = hashlib.sha256(r + s.encode()).

ETHEREUM DOES CANCELLING CARRY

Exit mobile version