Проблема генерации закрытого ключа и адреса segwit с python - PullRequest
0 голосов
/ 01 декабря 2019

Я использовал следующий скрипт для генерации моего личного ключа и соответствующего адреса сегвита.

Затем, чтобы проверить его, я отправил средства на адрес и импортировал закрытый ключ на кошелек блокчейна;

РЕЗУЛЬТАТ: В закрытом ключе нет средств, и отображаемый адрес - это не адрес сегвита, а просто другой адрес P2PKH.

В чем проблема?

import random,ecdsa,hashlib,base58
private_key=(random.getrandbits(256)).to_bytes(32,byteorder="little",signed=False)

signed_key=ecdsa.SigningKey.from_string(private_key,curve=ecdsa.SECP256k1)

verifying_key=signed_key.get_verifying_key()

x_cor=bytes.fromhex(verifying_key.to_string().hex())[:32]
y_cor=bytes.fromhex(verifying_key.to_string().hex())[32:]


if int.from_bytes(y_cor,byteorder="big",signed=True)%2==0:
    public_key = bytes.fromhex(f'02{x_cor.hex()}')

else:
    public_key = bytes.fromhex(f'03{x_cor.hex()}')


sha256_key = hashlib.sha256(public_key)
ripemd160_key = hashlib.new("ripemd160")
ripemd160_key.update(sha256_key.digest())

key_hash=ripemd160_key.digest()

P2WPKH_V0 = bytes.fromhex(f'0014{key_hash.hex()}')

sha256_P2WPKH_V0 = hashlib.sha256(public_key)
ripemd160_P2WPKH_V0 = hashlib.new("ripemd160")
ripemd160_P2WPKH_V0.update(sha256_P2WPKH_V0.digest())

script_hash=ripemd160_key.digest()


P2SH_P2WPKH_V0 = bytes.fromhex(f'a9{script_hash.hex()}87')

flagged_scripthash = bytes.fromhex(f'05{script_hash.hex()}')

checksum = hashlib.sha256(hashlib.sha256(flagged_scripthash).digest()).digest()[:4]
bin_addr = flagged_scripthash + checksum

nested_address = base58.b58encode(bin_addr)



compressed_private_key = private_key + '01'
wifcomp1 = bitcoin.encode_privkey(bitcoin.decode_privkey(private_key, 'hex'), \
             'wif_compressed')

print("Private key: "+ private_key.hex())
print("WIF key: "+ wifcomp1)
print("Nested Address: " + nested_address.decode())
...