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 spool_regtest(rpcuser, rpcpassword, host, port): from spool import Spool return Spool( service='daemon', testnet=True, username=rpcuser, password=rpcpassword, host=host, port=port, )
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
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)
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", )
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
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)