Esempio n. 1
0
def mk_stealth_tx_outputs(stealth_addr,
                          value,
                          ephem_privkey,
                          nonce,
                          network='btc'):

    scan_pubkey, spend_pubkey = basic_stealth_address_to_pubkeys(stealth_addr)

    if network == 'btc':
        btc_magic_byte = 42
        if stealth_addr != pubkeys_to_basic_stealth_address(
                scan_pubkey, spend_pubkey, btc_magic_byte):
            raise Exception('Invalid btc mainnet stealth address: ' +
                            stealth_addr)
        magic_byte_addr = 0

    elif network == 'testnet':
        testnet_magic_byte = 43
        if stealth_addr != pubkeys_to_basic_stealth_address(
                scan_pubkey, spend_pubkey, testnet_magic_byte):
            raise Exception('Invalid testnet stealth address: ' + stealth_addr)
        magic_byte_addr = 111

    ephem_pubkey = main.privkey_to_pubkey(ephem_privkey)
    output0 = {
        'script': mk_stealth_metadata_script(ephem_pubkey, nonce),
        'value': 0
    }

    pay_pubkey = uncover_pay_pubkey_sender(scan_pubkey, spend_pubkey,
                                           ephem_privkey)
    pay_addr = main.pubkey_to_address(pay_pubkey, magic_byte_addr)
    output1 = {'address': pay_addr, 'value': value}

    return [output0, output1]
Esempio n. 2
0
def mk_stealth_tx_outputs(stealth_addr,
                          value,
                          ephem_privkey,
                          nonce,
                          network='btc'):

    scan_pubkey, spend_pubkey = basic_stealth_address_to_pubkeys(stealth_addr)

    if network == 'btc':
        btc_magic_byte = 42
        if stealth_addr != pubkeys_to_basic_stealth_address(
                scan_pubkey, spend_pubkey, btc_magic_byte):
            raise Exception('Invalid btc mainnet stealth address: ' +
                            stealth_addr)
        magic_byte_addr = 0

    elif network == 'testnet':
        testnet_magic_byte = 43
        if stealth_addr != pubkeys_to_basic_stealth_address(
                scan_pubkey, spend_pubkey, testnet_magic_byte):
            raise Exception('Invalid testnet stealth address: ' + stealth_addr)
        magic_byte_addr = 111

    ephem_pubkey = main.privkey_to_pubkey(ephem_privkey)
    output0 = {'script': mk_stealth_metadata_script(ephem_pubkey, nonce),
               'value': 0}

    pay_pubkey = uncover_pay_pubkey_sender(scan_pubkey, spend_pubkey,
                                           ephem_privkey)
    pay_addr = main.pubkey_to_address(pay_pubkey, magic_byte_addr)
    output1 = {'address': pay_addr, 'value': value}

    return [output0, output1]
Esempio n. 3
0
xPub01 = det.bip32_ckd(mPub, 1)     # 마스터 공개키로 Depth-1의 공개키를 생성한다

# 계층-2의 extended private key와 public key를 생성한다.
# Depth-2 (m/1/0)
xPrv010 = det.bip32_ckd(xPrv01, 0)  # Depth-1의 개인키로 Depth-2의 개인키를 생성한다
xPub010 = det.bip32_ckd(xPub01, 0)  # Depth-1의 공개키로 Depth-2의 공개키를 생성한다

# 계층-3의 extended private key와 public key를 생성한다.
# Depth-3 (m/1/0/0)
xPrv0100 = det.bip32_ckd(xPrv010, 0) # Depth-2의 개인키로 Depth-3의 개인키를 생성한다
xPub0100 = det.bip32_ckd(xPub010, 0) # Depth-2의 공개키로 Depth-3의 공개키를 생성한다

# Address (m/1/0/0)
prv0100 = det.bip32_extract_key(xPrv0100)
pub0100 = det.bip32_extract_key(xPub0100)
adr0100 = btc.pubkey_to_address(pub0100, 0x00) # Depth-3의 공개키로 주소를 생성한다

# 결과 출력
print("\nDepth-3 (m/1/0/0) :")
print("\nxPrivate Key =", xPrv0100)
print("\nxPublic Key =", xPub0100)
print("\nPrivate Key =", prv0100)
print("Public Key =", pub0100)
print("Address =", adr0100)

# Depth-3의 공개키는 Private key로 생성한 것이 아님. Depth-2의 공개키로 생성한 것임.
# 그럼에도 불구하고 아래 관계가 성립해야함.
# prv0100 --> pub0100 관계를 확인한다.
pubKey = btc.privkey_to_pubkey(prv0100)
if pubKey == pub0100:
    print("\nPrivate Key --> Public Key 관계가 잘 성립함.")
# 파이썬 실습 파일: 3-5.지갑주소.py
# pybitcointools를 설치하지 않고 배포용 실습 코드의 bitcoin 폴더가 있는 곳에서 실행한다.
import bitcoin.main as btc

# 개인키를 생성한다
while (1):
    privKey = btc.random_key()  # 256 bit Random number를 생성한다
    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)
Esempio n. 5
0
# 파이썬 실습 파일: BrainWallet.py
# pybitcointools (https://github.com/vbuterin/pybitcointools)
# pybitcointools를 설치하지 않고 배포용 실습 코드의 bitcoin 폴더가 있는 곳에서 실행한다.
import bitcoin.main as btc

# 특정 문자열로 256-bit 개인키를 생성한다 (long brain wallet passphrase).
passphrase = 'Brain Wallet 시험용 개인키입니다. 잊어버리지 마세요.'
privKey = btc.sha256(passphrase)
dPrivKey = btc.decode_privkey(privKey, 'hex')  # 16진수 문자열을 10진수 숫자로 변환한다
if dPrivKey < btc.N:  # secp256k1 의 N 보다 작으면 OK
    # 개인키로 공개키를 생성한다.
    pubKey = btc.privkey_to_pubkey(privKey)

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

    # 결과 확인
    print("\n\nPassphrase :", passphrase)
    print("\n개인키 :", privKey)
    print("개인키 --> 공개키 :", pubKey)
    print("\n공개키 --> 지갑주소 :", address)
else:
    print("요청하신 Passphrase로 개인키를 만들었으나, 유효하지 않습니다.")
    print("다른 Passphrase로 다시 시도해 주세요.")