def scenario(wallets, **kw):

    testlib.blockstack_namespace_preorder("test", wallets[1].addr,
                                          wallets[0].privkey)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_reveal(
        "test",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=2)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_ready("test", wallets[1].privkey)
    testlib.next_block(**kw)

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record(
        "test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])

    testlib.blockstack_name_preorder("foo.test", wallets[2].privkey,
                                     wallets[3].addr)
    testlib.next_block(**kw)

    testlib.blockstack_name_register("foo.test", wallets[2].privkey,
                                     wallets[3].addr)
    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != name_cost:
        print 'address {} did not get credited'.format(
            namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance,
                                     name_cost)
        return False
def scenario( wallets, **kw ):

    testlib.blockstack_namespace_preorder( "test", wallets[1].addr, wallets[0].privkey )
    testlib.next_block( **kw )

    testlib.blockstack_namespace_reveal( "test", wallets[1].addr, 2, 250, 4, [6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0], 10, 10, wallets[0].privkey, version_bits=2)
    testlib.next_block( **kw )

    resp = testlib.blockstack_name_import( "foo.test", wallets[3].addr, "11" * 20, wallets[1].privkey )
    if 'error' in resp:
        print json.dumps( resp, indent=4 )
        return False

    testlib.blockstack_namespace_ready( "test", wallets[1].privkey )
    testlib.next_block( **kw )

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record("test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])

    testlib.blockstack_name_renew("foo.test", wallets[3].privkey)
    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != name_cost:
        print 'address {} did not get credited'.format(namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance, name_cost)
        return False

    testlib.blockstack_name_renew("foo.test", wallets[3].privkey, recipient_addr=wallets[4].addr, zonefile_hash='22' * 20)
    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != 2*name_cost:
        print 'address {} did not get credited'.format(namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance, 2*name_cost)
        return False
Beispiel #3
0
def scenario(wallets, **kw):

    testlib.blockstack_namespace_preorder("test", wallets[1].addr,
                                          wallets[0].privkey)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_reveal(
        "test",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=2)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_ready("test", wallets[1].privkey)
    testlib.next_block(**kw)

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record(
        "test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])

    testlib.blockstack_name_preorder("foo.test", wallets[2].privkey,
                                     wallets[3].addr)
    testlib.next_block(**kw)

    testlib.blockstack_name_register("foo.test", wallets[2].privkey,
                                     wallets[3].addr)
    testlib.next_block(**kw)

    # renew/xfer/update
    res = testlib.blockstack_name_renew("foo.test",
                                        wallets[3].privkey,
                                        zonefile_hash="22" * 20,
                                        recipient_addr=wallets[4].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    # renew/update
    res = testlib.blockstack_name_renew("foo.test",
                                        wallets[4].privkey,
                                        zonefile_hash="33" * 20)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    # renew/xfer
    res = testlib.blockstack_name_renew("foo.test",
                                        wallets[4].privkey,
                                        recipient_addr=wallets[1].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    # renew
    res = testlib.blockstack_name_renew("foo.test", wallets[1].privkey)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != name_cost * 5:
        print 'address {} did not get credited'.format(
            namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance,
                                     name_cost * 5)
        return False
Beispiel #4
0
def scenario(wallets, **kw):

    testlib.blockstack_namespace_preorder("test", wallets[1].addr,
                                          wallets[0].privkey)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_reveal(
        "test",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=2)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_ready("test", wallets[1].privkey)
    testlib.next_block(**kw)

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record(
        "test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])
    burn_balance = testlib.get_balance(
        blockstack_client.constants.BLOCKSTACK_BURN_ADDRESS)

    res = testlib.blockstack_name_preorder("foo.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    res = testlib.blockstack_name_register("foo.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != name_cost:
        print 'address {} did not get credited'.format(
            namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance,
                                     name_cost)
        return False

    # should send to null burn address
    res = testlib.blockstack_name_preorder("foo2.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    # preorder should send to the null burn address now.
    # try forcing it to the namespace burn address, to verify that it fails
    res = testlib.blockstack_name_preorder("foo_fail.test",
                                           wallets[2].privkey,
                                           wallets[3].addr,
                                           burn_addr=namespace_rec['address'])
    if 'error' not in res:
        print res
        return False

    res = testlib.blockstack_name_preorder("foo_fail.test",
                                           wallets[2].privkey,
                                           wallets[3].addr,
                                           burn_addr=namespace_rec['address'],
                                           safety_checks=False,
                                           tx_fee=10000 * 5)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    # should be rejected
    res = testlib.blockstack_name_register("foo_fail.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    # should be accepted
    res = testlib.blockstack_name_register("foo2.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)
    testlib.expect_snv_fail_at('foo_fail.test',
                               testlib.get_current_block(**kw))

    # should have been rejected due to wrong burn address
    whois = testlib.blockstack_cli_whois('foo_fail.test')
    if 'error' not in whois:
        print whois
        return False

    new_burn_balance = testlib.get_balance(
        blockstack_client.constants.BLOCKSTACK_BURN_ADDRESS)
    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec_2 = testlib.get_name_blockchain_record('foo2.test')
    name_cost_2 = name_rec_2['op_fee']

    # namespace should NOT have gotten the fee for foo_fail.  It should only have gotten it for foo.test
    if new_namespace_balance - namespace_balance != name_cost + 5500:
        print 'address {} got credited after fee capture period'.format(
            namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance,
                                     name_cost)
        return False

    # burn address should have received the fee for the second name
    if new_burn_balance - name_cost_2 != burn_balance:
        print 'null burn address did not get credited'
        print '{} != {} + {}'.format(new_burn_balance, burn_balance,
                                     name_cost_2)
        return False
def scenario( wallets, **kw ):

    testlib.blockstack_namespace_preorder( "test", wallets[1].addr, wallets[0].privkey )
    testlib.next_block( **kw )

    testlib.blockstack_namespace_reveal( "test", wallets[1].addr, 52595, 250, 4, [6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0], 10, 10, wallets[0].privkey, version_bits=2)
    testlib.next_block( **kw )

    resp = testlib.blockstack_name_import( "foo.test", wallets[3].addr, "11" * 20, wallets[1].privkey )
    if 'error' in resp:
        print json.dumps( resp, indent=4 )

    testlib.next_block( **kw )

    testlib.blockstack_namespace_ready( "test", wallets[1].privkey )
    testlib.next_block( **kw )

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record("test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])
    burn_balance = testlib.get_balance(blockstack.lib.config.BLOCKSTACK_BURN_ADDRESS)

    # should send to namespace burn address
    res = testlib.blockstack_name_renew('foo.test', wallets[3].privkey)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    # should send to namespace burn address
    res = testlib.blockstack_name_renew('foo.test', wallets[3].privkey)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != 2*name_cost:
        print 'address {} did not get credited'.format(namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance, name_cost)
        return False

    # should be rejected if not burned
    res = testlib.blockstack_name_renew('foo.test', wallets[3].privkey, burn_addr=namespace_rec['address'], expect_fail=True)
    if 'error' not in res:
        print res
        return False

    res = testlib.blockstack_name_renew('foo.test', wallets[3].privkey, burn_addr=namespace_rec['address'], safety_checks=False, tx_fee=10000*5)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    # should have been rejected
    name_rec_2 = testlib.get_name_blockchain_record('foo.test')
    if name_rec_2['last_renewed'] != name_rec['last_renewed']:
        print 'accidentally renewed'
        return False

    # renew, but correctly (with proper burn address)
    res = testlib.blockstack_name_renew('foo.test', wallets[3].privkey)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    name_rec_2 = testlib.get_name_blockchain_record('foo.test')
    if name_rec_2['last_renewed'] <= name_rec['last_renewed']:
        print 'did not renew'
        return False

    # must have burned
    new_burn_balance = testlib.get_balance(blockstack.lib.config.BLOCKSTACK_BURN_ADDRESS)
    if new_burn_balance - name_cost != burn_balance:
        print 'did not burn fee'
        print '{} != {} + {}'.format(new_burn_balance, burn_balance, name_cost)
        return False
def scenario(wallets, **kw):

    testlib.blockstack_namespace_preorder("test", wallets[1].addr,
                                          wallets[0].privkey)
    testlib.next_block(**kw)

    testlib.blockstack_namespace_reveal(
        "test",
        wallets[1].addr,
        3,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=2)
    testlib.next_block(**kw)

    resp = testlib.blockstack_name_import("foo.test", wallets[3].addr,
                                          "11" * 20, wallets[1].privkey)
    if 'error' in resp:
        print json.dumps(resp, indent=4)
        return False

    testlib.next_block(**kw)

    testlib.blockstack_namespace_ready("test", wallets[1].privkey)
    testlib.next_block(**kw)

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record(
        "test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])
    burn_balance = testlib.get_balance(
        blockstack.lib.config.BLOCKSTACK_BURN_ADDRESS)

    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)  # expired

    res = testlib.blockstack_name_preorder("foo.test", wallets[2].privkey,
                                           wallets[3].addr)  # +name_cost
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    res = testlib.blockstack_name_register("foo.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)  # expired

    res = testlib.blockstack_name_preorder("foo.test", wallets[3].privkey,
                                           wallets[4].addr)  # +name_cost
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    res = testlib.blockstack_name_register("foo.test", wallets[3].privkey,
                                           wallets[4].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)
    testlib.next_block(**kw)

    res = testlib.blockstack_name_renew("foo.test",
                                        wallets[4].privkey)  # +name_cost
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)
    testlib.next_block(**kw)  # expired

    res = testlib.blockstack_name_preorder("foo.test", wallets[2].privkey,
                                           wallets[3].addr)  # +name_cost
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    res = testlib.blockstack_name_register("foo.test", wallets[2].privkey,
                                           wallets[3].addr)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec = testlib.get_name_blockchain_record('foo.test')
    name_cost = name_rec['op_fee']

    testlib.next_block(**kw)
    testlib.next_block(**kw)  # stop fee collection
    testlib.next_block(**kw)
    testlib.next_block(**kw)  # expired

    if new_namespace_balance - namespace_balance != 4 * name_cost:
        print 'address {} did not get credited'.format(
            namespace_rec['address'])
        print '{} != {} + 4*{}'.format(new_namespace_balance,
                                       namespace_balance, name_cost)
        return False

    # preorder should send to the null burn address now.
    res = testlib.blockstack_name_preorder(
        "foo2.test", wallets[4].privkey,
        wallets[0].addr)  # does not pay to namespace
    if 'error' in res:
        print res
        return False

    # try forcing it to the namespace burn address, to verify that it fails
    res = testlib.blockstack_name_preorder(
        "foo_fail.test",
        wallets[4].privkey,
        wallets[0].addr,
        burn_addr=namespace_rec['address'],
        expect_fail=True)  # does not pay to namespace (command fails)
    if 'error' not in res:
        print res
        return False

    res = testlib.blockstack_name_preorder("foo_fail.test",
                                           wallets[4].privkey,
                                           wallets[0].addr,
                                           burn_addr=namespace_rec['address'],
                                           price={
                                               'units': 'BTC',
                                               'amount': name_cost
                                           },
                                           safety_checks=False,
                                           tx_fee=10000 * 5)  # +name_cost
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)
    testlib.expect_snv_fail_at('foo_fail.test',
                               testlib.get_current_block(**kw))

    # should be accepted
    res = testlib.blockstack_name_register("foo2.test", wallets[4].privkey,
                                           wallets[0].addr)
    if 'error' in res:
        print res
        return False

    # should be rejected
    res = testlib.blockstack_name_register("foo_fail.test",
                                           wallets[4].privkey,
                                           wallets[0].addr,
                                           safety_checks=False)
    if 'error' in res:
        print res
        return False

    testlib.next_block(**kw)
    testlib.expect_snv_fail_at('foo_fail.test',
                               testlib.get_current_block(**kw))

    # should have been rejected due to wrong burn address
    whois = testlib.blockstack_cli_whois('foo_fail.test')
    if 'error' not in whois:
        print whois
        return False

    new_burn_balance = testlib.get_balance(
        blockstack.lib.config.BLOCKSTACK_BURN_ADDRESS)
    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_rec_2 = testlib.get_name_blockchain_record('foo2.test')
    name_cost_2 = name_rec_2['op_fee']

    # namespace should NOT have gotten the fee for foo_fail.  It should only have gotten it for foo.test
    if new_namespace_balance - namespace_balance < 5 * name_cost or new_namespace_balance - namespace_balance > 6 * name_cost:
        print 'address {} got credited after fee capture period'.format(
            namespace_rec['address'])
        print '{} != {} + 5*{}'.format(new_namespace_balance,
                                       namespace_balance, name_cost)
        return False

    # burn address should have received the fee for the second name
    if new_burn_balance - name_cost_2 != burn_balance:
        print 'null burn address did not get credited'
        print '{} != {} + {}'.format(new_burn_balance, burn_balance,
                                     name_cost_2)
        return False
def scenario(wallets, **kw):

    namespace_price_old_btc_2 = {
        'units': 'BTC',
        'amount':
        blockstack.lib.scripts.price_namespace('old_btc_2', 694, 'BTC')
    }
    namespace_price_stacks_too_early_1_btc = {
        'units':
        'BTC',
        'amount':
        blockstack.lib.scripts.price_namespace('stacks_too_early_1', 690,
                                               'BTC')
    }
    namespace_price_stacks_too_early_2_stacks = {
        'units':
        'STACKS',
        'amount':
        blockstack.lib.scripts.price_namespace('stacks_too_early_1', 694,
                                               'STACKS')
    }

    testlib.blockstack_namespace_preorder("test", wallets[1].addr,
                                          wallets[0].privkey)
    testlib.blockstack_namespace_preorder(
        "stacks_too_early_1",
        wallets[1].addr,
        wallets[0].privkey,
        safety_checks=False,
        price=namespace_price_stacks_too_early_1_btc,
        tx_fee=50000)
    testlib.blockstack_namespace_preorder("old_btc_1", wallets[1].addr,
                                          wallets[0].privkey)
    btc_too_late_tx = testlib.blockstack_namespace_preorder('btc_too_late',
                                                            wallets[1].addr,
                                                            wallets[2].privkey,
                                                            tx_only=True)

    print ''
    print btc_too_late_tx
    print ''

    testlib.next_block(**kw)  # end of 689

    # should be accepted
    testlib.blockstack_namespace_reveal(
        "test", wallets[1].addr, 52595, 250, 4,
        [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 10, 10,
        wallets[0].privkey)

    # the stacks_too_early namespace cannot be revealed (i.e. its preorder got rejected)
    testlib.blockstack_namespace_reveal(
        "stacks_too_early_1",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=blockstack.NAMESPACE_VERSION_PAY_WITH_STACKS,
        safety_checks=False,
        tx_fee=50000)
    testlib.next_block(**kw)  # end of 690
    testlib.expect_snv_fail_at('stacks_too_early_1',
                               testlib.get_current_block(**kw))

    res = testlib.blockstack_cli_get_namespace_blockchain_record('test')
    if 'error' in res:
        print 'test was not revealed'
        print res
        return False

    res = testlib.blockstack_cli_get_namespace_blockchain_record(
        'stacks_too_early_1')
    if 'error' not in res:
        print 'stacks too early 1 was revealed'
        print res
        return False

    testlib.blockstack_namespace_ready("test", wallets[1].privkey)
    testlib.next_block(**kw)  # end of 691
    testlib.next_block(**kw)  # end of 692

    # should succeed---last block we can pay in BTC
    testlib.blockstack_namespace_preorder("old_btc_2",
                                          wallets[1].addr,
                                          wallets[0].privkey,
                                          price=namespace_price_old_btc_2)

    # should be rejected---this is one block early
    testlib.blockstack_namespace_preorder(
        "stacks_too_early_2",
        wallets[1].addr,
        wallets[0].privkey,
        safety_checks=False,
        price=namespace_price_stacks_too_early_2_stacks,
        tx_fee=50000,
        expect_reject=True)
    testlib.next_block(**kw)  # end of 693
    testlib.expect_snv_fail_at('stacks_too_early_2',
                               testlib.get_current_block(**kw))

    # should succeed even though preordered with BTC
    testlib.blockstack_namespace_reveal(
        "old_btc_1",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=blockstack.NAMESPACE_VERSION_PAY_WITH_STACKS)

    # should fail -- no preorder
    testlib.blockstack_namespace_reveal(
        "stacks_too_early_2",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=blockstack.NAMESPACE_VERSION_PAY_WITH_STACKS,
        safety_checks=False,
        tx_fee=50000)

    # should be rejected---it's a block too late
    testlib.broadcast_transaction(btc_too_late_tx['transaction'])

    testlib.next_block(**kw)  # end of 694
    testlib.expect_snv_fail_at('stacks_too_early_2',
                               testlib.get_current_block(**kw))

    res = testlib.blockstack_cli_get_namespace_blockchain_record(
        'stacks_too_early_2')
    if 'error' not in res:
        print 'stacks too early 2 was revealed'
        print res
        return False

    res = testlib.blockstack_cli_get_namespace_blockchain_record('old_btc_1')
    if 'error' in res:
        print 'old_btc_1 not revealed'
        print res
        return False

    # should succeed, even though we're in the STACKS epoch
    testlib.blockstack_namespace_reveal(
        "old_btc_2",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[0].privkey,
        version_bits=blockstack.NAMESPACE_VERSION_PAY_WITH_STACKS)

    # should fail, since the preorer for btc_too_late was sent too late
    testlib.blockstack_namespace_reveal(
        "btc_too_late",
        wallets[1].addr,
        52595,
        250,
        4, [6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        10,
        10,
        wallets[2].privkey,
        version_bits=blockstack.NAMESPACE_VERSION_PAY_WITH_STACKS)
    testlib.next_block(**kw)  # end of 695
    testlib.expect_snv_fail_at('btc_too_late', testlib.get_current_block(**kw))

    res = testlib.blockstack_cli_get_namespace_blockchain_record('old_btc_2')
    if 'error' in res:
        print 'failed to reveal btc 2'
        print res
        return False

    res = testlib.blockstack_cli_get_namespace_blockchain_record(
        'btc_too_late')
    if 'error' not in res:
        print 'revealed btc_too_late'
        print res
        return False
Beispiel #8
0
def scenario( wallets, **kw ):

    testlib.blockstack_namespace_preorder( "test", wallets[1].addr, wallets[0].privkey )
    testlib.next_block( **kw )

    testlib.blockstack_namespace_reveal( "test", wallets[1].addr, 52595, 250, 4, [6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0], 10, 10, wallets[0].privkey, version_bits=2)
    testlib.next_block( **kw )

    testlib.blockstack_namespace_ready( "test", wallets[1].privkey )
    testlib.next_block( **kw )

    namespace_rec = testlib.blockstack_cli_get_namespace_blockchain_record("test")
    if 'error' in namespace_rec:
        print namespace_rec
        return False

    namespace_balance = testlib.get_balance(namespace_rec['address'])

    # should fail safety checks
    res = testlib.blockstack_name_preorder( "foo.test", wallets[2].privkey, wallets[3].addr, burn_addr=wallets[1].addr, expect_fail=True)
    if 'error' not in res:
        print res
        return False

    # should succeed to be transmitted and should be accepted
    res = testlib.blockstack_name_preorder( "foo.test", wallets[2].privkey, wallets[3].addr, burn_addr=wallets[1].addr, safety_checks=False, tx_fee=300 * 5)
    if 'error' in res:
        print res
        return False

    testlib.next_block( **kw )

    res = testlib.blockstack_name_register( "foo.test", wallets[2].privkey, wallets[3].addr, safety_checks=False, tx_fee=300*5 )
    if 'error 'in res:
        print res
        return False

    testlib.next_block( **kw )
    testlib.expect_snv_fail_at( "foo.test", testlib.get_current_block(**kw))

    # should NOT have registered (wrong burn address) 
    name_rec = testlib.get_name_blockchain_record('foo.test')
    if 'error' not in name_rec:
        print name_rec
        return False

    # try again, with the right burn address but the same register address (should be rejected)
    res = testlib.blockstack_name_preorder("foo.test", wallets[2].privkey, wallets[3].addr, burn_addr=wallets[0].addr, safety_checks=False, tx_fee=300 * 5)
    if 'error' in res:
        print res
        return False
    
    testlib.next_block( **kw )

    nameops = blockstack.lib.client.get_blockstack_transactions_at(testlib.get_current_block(**kw), hostport='http://localhost:16264')
    if 'error' in nameops:
        print nameops
        return False

    if len(nameops) > 0:
        print nameops
        return False

    # try again, but with the right burn address AND a different register address (should be accepted)
    res = testlib.blockstack_name_preorder("foo.test", wallets[2].privkey, wallets[4].addr, burn_addr=wallets[0].addr, safety_checks=False, tx_fee=300 * 5)
    if 'error' in res:
        print res
        return False

    testlib.next_block( **kw )

    # should succeed
    res = testlib.blockstack_name_register( "foo.test", wallets[2].privkey, wallets[4].addr )
    if 'error 'in res:
        print res
        return False

    testlib.next_block( **kw )

    # should have registered 
    name_rec = testlib.get_name_blockchain_record('foo.test')
    if 'error' in name_rec:
        print name_rec
        return False

    new_namespace_balance = testlib.get_balance(namespace_rec['address'])
    name_cost = name_rec['op_fee']

    if new_namespace_balance - namespace_balance != name_cost * 2:
        print 'address {} did not get credited'.format(namespace_rec['address'])
        print '{} != {} + {}'.format(new_namespace_balance, namespace_balance, name_cost * 2)
        return False