Beispiel #1
0
def submit_events():
    sql = "select id from event where start_time < NOW() and prepare_time < NOW() and prepare_time > 0 and submit_time = 0"

    c = libmysql.db.cursor()
    c.execute( sql )
    rows = c.fetchall()

    for row in rows:
        event = Event()
        event.load(row[0])

        govobj = GovernanceObject()
        print event.get_id()
        govobj.load(event.get_id())
        hash = govobj.get_field("object_fee_tx")

        print "# SUBMIT PREPARED EVENTS FOR DASH NETWORK"

        print
        print " -- cmd : ", govobj.get_submit_command()
        print        
        print " -- executing event ... getting fee_tx hash"

        if misc.is_hash(hash):
            tx = dashd.CTransaction()
            if tx.load(hash):
                print " -- confirmations: ", tx.get_confirmations()
                
                if tx.get_confirmations() >= CONFIRMATIONS_REQUIRED:
                    event.set_submitted()   
                    print " -- executing event ... getting fee_tx hash"

                    result = dashd.rpc_command(govobj.get_submit_command())
                    if misc.is_hash(result):
                        print " -- got result", result

                        govobj.update_field("object_hash", result)
                        event.save()
                        govobj.save()
                        libmysql.db.commit()
                        return 1
                    else:
                        print " -- got error", result
                else:
                    print " -- waiting for confirmation"

        return 0
Beispiel #2
0
def prepare_events():
    sql = "select id from event where start_time < NOW() and error_time = 0 and prepare_time = 0"

    c = libmysql.db.cursor()
    c.execute( sql )
    rows = c.fetchall()

    for row in rows:
        event = Event()
        event.load(row[0])

        govobj = GovernanceObject()
        govobj.load(event.get_id())

        print "# PREPARING EVENTS FOR DASH NETWORK"
        print
        print " -- cmd : ", govobj.get_prepare_command()
        print

        result = dashd.rpc_command(govobj.get_prepare_command())
        print " -- executing event ... getting fee_tx hash"

        # todo: what should it do incase of error?
        if misc.is_hash(result):
            hashtx = misc.clean_hash(result)
            print " -- got hash:", hashtx
            govobj.update_field("object_fee_tx", hashtx)
            govobj.save()
            event.update_field("prepare_time", misc.get_epoch())
            event.save()
            libmysql.db.commit()

            return 1
        else:
            print " -- got error:", result
            event.update_field("error_time", misc.get_epoch())
            event.save()
            # separately update event error message
            event.update_error_message(result)
            libmysql.db.commit()

    return 0
Beispiel #3
0
def do_test():
    parent = GovernanceObject()
    parent.init()

    start_epoch = datetime.datetime.strptime(START_DATE,
                                             "%Y-%m-%d").strftime('%s')
    end_epoch = datetime.datetime.strptime(END_DATE, "%Y-%m-%d").strftime('%s')

    # Step 1 - Create superblock

    superblock_name = "sb" + str(random.randint(1000000, 9999999))

    while GovernanceObjectMananger.object_with_name_exists(superblock_name):
        superblock_name = "sb" + str(random.randint(1000000, 9999999))

    fee_tx = CTransaction()

    sbObj = GovernanceObject()
    sbObj.create_new(parent, superblock_name, govtypes.trigger,
                     govtypes.FIRST_REVISION, fee_tx)
    last_id = sbObj.save()

    blockCount = int(rpc_command("getblockcount"))
    event_block_height = "%d" % (blockCount + crontab.CONFIRMATIONS_REQUIRED +
                                 5)

    if last_id is None:
        raise (Exception("do_test: superblock creation failed"))

    # ADD OUR PROPOSAL AS A SUB-OBJECT WITHIN GOVERNANCE OBJECT

    c = Superblock()
    c.set_field("governance_object_id", last_id)
    c.set_field("type", govtypes.trigger)
    c.set_field("subtype", "superblock")
    c.set_field("superblock_name", superblock_name)
    c.set_field("event_block_height", event_block_height)
    c.set_field("payment_addresses", PAYMENT_ADDRESS1)
    c.set_field("payment_amounts", PAYMENT_AMOUNT1)

    # APPEND TO GOVERNANCE OBJECT

    sbObj.add_subclass("trigger", c)
    sbObj.save()

    # CREATE EVENT TO TALK TO DASHD / PREPARE / SUBMIT OBJECT

    event = Event()
    event.create_new(last_id)
    event.save()
    libmysql.db.commit()

    # Step 2 - Prepare/submit events
    print "Before do_events"
    do_events()
    print "After do_events"

    # Step 3 - Vote up the superblock
    sbObj.load(sbObj.governance_object['id'])
    print "sbObj.governance_object = %s" % (sbObj.governance_object)
    print "Getting objectHash"
    objectHash = sbObj.get_field("object_hash").strip()
    print "preparing to vote: objectHash = %s, length = %d" % (objectHash,
                                                               len(objectHash))
    if len(objectHash) == 64:
        vote(objectHash)

    # Step 4 - Create proposal

    proposal_name = "tprop-" + str(random.randint(1000000, 9999999))

    while GovernanceObjectMananger.object_with_name_exists(proposal_name):
        proposal_name = "test-proposal-" + str(random.randint(
            1000000, 9999999))

    quoted_proposal_name = "'%s'" % (proposal_name)

    fee_tx = CTransaction()

    newObj = GovernanceObject()
    newObj.create_new(parent, proposal_name, govtypes.proposal,
                      govtypes.FIRST_REVISION, fee_tx)
    last_id = newObj.save()

    if last_id is None:
        raise (Exception("do_test: proposal creation failed"))

    c = Proposal()
    c.set_field("governance_object_id", last_id)
    c.set_field("type", govtypes.proposal)
    c.set_field("proposal_name", quoted_proposal_name)
    c.set_field("description_url", DESCRIPTION_URL)
    c.set_field("start_epoch", start_epoch)
    c.set_field("end_epoch", end_epoch)
    c.set_field("payment_address", PAYMENT_ADDRESS2)
    c.set_field("payment_amount", PAYMENT_AMOUNT2)

    # APPEND TO GOVERNANCE OBJECT

    newObj.add_subclass("proposal", c)
    newObj.save()

    # CREATE EVENT TO TALK TO DASHD / PREPARE / SUBMIT OBJECT

    event = Event()
    event.create_new(last_id)
    event.save()
    libmysql.db.commit()

    # Step 5 - Prepare/submit events
    do_events()