def test_verify_wrong_addr():
    key_priv = PrivateKey.from_arbitrary_bytes(b'123test')
    key_pub = key_priv.public_key
    pkh = key_pub.hash160()
    pkh_0_out_wrong = TxOutput(in_sats - miner_fee,
                               P2PKH_Address(pkh, Bitcoin).to_script())
    context = create_input_context(in_sats, acs.locking_script,
                                   pkh_0_out_wrong)
    preimage = scryptlib.utils.get_preimage_from_input_context(
        context, sighash_flag)
    verify_result = acs.unlock(SigHashPreimage(preimage)).verify(context)
    assert verify_result == False
Ejemplo n.º 2
0
import pytest

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

import bitcoinx
from bitcoinx import PrivateKey, TxOutput, SigHash, pack_byte, Script, sha256, TxInput


key_priv_0 = PrivateKey.from_arbitrary_bytes(b'test123')
key_pub_0 = key_priv_0.public_key
key_priv_1 = PrivateKey.from_arbitrary_bytes(b'123test')
key_pub_1 = key_priv_1.public_key
key_priv_2 = PrivateKey.from_arbitrary_bytes(b'te123st')
key_pub_2 = key_priv_2.public_key

in_sats = 100000
out_sats = 22222

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

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

Token = scryptlib.contract.build_contract_class(desc)
token = Token()


def test_verify_split_in_two():
    data_part = scryptlib.utils.get_push_item(key_pub_0.to_bytes() + scryptlib.utils.get_push_int(10)[1:] + scryptlib.utils.get_push_int(90)[1:])
import pytest

import scryptlib.utils
import scryptlib.contract
from scryptlib.types import Sig, PubKey, PubKeyHash

import bitcoinx
from bitcoinx import SigHash, PrivateKey, pack_byte

key_priv = PrivateKey.from_arbitrary_bytes(b'test123')
key_pub = key_priv.public_key
pubkey_hash = key_pub.hash160()

wrong_key_priv = PrivateKey.from_arbitrary_bytes(b'somethingelse')
wrong_key_pub = wrong_key_priv.public_key

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

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

P2PKH = scryptlib.contract.build_contract_class(desc)
p2pkh_obj = P2PKH(PubKeyHash(pubkey_hash))

context = scryptlib.utils.create_dummy_input_context()

sighash_flag = SigHash(SigHash.ALL | SigHash.FORKID)
input_idx = 0
utxo_satoshis = context.utxo.value
sighash = context.tx.signature_hash(input_idx, utxo_satoshis,
                                    p2pkh_obj.locking_script, sighash_flag)
Ejemplo n.º 4
0
 def get_eckey_from_password(password: str) -> PrivateKey:
     secret = hashlib.pbkdf2_hmac('sha512',
                                  password.encode('utf-8'),
                                  b'',
                                  iterations=1024)
     return PrivateKey.from_arbitrary_bytes(secret)
import pytest
import hashlib

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

import bitcoinx
from bitcoinx import PrivateKey, TxOutput, SigHash, pack_byte, Script, TxInput, P2PKH_Address, Bitcoin

key_priv = PrivateKey.from_arbitrary_bytes(b'test0')
key_pub = key_priv.public_key
pkh = key_pub.hash160()
payout_addr = pkh
change_addr = pkh

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

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

input_sats = 100000
sat_price = 100
Token = scryptlib.contract.build_contract_class(desc)
token = Token(sat_price)

change_sats = 100

sighash_flag = SigHash(SigHash.ANYONE_CAN_PAY | SigHash.ALL | SigHash.FORKID)

#def test_verify_buy_token():
    prev_txid = prev_tx.hash()

    utxo_idx = 0
    n_sequence = 0xffffffff
    unlocking_script = Script()
    curr_in = TxInput(prev_txid, utxo_idx, unlocking_script, n_sequence)
    curr_tx = Tx(tx_version, [curr_in], [new_out], tx_locktime)

    input_idx = 0
    return TxInputContext(curr_tx, input_idx, utxo, is_utxo_after_genesis=True)


in_sats = 1200
miner_fee = 546

key_priv_0 = PrivateKey.from_arbitrary_bytes(b'test123')
key_pub_0 = key_priv_0.public_key
pkh_0 = key_pub_0.hash160()

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

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

AnyoneCanSpend = scryptlib.contract.build_contract_class(desc)
acs = AnyoneCanSpend(Ripemd160(pkh_0))

pkh_0_out = TxOutput(in_sats - miner_fee,
                     P2PKH_Address(pkh_0, Bitcoin).to_script())
context = create_input_context(in_sats, acs.locking_script, pkh_0_out)
Ejemplo n.º 7
0
h_secret_wrong = sha256(secret_wrong)
k_wrong = h_secret

G = PublicKey.from_hex(
    '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')
Q = G.multiply(k)
r, _ = Q.to_point()
r = int_to_be_bytes(r)
if r[0] & 0x80:
    r0 = pack_byte(0) + r
else:
    r0 = r
r_hash = hash160(r0)

# Ephermal key to generate the r signature
key_priv_R = PrivateKey.from_arbitrary_bytes(b'123test')
key_pub_R = key_priv_R.public_key

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

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

RPuzzle = scryptlib.contract.build_contract_class(desc)
r_puzzle = RPuzzle(Ripemd160(r_hash))

utxo_satoshis = 100004
context = scryptlib.utils.create_dummy_input_context()
context.utxo.script_pubkey = r_puzzle.locking_script
context.utxo.value = utxo_satoshis
import pytest
import hashlib

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

import bitcoinx
from bitcoinx import SigHash, TxOutput, Script, PrivateKey, P2PKH_Address, Bitcoin, pack_byte

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

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

key_priv_A = PrivateKey.from_arbitrary_bytes(b'test0')
key_pub_A = key_priv_A.public_key
pkh_A = key_pub_A.hash160()

key_priv_B = PrivateKey.from_arbitrary_bytes(b'test1')
key_pub_B = key_priv_B.public_key
pkh_B = key_pub_B.hash160()

key_priv_E = PrivateKey.from_arbitrary_bytes(b'test2')
key_pub_E = key_priv_E.public_key
pkh_E = key_pub_E.hash160()

secret0 = b'abc'
secret1 = b'def'
h_secret0 = hashlib.sha256(secret0).digest()
h_secret1 = hashlib.sha256(secret1).digest()