Пример #1
0
    def setUp(self):
        try:
            # flag to run the tests
            test = os.environ['TEST_SPOOL']
            if test == '2':
                username = os.environ['TESTNET_USERNAME']
                password = os.environ['TESTNET_PASSWORD']
                host = os.environ['TESTNET_HOST']
                port = os.environ['TESTNET_PORT']
            self.refill_pass = os.environ['TEST_REFILL_PASS']
            self.federation_pass = os.environ['TEST_FEDERATION_PASS']
            self.refill_root = Wallet(self.refill_pass, testnet=True).root_address
            self.federation_root = Wallet(self.federation_pass, testnet=True).root_address
        except KeyError:
            raise unittest.SkipTest('TEST_REFILL_PASS and/or TEST_FEDERATION_PASS environment variables are not set.')

        # set TEST_SPOOL=2 to test with bitcoind
        if test == '2':
            print 'using bitcoind'
            self.t = Transactions(testnet=True, service='daemon', username=username, password=password, host=host, port=port)
            self.spool = Spool(testnet=True, service='daemon', username=username, password=password, host=host, port=port)
        else:
            print 'using blockr'
            self.t = Transactions(testnet=True)
            self.spool = Spool(testnet=True)

        self.user1_pass = self._get_pass()
        self.user2_pass = self._get_pass()
        self.user3_pass = self._get_pass()
        self.user1_root = Wallet(self.user1_pass, testnet=True).root_address
        self.user1_leaf = Wallet(self.user1_pass, testnet=True).address_from_path()
        self.user2_leaf = Wallet(self.user2_pass, testnet=True).address_from_path()
        self.user3_leaf = Wallet(self.user3_pass, testnet=True).address_from_path()
        self.file_hash = self._get_file_hash()

        print 'user1_pass: '******'user2_pass: '******'user3_pass: '******'user1_root: ', self.user1_root
        print 'user1_leaf: ', self.user1_leaf
        print 'user2_leaf: ', self.user2_leaf
        print 'user3_leaf: ', self.user3_leaf
        print 'file_hash :', self.file_hash

        self.spool._t.import_address(self.user1_root[1], "test",)
        self.spool._t.import_address(self.user1_leaf[1], "test",)
        self.spool._t.import_address(self.user2_leaf[1], "test",)
        self.spool._t.import_address(self.user3_leaf[1], "test",)
        self.spool._t.import_address(self.file_hash[0], "test",)
        self.spool._t.import_address(self.file_hash[1], "test",)
Пример #2
0
def spool_regtest(rpcuser, rpcpassword, host, port):
    from spool import Spool
    return Spool(
        service='daemon',
        testnet=True,
        username=rpcuser,
        password=rpcpassword,
        host=host,
        port=port,
    )
Пример #3
0
def test_spool_class_init_default():
    from spool import Spool
    spool = Spool()
    assert spool.testnet is False
    assert spool._netcode == 'BTC'
    assert isinstance(spool._t, Transactions)
    assert spool._t._service.name == 'BitcoinBlockrService'
    assert spool._t.testnet is False
    assert isinstance(spool._spents, Queue)
    assert spool._spents.maxsize == 50
Пример #4
0
class TestSpool(unittest.TestCase):

    def setUp(self):
        try:
            # flag to run the tests
            test = os.environ['TEST_SPOOL']
            if test == '2':
                username = os.environ['TESTNET_USERNAME']
                password = os.environ['TESTNET_PASSWORD']
                host = os.environ['TESTNET_HOST']
                port = os.environ['TESTNET_PORT']
            self.refill_pass = os.environ['TEST_REFILL_PASS']
            self.federation_pass = os.environ['TEST_FEDERATION_PASS']
            self.refill_root = Wallet(self.refill_pass, testnet=True).root_address
            self.federation_root = Wallet(self.federation_pass, testnet=True).root_address
        except KeyError:
            raise unittest.SkipTest('TEST_REFILL_PASS and/or TEST_FEDERATION_PASS environment variables are not set.')

        # set TEST_SPOOL=2 to test with bitcoind
        if test == '2':
            print 'using bitcoind'
            self.t = Transactions(testnet=True, service='daemon', username=username, password=password, host=host, port=port)
            self.spool = Spool(testnet=True, service='daemon', username=username, password=password, host=host, port=port)
        else:
            print 'using blockr'
            self.t = Transactions(testnet=True)
            self.spool = Spool(testnet=True)

        self.user1_pass = self._get_pass()
        self.user2_pass = self._get_pass()
        self.user3_pass = self._get_pass()
        self.user1_root = Wallet(self.user1_pass, testnet=True).root_address
        self.user1_leaf = Wallet(self.user1_pass, testnet=True).address_from_path()
        self.user2_leaf = Wallet(self.user2_pass, testnet=True).address_from_path()
        self.user3_leaf = Wallet(self.user3_pass, testnet=True).address_from_path()
        self.file_hash = self._get_file_hash()

        print 'user1_pass: '******'user2_pass: '******'user3_pass: '******'user1_root: ', self.user1_root
        print 'user1_leaf: ', self.user1_leaf
        print 'user2_leaf: ', self.user2_leaf
        print 'user3_leaf: ', self.user3_leaf
        print 'file_hash :', self.file_hash

        self.spool._t.import_address(self.user1_root[1], "test",)
        self.spool._t.import_address(self.user1_leaf[1], "test",)
        self.spool._t.import_address(self.user2_leaf[1], "test",)
        self.spool._t.import_address(self.user3_leaf[1], "test",)
        self.spool._t.import_address(self.file_hash[0], "test",)
        self.spool._t.import_address(self.file_hash[1], "test",)


    def test_spool(self):
        # 1. Refill Federation wallet with necessary fuel and tokens
        print
        print 'Refilling Federation wallet with necessary fuel and tokens'
        txid = self.spool.refill_main_wallet(self.refill_root, self.federation_root[1], 7, 11, self.refill_pass,
                                             min_confirmations=1, sync=True)
        print txid

        # 2. user1 registers master edition
        print
        print 'user1 registers master edition'
        txid = self.spool.register(self.federation_root, self.user1_root[1], self.file_hash,
                                   self.federation_pass, 0, min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01REGISTER0')

        # 3. user1 registers number of editions
        print
        print 'user1 registers number of editions'
        txid = self.spool.editions(self.federation_root, self.user1_root[1], self.file_hash,
                                   self.federation_pass, 10, min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01EDITIONS10')

        # 4. user1 registers edition number 1
        print
        print 'user1 registers edition number 1'
        txid = self.spool.register(self.federation_root, self.user1_leaf[1], self.file_hash,
                                   self.federation_pass, 1, min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01REGISTER1')

        # 5. Refill user1 wallet before transfer
        print
        print 'Refill user1 wallet before transfer'
        txid = self.spool.refill(self.federation_root, self.user1_leaf[1], 1, 1,
                                 self.federation_pass, min_confirmations=1, sync=True)
        print txid

        # 5. User1 transfers edition number 1 to user2
        print
        print 'User1 transfers edition number 1 to user 2'
        txid = self.spool.transfer(self.user1_leaf, self.user2_leaf[1], self.file_hash,
                                   self.user1_pass, 1, min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01TRANSFER1')

        # 6. Refill user2 wallet before consign
        print
        print 'Refill user2 wallet before consign'
        txid = self.spool.refill(self.federation_root, self.user2_leaf[1], 1, 1,
                                 self.federation_pass, min_confirmations=1, sync=True)
        print txid

        # 6. user2 consigns edition number 1 to user3
        print
        print 'user2 consigns edition number 1 to user3'
        txid = self.spool.consign(self.user2_leaf, self.user3_leaf[1], self.file_hash,
                                  self.user2_pass, 1, min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01CONSIGN1')

        # 7. Refill user3 wallet before unconsign
        print
        print 'Refill user3 wallet before unconsign'
        txid = self.spool.refill(self.federation_root, self.user3_leaf[1], 1, 1,
                                 self.federation_pass, min_confirmations=1, sync=True)
        print txid

        # 7. user3 unconsigns edition number 1 to user2
        print
        print 'user3 unconsigns edition number 1 back to user2'
        txid = self.spool.unconsign(self.user3_leaf, self.user2_leaf[1], self.file_hash,
                                    self.user3_pass, 1, min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01UNCONSIGN1')

        # 8. Refill user2 wallet before loan
        print
        print 'Refill user2 wallet before loan'
        txid = self.spool.refill(self.federation_root, self.user2_leaf[1], 1, 1,
                                 self.federation_pass, min_confirmations=1, sync=True)
        print txid

        # 8. user2 loans edition number 1 to user3
        print
        print 'user2 loans edition number 1 to user3'
        txid = self.spool.loan(self.user2_leaf, self.user3_leaf[1], self.file_hash,
                               self.user2_pass, 1, '150522', '150523', min_confirmations=1, sync=True)
        print txid

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01LOAN1/150522150523')

    def _get_pass(self):
        return ''.join([random.choice(ascii_letters) for i in xrange(10)])

    def _get_file_hash(self):
        title = ''.join([random.choice(ascii_letters) for i in xrange(10)])
        with open('/tmp/test', 'w') as f:
            f.write(random._urandom(100))

        f = File('/tmp/test', testnet=True, title=title)
        return f.file_hash, f.file_hash_metadata
 - selecting tx inputs/outputs and 
 - building txs

"""
from spool import Spool
from spool import Wallet

from bitcoin import bin_hash160, bin_to_b58check

import hashlib
from builtins import object, str, super
import sys
import os

_magicbyte = 111
spool = Spool()
min_confirmations = 0

# Federation wallet is responsible for maintaining a list of addresses that contain just enough Bitcoin for sending custom OP_RETURN transactions.


def fund_federation_wallet(fed_wallet, fund_wallet, fund_wallet_secret):
    from_address = fund_wallet.root_address[1]
    to_address = fed_wallet.root_address[1]
    nfees = int(os.environ.get('NFEES'))
    ntokens = int(os.environ.get('NTOKENS'))

    unsigned_tx = spool._t.simple_transaction(
        from_address, [(to_address, spool.FEE)] * nfees +
        [(to_address, spool.TOKEN)] * ntokens,
        min_confirmations=min_confirmations)
Пример #6
0
    def setUp(self):
        try:
            # flag to run the tests
            test = os.environ['TEST_SPOOL']
            if test == '2':
                username = os.environ['TESTNET_USERNAME']
                password = os.environ['TESTNET_PASSWORD']
                host = os.environ['TESTNET_HOST']
                port = os.environ['TESTNET_PORT']
            self.refill_pass = os.environ['TEST_REFILL_PASS']
            self.federation_pass = os.environ['TEST_FEDERATION_PASS']
            self.refill_root = Wallet(self.refill_pass,
                                      testnet=True).root_address
            self.federation_root = Wallet(self.federation_pass,
                                          testnet=True).root_address
        except KeyError:
            raise unittest.SkipTest(
                'TEST_REFILL_PASS and/or TEST_FEDERATION_PASS environment variables are not set.'
            )

        # set TEST_SPOOL=2 to test with bitcoind
        if test == '2':
            print('using bitcoind')
            self.t = Transactions(testnet=True,
                                  service='daemon',
                                  username=username,
                                  password=password,
                                  host=host,
                                  port=port)
            self.spool = Spool(testnet=True,
                               service='daemon',
                               username=username,
                               password=password,
                               host=host,
                               port=port)
        else:
            print('using blockr')
            self.t = Transactions(testnet=True)
            self.spool = Spool(testnet=True)

        self.user1_pass = self._get_pass()
        self.user2_pass = self._get_pass()
        self.user3_pass = self._get_pass()
        self.user1_root = Wallet(self.user1_pass, testnet=True).root_address
        self.user1_leaf = Wallet(self.user1_pass,
                                 testnet=True).address_from_path()
        self.user2_leaf = Wallet(self.user2_pass,
                                 testnet=True).address_from_path()
        self.user3_leaf = Wallet(self.user3_pass,
                                 testnet=True).address_from_path()
        self.file_hash = self._get_file_hash()

        print('user1_pass: '******'user2_pass: '******'user3_pass: '******'user1_root: ', self.user1_root)
        print('user1_leaf: ', self.user1_leaf)
        print('user2_leaf: ', self.user2_leaf)
        print('user3_leaf: ', self.user3_leaf)
        print('file_hash :', self.file_hash)

        self.spool._t.import_address(
            self.user1_root[1],
            "test",
        )
        self.spool._t.import_address(
            self.user1_leaf[1],
            "test",
        )
        self.spool._t.import_address(
            self.user2_leaf[1],
            "test",
        )
        self.spool._t.import_address(
            self.user3_leaf[1],
            "test",
        )
        self.spool._t.import_address(
            self.file_hash[0],
            "test",
        )
        self.spool._t.import_address(
            self.file_hash[1],
            "test",
        )
Пример #7
0
class TestSpool(unittest.TestCase):
    def setUp(self):
        try:
            # flag to run the tests
            test = os.environ['TEST_SPOOL']
            if test == '2':
                username = os.environ['TESTNET_USERNAME']
                password = os.environ['TESTNET_PASSWORD']
                host = os.environ['TESTNET_HOST']
                port = os.environ['TESTNET_PORT']
            self.refill_pass = os.environ['TEST_REFILL_PASS']
            self.federation_pass = os.environ['TEST_FEDERATION_PASS']
            self.refill_root = Wallet(self.refill_pass,
                                      testnet=True).root_address
            self.federation_root = Wallet(self.federation_pass,
                                          testnet=True).root_address
        except KeyError:
            raise unittest.SkipTest(
                'TEST_REFILL_PASS and/or TEST_FEDERATION_PASS environment variables are not set.'
            )

        # set TEST_SPOOL=2 to test with bitcoind
        if test == '2':
            print('using bitcoind')
            self.t = Transactions(testnet=True,
                                  service='daemon',
                                  username=username,
                                  password=password,
                                  host=host,
                                  port=port)
            self.spool = Spool(testnet=True,
                               service='daemon',
                               username=username,
                               password=password,
                               host=host,
                               port=port)
        else:
            print('using blockr')
            self.t = Transactions(testnet=True)
            self.spool = Spool(testnet=True)

        self.user1_pass = self._get_pass()
        self.user2_pass = self._get_pass()
        self.user3_pass = self._get_pass()
        self.user1_root = Wallet(self.user1_pass, testnet=True).root_address
        self.user1_leaf = Wallet(self.user1_pass,
                                 testnet=True).address_from_path()
        self.user2_leaf = Wallet(self.user2_pass,
                                 testnet=True).address_from_path()
        self.user3_leaf = Wallet(self.user3_pass,
                                 testnet=True).address_from_path()
        self.file_hash = self._get_file_hash()

        print('user1_pass: '******'user2_pass: '******'user3_pass: '******'user1_root: ', self.user1_root)
        print('user1_leaf: ', self.user1_leaf)
        print('user2_leaf: ', self.user2_leaf)
        print('user3_leaf: ', self.user3_leaf)
        print('file_hash :', self.file_hash)

        self.spool._t.import_address(
            self.user1_root[1],
            "test",
        )
        self.spool._t.import_address(
            self.user1_leaf[1],
            "test",
        )
        self.spool._t.import_address(
            self.user2_leaf[1],
            "test",
        )
        self.spool._t.import_address(
            self.user3_leaf[1],
            "test",
        )
        self.spool._t.import_address(
            self.file_hash[0],
            "test",
        )
        self.spool._t.import_address(
            self.file_hash[1],
            "test",
        )

    def test_spool(self):
        # 1. Refill Federation wallet with necessary fuel and tokens
        print()
        print('Refilling Federation wallet with necessary fuel and tokens')
        txid = self.spool.refill_main_wallet(self.refill_root,
                                             self.federation_root[1],
                                             7,
                                             11,
                                             self.refill_pass,
                                             min_confirmations=1,
                                             sync=True)
        print(txid)

        # 2. user1 registers master edition
        print()
        print('user1 registers master edition')
        txid = self.spool.register(self.federation_root,
                                   self.user1_root[1],
                                   self.file_hash,
                                   self.federation_pass,
                                   0,
                                   min_confirmations=1,
                                   sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01REGISTER0')

        # 3. user1 registers number of editions
        print()
        print('user1 registers number of editions')
        txid = self.spool.editions(self.federation_root,
                                   self.user1_root[1],
                                   self.file_hash,
                                   self.federation_pass,
                                   10,
                                   min_confirmations=1,
                                   sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01EDITIONS10')

        # 4. user1 registers edition number 1
        print()
        print('user1 registers edition number 1')
        txid = self.spool.register(self.federation_root,
                                   self.user1_leaf[1],
                                   self.file_hash,
                                   self.federation_pass,
                                   1,
                                   min_confirmations=1,
                                   sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01REGISTER1')

        # 5. Refill user1 wallet before transfer
        print()
        print('Refill user1 wallet before transfer')
        txid = self.spool.refill(self.federation_root,
                                 self.user1_leaf[1],
                                 1,
                                 1,
                                 self.federation_pass,
                                 min_confirmations=1,
                                 sync=True)
        print(txid)

        # 5. User1 transfers edition number 1 to user2
        print()
        print('User1 transfers edition number 1 to user 2')
        txid = self.spool.transfer(self.user1_leaf,
                                   self.user2_leaf[1],
                                   self.file_hash,
                                   self.user1_pass,
                                   1,
                                   min_confirmations=1,
                                   sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01TRANSFER1')

        # 6. Refill user2 wallet before consign
        print()
        print('Refill user2 wallet before consign')
        txid = self.spool.refill(self.federation_root,
                                 self.user2_leaf[1],
                                 1,
                                 1,
                                 self.federation_pass,
                                 min_confirmations=1,
                                 sync=True)
        print(txid)

        # 6. user2 consigns edition number 1 to user3
        print()
        print('user2 consigns edition number 1 to user3')
        txid = self.spool.consign(self.user2_leaf,
                                  self.user3_leaf[1],
                                  self.file_hash,
                                  self.user2_pass,
                                  1,
                                  min_confirmations=1,
                                  sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01CONSIGN1')

        # 7. Refill user3 wallet before unconsign
        print()
        print('Refill user3 wallet before unconsign')
        txid = self.spool.refill(self.federation_root,
                                 self.user3_leaf[1],
                                 1,
                                 1,
                                 self.federation_pass,
                                 min_confirmations=1,
                                 sync=True)
        print(txid)

        # 7. user3 unconsigns edition number 1 to user2
        print()
        print('user3 unconsigns edition number 1 back to user2')
        txid = self.spool.unconsign(self.user3_leaf,
                                    self.user2_leaf[1],
                                    self.file_hash,
                                    self.user3_pass,
                                    1,
                                    min_confirmations=1,
                                    sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01UNCONSIGN1')

        # 8. Refill user2 wallet before loan
        print()
        print('Refill user2 wallet before loan')
        txid = self.spool.refill(self.federation_root,
                                 self.user2_leaf[1],
                                 1,
                                 1,
                                 self.federation_pass,
                                 min_confirmations=1,
                                 sync=True)
        print(txid)

        # 8. user2 loans edition number 1 to user3
        print()
        print('user2 loans edition number 1 to user3')
        txid = self.spool.loan(self.user2_leaf,
                               self.user3_leaf[1],
                               self.file_hash,
                               self.user2_pass,
                               1,
                               '150522',
                               '150523',
                               min_confirmations=1,
                               sync=True)
        print(txid)

        tx = self.t.get(txid)
        verb = BlockchainSpider.check_script(tx['vouts'])
        self.assertEqual(verb, 'ASCRIBESPOOL01LOAN1/150522150523')

    def _get_pass(self):
        return ''.join([random.choice(ascii_letters) for i in range(10)])

    def _get_file_hash(self):
        title = ''.join([random.choice(ascii_letters) for i in range(10)])
        with open('/tmp/test', 'w') as f:
            f.write(random._urandom(100))

        f = File('/tmp/test', testnet=True, title=title)
        return f.file_hash, f.file_hash_metadata
Пример #8
0
                             p_total=self.p_isentropic if self.isentropic else self.p_total,
                             medium='gas',
                             station_number=self.station_number)


if __name__ == '__main__':
    from inlet import Inlet
    from fan import Fan
    from bypass import Bypass
    from compressor import Compressor
    from combustion import CombustionChamber
    from spool import Spool
    ambient_conditions = FlowCondition(corrected_mass_flow=1400.,
                                       mach=0.8, t_static=216, p_static=22632, station_number='1', medium='air')
    inlet = Inlet(ambient=ambient_conditions, eta=0.98)
    fan = Fan(inflow=inlet.outflow, eta=0.92, pressure_ratio=1.6, station_number='21')
    bypass = Bypass(inflow=fan.outflow, bypass_ratio=8.)
    lpc = Compressor(inflow=bypass.outflow_core, eta=0.9, pressure_ratio=1.4, station_number='25')
    hpc = Compressor(inflow=lpc.outflow, eta=0.9, pressure_ratio=19, station_number='3')
    combustor = CombustionChamber(inflow=hpc.outflow, eta=0.99, pressure_ratio=0.96, t_total_exit=1450.)
    lp_spool = Spool(compressor_in=(fan, lpc), eta=0.99)
    hp_spool = Spool(compressor_in=hpc, eta=0.99)
    hpt = Turbine(inflow=combustor.outflow, spool_in=hp_spool, eta=0.92, station_number='45')
    lpt = Turbine(inflow=hpt.outflow, spool_in=lp_spool, eta=0.92, station_number='5')
    print(lpt.t_total)
    print(lpt.p_total)


    # print(obj.p_total)
    # print(obj.t_total)