Example #1
0
def basic_stealth_address_to_pubkeys(stealth_address):
    hex_data = main.b58check_to_hex(stealth_address)
    if len(hex_data) != 140:
        raise Exception('Stealth address is not of basic type (one scan key, one spend key, no prefix)')

    scan_pubkey = hex_data[2:68]
    spend_pubkey = hex_data[70:136]
    return scan_pubkey, spend_pubkey
Example #2
0
def basic_stealth_address_to_pubkeys(stealth_address):
    hex_data = main.b58check_to_hex(stealth_address)
    if len(hex_data) != 140:
        raise Exception('Stealth address is not of basic type (one scan key, one spend key, no prefix)')

    scan_pubkey = hex_data[2:68]
    spend_pubkey = hex_data[70:136]
    return scan_pubkey, spend_pubkey
Example #3
0
 def test_compose_tx_locking_script(self):
     # check with P2PKH addresses
     # Generate Valid PIVX address
     pK = privkey_to_pubkey(generate_privkey())
     pivxAddr = pubkey_to_address(pK)
     # compose TX script
     result = compose_tx_locking_script(pivxAddr)
     print(result)
     # check OP_DUP
     self.assertEqual(result[0], int('76', 16))
     # check OP_HASH160
     self.assertEqual(result[1], int('A9', 16))
     pubkey_hash = bytearray.fromhex(b58check_to_hex(pivxAddr))
     self.assertEqual(result[2], len(pubkey_hash))
     self.assertEqual(result[3:23], pubkey_hash)
     # check OP_QEUALVERIFY
     self.assertEqual(result[23], int('88', 16))
     # check OP_CHECKSIG
     self.assertEqual(result[24], int('AC', 16))
    dPrivKey = btc.decode_privkey(privKey, 'hex')  # 16진수 문자열을 10진수 숫자로 변환한다
    if dPrivKey < btc.N:  # secp256k1 의 N 보다 작으면 OK
        break

# 개인키로 공개키를 생성한다.
pubKey = btc.privkey_to_pubkey(privKey)

# 공개키로 지갑 주소를 생성한다. (mainnet 용)
address1 = btc.pubkey_to_address(pubKey, 0)

# 공개키로 160-bit public key hash를 생성한다
pubHash160 = btc.hash160(btc.encode_pubkey(pubKey, 'bin'))

# 160-bit public key hash로 지갑 주소를 생성한다. (위의 address와 동일하다)
address2 = btc.hex_to_b58check(pubHash160, 0)

# 지갑 주소를 160-bit public key hash로 변환한다. (위의 pubHash160과 동일하다)
pubHash1601 = btc.b58check_to_hex(address2)

# 공개키로 testnet용 지갑 주소를 생성한다
address3 = btc.pubkey_to_address(pubKey, 0x6f)

# 결과 확인
print("\n\n개인키 : ", privKey)
print("개인키 --> 공개키 : ", pubKey)
print("\n공개키 --> 지갑주소 (1. mainet 용) : ", address1)
print("공개키 --> 공개키 해시 : ", pubHash160)
print("\n공개키 해시 --> 지갑주소 (2. mainet 용) : ", address2)
print("지갑주소 --> 공개키 해시 : ", pubHash1601)
print("지갑주소 (Testnet 용) :", address3)
# pybitcointools를 설치하지 않고 배포용 실습 코드의 bitcoin 폴더가 있는 곳에서 실행한다.
import base58
import binascii
import bitcoin.main as btc
import bitcoin.segwit_addr as bech32

# 비트코인 코어에서 지갑 주소로 WIF 개인키를 조회한다
# 디버그 콘솔 : dumpprivkey "지갑 주소"
# 주소의 상세 내역 조회 : validateaddress "지갑 주소"
privKeyWIF = "L1iJWxsPa6iSYuPC9mvYzL5SCjHiDhVHPhS5Gz1wJy3fLN6qPwgD"
wifDecode = base58.b58decode(privKeyWIF).hex()

# pybitcointool로 키를 변환한다
# 참조 : pybitcointools (https://pypi.python.org/pypi/bitcoin)
# WIF 개인키를 일반 개인키로 변환한다.
privKey = btc.b58check_to_hex(privKeyWIF)

# 개인키로 공개키를 생성한다.
pubKey = btc.privkey_to_pubkey(privKey)

# 공개키로 160-bit public key hash를 생성한다
pubHash160 = btc.hash160(binascii.unhexlify(pubKey))

# P2SH용 스크립트를 생성한다. script = OP_0 + length + public key hash
script = '00' + '14' + pubHash160

# 160 비트 스크립트 해시를 계산한다
scriptHash = btc.hash160(binascii.unhexlify(script))

# 스크립트 해시로 지갑 주소를 생성한다.
addr = btc.hex_to_b58check(scriptHash, 0x05)