예제 #1
0
 def test_pubkeys_to_address(self, tmp_storage, network):
     coin = network.COIN
     privkey = PrivateKey.from_random()
     WIF = privkey.to_WIF(coin=coin)
     wallet = ImportedPrivkeyWallet.from_text(tmp_storage, WIF, None)
     public_key = privkey.public_key
     pubkey_hex = public_key.to_hex()
     address = public_key.to_address(coin=coin).to_string()
     assert wallet.pubkeys_to_address(pubkey_hex) == Address.from_string(address)
예제 #2
0
 def test_P2PKHK_script(self):
     p = PrivateKey.from_random()
     PC = p.public_key
     PU = PC.complement()
     for P in (PC, PU):
         script = P.P2PKH_script()
         data = P.hash160()
         assert script == (
             bytes([OP_DUP, OP_HASH160, len(data)]) + data +
             bytes([OP_EQUALVERIFY, OP_CHECKSIG]))
예제 #3
0
 def test_pubkeys_to_address(self, tmp_storage, network):
     coin = network.COIN
     privkey = PrivateKey.from_random()
     WIF = privkey.to_WIF(coin=coin)
     parent_wallet = _TestableParentWallet.as_legacy_wallet_container(
         tmp_storage)
     wallet = ImportedPrivkeyWallet.from_text(parent_wallet, WIF)
     public_key = privkey.public_key
     pubkey_hex = public_key.to_hex()
     address = public_key.to_address(coin=coin).to_string()
     assert wallet.pubkeys_to_address(pubkey_hex) == address_from_string(
         address)
예제 #4
0
 def test_from_template_bad(self):
     public_keys = [
         PrivateKey.from_random().public_key.to_bytes() for n in range(2)
     ]
     with pytest.raises(ValueError):
         script = P2MultiSig_Output.from_template(pack_byte(1),
                                                  *public_keys,
                                                  pack_byte(1))
     with pytest.raises(ValueError):
         script = P2MultiSig_Output.from_template(pack_byte(1),
                                                  *public_keys,
                                                  pack_byte(3))
예제 #5
0
def test_store__write_encrypted(store_class) -> None:
    privkey = PrivateKey.from_random()
    wallet_path = tempfile.mktemp()
    store = store_class(wallet_path, privkey.public_key.to_hex())
    assert not store.is_primed()
    store.put("number", 10)
    store._write()
    assert store.is_primed()
    # This will raise an assertion if there is not locatible data for the JSON lump.
    store.read_raw_data()
    assert store.get("number") == 10

    store = store_class(wallet_path, privkey.public_key.to_hex())
    assert store.is_primed()
    store.read_raw_data()
    encrypted_data = store.get_encrypted_data()
    print(encrypted_data)
    raw_data = zlib.decompress(privkey.decrypt_message(encrypted_data))
    store.load_data(raw_data)
    assert store.get("number") == 10
예제 #6
0
def test_xpubkey_to_address():
    privkey = PrivateKey.from_random()
    public_key = privkey.public_key
    x_pubkey = 'fd' + public_key.P2PKH_script().to_hex()
    assert xpubkey_to_address(x_pubkey) == (
        x_pubkey, Address.from_string(public_key.to_address().to_string()))
예제 #7
0
def test_store_is_encrypted_true(store_class) -> None:
    privkey = PrivateKey.from_random()
    wallet_path = tempfile.mktemp()
    db_store = store_class(wallet_path, privkey.public_key.to_hex())
    db_store.write()
    assert db_store.is_encrypted()
예제 #8
0
 def test_hashable(self):
     p = PrivateKey.from_random().public_key
     {P2PK_Output(p, Bitcoin)}
예제 #9
0
 def test_eq(self):
     p = PrivateKey.from_random().public_key
     assert P2PK_Output(p, Bitcoin) == P2PK_Output(p, Bitcoin)
     assert P2PK_Output(p, Bitcoin) != p
예제 #10
0
        assert isinstance(address, P2PKH_Address)
        assert address.to_string() == '16ZbRYV2f1NNuNQ9FDYyUMC2d1cjGS2G3L'

    def test_to_address_uncompressed(self):
        pubkey_hex = (
            '046d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e'
            '2487e6222a6664e079c8edf7518defd562dbeda1e7593dfd7f0be285880a24dab'
        )
        pubkey = PublicKey.from_hex(pubkey_hex)
        output = P2PK_Output(pubkey, Bitcoin)
        address = output.to_address()
        assert isinstance(address, P2PKH_Address)
        assert address.to_string() == '1G9f5Kdd5A8MeBN8jduUNfcAXUVvtFxVhP'


MS_PUBKEYS = [PrivateKey.from_random().public_key for n in range(5)]
multisig_scriptsig = (
    '004830450221009a8f3f87228213a66525137b59bb9884c5a6fce43128f0eaf81082c50b99c07b022030a2a4'
    '5a7b75b9d691370afc0e790ad17d971cfccb3da9c236e9aaa316973d0c41483045022100928b6b9b5e0d063f'
    'ff02d74a7fcc2fcc2ea5a9a1d4cf4e241302979fe0b976d102203f4aeac2959cf4f91742720c0c77b66c4883'
    '34d56e45486aecf46599af1f204941'
)
p2sh_multisig_scriptsig = (
    '004830450221009a8f3f87228213a66525137b59bb9884c5a6fce43128f0eaf81082c50b99c07b022030a2a4'
    '5a7b75b9d691370afc0e790ad17d971cfccb3da9c236e9aaa316973d0c41483045022100928b6b9b5e0d063f'
    'ff02d74a7fcc2fcc2ea5a9a1d4cf4e241302979fe0b976d102203f4aeac2959cf4f91742720c0c77b66c4883'
    '34d56e45486aecf46599af1f204941475221022812701688bc76ef3610b46c8e97f4b385241d5ed6eab6269b'
    '8af5f9bfd5a89c2103fa0879c543ac97f34daffdaeed808f3500811aa5070e4a1f7e2daed3dd22ef2052ae'
)

예제 #11
0
    assert Ops['OP_CHECKMULTISIGVERIFY'].value == 175
    assert Ops['OP_NOP1'].value == 176
    assert Ops['OP_CHECKLOCKTIMEVERIFY'].value == 177
    assert Ops['OP_NOP2'].value == 177
    assert Ops['OP_CHECKSEQUENCEVERIFY'].value == 178
    assert Ops['OP_NOP3'].value == 178
    assert Ops['OP_NOP4'].value == 179
    assert Ops['OP_NOP5'].value == 180
    assert Ops['OP_NOP6'].value == 181
    assert Ops['OP_NOP7'].value == 182
    assert Ops['OP_NOP8'].value == 183
    assert Ops['OP_NOP9'].value == 184
    assert Ops['OP_NOP10'].value == 185


P2PKH_script = PrivateKey.from_random().public_key.P2PKH_script()


class TestScript:
    def test_construtor(self):
        assert Script() == b''

    def test_len(self):
        script = b'abcd'
        assert len(Script(script)) == len(script)

    def test_len_does_bytes_conversion(self):
        assert len(P2PKH_script) == 25

    def test_bytes(self):
        script = b'abcd'
예제 #12
0
import pytest

import scryptlib.utils
import scryptlib.contract
from scryptlib.types import Sig, PubKey, Ripemd160, SigHashPreimage, Bytes

import bitcoinx
from bitcoinx import SigHash, PrivateKey, P2PKH_Address, TxOutput, Bitcoin, Tx, TxInput, TxInputContext, Script, PublicKey

SATS_PER_TOKEN = 1000
input_sats = 100000
sighash_flag = SigHash(SigHash.ANYONE_CAN_PAY | SigHash.ALL | SigHash.FORKID)

priv_keys = []
for i in range(0, 5):
    priv_keys.append(PrivateKey.from_random())

pub_keys = []
for priv_key in priv_keys:
    pub_keys.append(priv_key.public_key)

pkhs = []
for pub_key in pub_keys:
    pkhs.append(pub_key.hash160())

contract = './test/res/advancedTokenSale.scrypt'

compiler_result = scryptlib.utils.compile_contract(contract)
desc = compiler_result.to_desc()

AdvancedTokenSale = scryptlib.contract.build_contract_class(desc)