Beispiel #1
0
def test_address_generation():
    '''test if addresses are properly made'''

    privkey = bytearray(urandom(32))

    assert Kutil(network="ppc", privkey=privkey).address.startswith("P")

    assert isinstance(Kutil(network='ppc').address, str)
    assert len(Kutil(network='ppc').address) == 34
Beispiel #2
0
def test_key_generation():
    '''test privkey/pubkey generation.'''

    mykey = Kutil(network="ppc")

    assert isinstance(mykey.privkey, str)
    assert isinstance(mykey.pubkey, str)
Beispiel #3
0
def test_sign_transaction():

    network_params = net_query('tppc')
    provider = Explorer(network='tppc')
    key = Kutil(network='tppc',
                privkey=bytearray.fromhex('9e321f5379c2d1c4327c12227e1226a7c2e08342d88431dcbb0063e1e715a36c')
                )
    dest_address = 'mwn75Gavp6Y1tJxca53HeCj5zzERqWagr6'

    unspent = provider.select_inputs(key.address, 0.63)  # 0.69
    output = tx_output(network='tppc',
                       value=Decimal(0.1),
                       n=0, script=p2pkh_script(network='tppc',
                                                address=dest_address)
                       )

    unsigned = MutableTransaction(
        version=1,
        ins=unspent['utxos'],
        outs=[output],
        locktime=Locktime(0),
        network=network_params,
        timestamp=int(time.time()),
    )

    parent_outputs = [find_parent_outputs(provider, i) for i in unsigned.ins]
    solver = P2pkhSolver(key._private_key)

    signed = unsigned.spend(parent_outputs,
                            [solver for i in parent_outputs])

    assert isinstance(signed, Transaction)
Beispiel #4
0
def deck_vote_tag(deck):
    '''deck vote tag address'''

    deck_vote_tag_privkey = sha256(unhexlify(deck.asset_id) +
                                   b"vote_init").hexdigest()
    deck_vote_tag_address = Kutil(network=deck.network,
                                  privkey=deck_vote_tag_privkey)
    return deck_vote_tag_address.address
Beispiel #5
0
    def p2th_wif(self) -> Optional[str]:
        '''P2TH privkey in WIF format'''

        if self.id:
            return Kutil(network=self.network,
                         privkey=bytearray.fromhex(self.id)).wif
        else:
            return None
Beispiel #6
0
def test_mainnet_wif_import():
    '''test importing WIF privkey'''

    mykey = Kutil(network='ppc', from_wif="U624wXL6iT7XZ9qeHsrtPGEiU78V1YxDfwq75Mymd61Ch56w47KE")

    assert mykey.address == 'PAprodbYvZqf4vjhef49aThB9rSZRxXsM6'
    assert mykey.pubkey == '023aaca6c4f022543f4a2920f66544a6ce89746f7fce4da35d63b5886fdac06634'
    assert mykey.privkey == '1b19749afd007bf6db0029e0273a46409bc160b9349031752bbc3cd913bbbdd3'
Beispiel #7
0
def test_key_generation_from_seed():
    '''check if key generation is what is expected from seed.'''

    seed = "Hello PeerAssets."
    mykey = Kutil(from_string=seed, network="tppc")

    assert mykey.privkey == '680510f7f5e622347bc8d9e54e109a9192353693ef61d82d2d5bdf4bc9fd638b'
    assert mykey.pubkey == '037cf9e7664b5d10ce209cf9e2c7f68baa06f1950114f25677531b959edd7e670c'
Beispiel #8
0
    def p2th_address(self) -> Optional[str]:
        '''P2TH address of this deck'''

        if self.id:
            return Kutil(network=self.network,
                         privkey=bytearray.fromhex(self.id)).address
        else:
            return None
Beispiel #9
0
def test_network_parameter_load():
    '''tests if loading of network parameteres is accurate.'''

    mykey = Kutil(network="ppc")

    assert mykey.denomination == 1000000
    assert mykey.wif_prefix == b'b7'
    assert mykey.pubkeyhash == b'37'
Beispiel #10
0
def test_address_generation():
    '''test if addresses are properly made'''

    mykey = Kutil(network="ppc")

    assert mykey.address.startswith("P")
    assert isinstance(mykey.address, str)
    assert len(mykey.address) == 34
Beispiel #11
0
def test_wif_import():
    '''test improting WIF privkey'''

    mykey = Kutil(network="ppc",
                  wif="7A6cFXZSZnNUzutCMcuE1hyqDPtysH2LrSA9i5sqP2BPCLrAvZM")

    assert mykey.address == 'PJxwxuBqjpHhhdpV6KY1pXxUSUNb6omyNW'
    assert mykey.pubkey == b'02a119079ef5be1032bed61cc295cdccde58bf70e0dd982399c024d1263740f398'
    assert mykey.privkey == b'b43d38cdfa04ecea88f7d9d7e95b15b476e4a6c3f551ae7b45344831c3098da2'
Beispiel #12
0
def test_wif_export():
    '''test Kutil WIF export'''

    mykey = Kutil(network='ppc',
                  privkey=bytearray.fromhex('1b19749afd007bf6db0029e0273a46409bc160b9349031752bbc3cd913bbbdd3')
                 )

    assert isinstance(mykey.wif, str)
    assert mykey.wif == 'U624wXL6iT7XZ9qeHsrtPGEiU78V1YxDfwq75Mymd61Ch56w47KE'
Beispiel #13
0
def deck_vote_tag(deck: Deck) -> str:
    '''deck vote tag address'''

    if deck.id is None:
        raise Exception("deck.id is required")

    deck_vote_tag_privkey = sha256(unhexlify(deck.id) +
                                   b"vote_init").hexdigest()
    deck_vote_tag_address = Kutil(
        network=deck.network, privkey=bytearray.fromhex(deck_vote_tag_privkey))
    return deck_vote_tag_address.address
Beispiel #14
0
    def vote_choice_address(self):
        '''calculate the addresses on which the vote is casted.'''

        addresses = []
        vote_init_txid = unhexlify(self.vote_id)

        for choice in self.choices:
            vote_cast_privkey = sha256(
                vote_init_txid +
                bytes(list(self.choices).index(choice))).hexdigest()
            addresses.append(
                Kutil(network=self.deck.network,
                      privkey=vote_cast_privkey).address)

        return addresses
Beispiel #15
0
    def vote_choice_address(self) -> List[str]:
        '''calculate the addresses on which the vote is casted.'''

        if self.vote_id is None:
            raise Exception("vote_id is required")

        addresses = []
        vote_init_txid = unhexlify(self.vote_id)

        for choice in self.choices:
            vote_cast_privkey = sha256(
                vote_init_txid +
                bytes(list(self.choices).index(choice))).hexdigest()
            addresses.append(
                Kutil(network=self.deck.network,
                      privkey=bytearray.fromhex(vote_cast_privkey)).address)

        return addresses
Beispiel #16
0
        def importprivkey(self, privkey: str, label: str) -> int:
            """import <privkey> with <label>"""
            self.load_keystore()

            mykey = Kutil(network=self.network, wif=privkey)

            if label not in self.privkeys.keys():
                self.privkeys[label] = []

            if mykey.privkey not in [
                    key['privkey'] for key in self.privkeys[label]
            ]:
                self.privkeys[label].append({
                    "privkey": mykey.privkey,
                    "address": mykey.address
                })
            if isinstance(self, RpcNode):
                super(RpcNode, self).importprivkey(privkey, label)
Beispiel #17
0
def sign_transaction(provider: Provider, unsigned: MutableTransaction,
                     key: Kutil) -> Transaction:
    '''sign transaction with Kutil'''

    parent_outputs = [find_parent_outputs(provider, i) for i in unsigned.ins]
    return key.sign_transaction(parent_outputs, unsigned)
def sign_transaction(provider: Provider, unsigned_tx: Transaction,
                     key: Kutil) -> Transaction:
    '''sign transaction with Kutil'''

    parent_output = find_parent_outputs(provider, unsigned_tx.ins[0])
    return key.sign_transaction(parent_output, unsigned_tx)