def do_proposal(self, arg): 'proposal --create --proposal_name="sb-test" --description_url="www.dashwhale.org/p/sb-test" --start_date="2016/8/1" --end_date="2017/1/1" --payment_address="ydE7B1A7htNwSTvvER6xBdgpKZqNDbbEhPydE7B1A7htNwSTvvER6xBdgpKZqNDbbEhP" --payment_amount="23"' parser = argparse.ArgumentParser(description='Create a dash proposal') # desired action parser.add_argument('-c', '--create', help="create", action='store_true') # object identity (existentially... what does it mean to be a pubkey?) parser.add_argument('-k', '--pubkey', help='your public key for this username (only required for --create)') # meta data (create or amend) parser.add_argument('-p', '--proposal_name', help='the proposal name (must be unique)') parser.add_argument('-d', '--description_url', help='your proposals url where a description of the project can be found') parser.add_argument('-s', '--start_date', help='starting data, must be the first of the month. Example : 2017/1/1') parser.add_argument('-e', '--end_date', help='ending data, must be the first of the month. Example : 2017/6/1') parser.add_argument('-x', '--payment_address', help='the payment address where you wish to receive the funds') parser.add_argument('-a', '--payment_amount', help='how much to send in each payment to the payment address') # process args = None try: args = parser.parse_args(parse(arg)) except: pass if not args: return ### ------ CREATE METHOD -------- #### if args.create: #--create --revision=1 --pubkey=XPubkey --username="******" if not args.proposal_name: print "proposal creation requires a proposal name, use --proposal_name" return if not args.description_url: print "proposal creation requires a description url, use --description_url" return if not args.start_date: print "start creation requires a start date, use --start_date" return if not args.end_date: print "end creation requires a end date, use --end_date" return if not args.payment_address: print "payment creation requires a valid base58 payment address, use --payment_address" return if not args.payment_amount: print "payment creation requires a valid payment amount, use --payment_amount" return ### ---- CONVERT AND CHECK EPOCHS ----- start_epoch = 0 end_epoch = 0 try: start_epoch = datetime.strptime(args.start_date, '"%d/%m/%y"').strftime('%s') end_epoch = datetime.strptime(args.end_date, '"%d/%m/%y"').strftime('%s') except: try: start_epoch = datetime.strptime(args.start_date, '"%Y/%m/%d"').strftime('%s') end_epoch = datetime.strptime(args.end_date, '"%Y/%m/%d"').strftime('%s') except: pass if start_epoch == 0 or end_epoch == 0: print "start or end date has invalid format, YYYY/MM/DD or DD/MM/YY is required"; return ### ---- CHECK NAME UNIQUENESS ----- if GovernanceObjectMananger.object_with_name_exists(args.proposal_name): print "governance object with that name already exists" return fee_tx = CTransaction() newObj = GovernanceObject() newObj.create_new(parent, args.proposal_name, govtypes.proposal, govtypes.FIRST_REVISION, fee_tx) last_id = newObj.save() print last_id if last_id != None: # ADD OUR PROPOSAL AS A SUB-OBJECT WITHIN GOVERNANCE OBJECT c = Proposal() c.set_field("governance_object_id", last_id) c.set_field("type", govtypes.proposal) c.set_field("proposal_name", args.proposal_name) c.set_field("description_url", args.description_url) c.set_field("start_epoch", start_epoch) c.set_field("end_epoch", end_epoch) c.set_field("payment_address", args.payment_address) c.set_field("payment_amount", args.payment_amount) # 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() print "event queued successfully" else: print "error:", newObj.last_error() # abort mysql commit return ### ------- ELSE PRINT HELP --------------- ### parser.print_help()
def do_proposal(self, arg): 'proposal --create --proposal_name="sb-test" --description_url="www.dashwhale.org/p/sb-test" --start_date="2016/8/1" --end_date="2017/1/1" --payment_address="ydE7B1A7htNwSTvvER6xBdgpKZqNDbbEhPydE7B1A7htNwSTvvER6xBdgpKZqNDbbEhP" --payment_amount="23"' parser = argparse.ArgumentParser(description='Create a dash proposal') # desired action parser.add_argument('-c', '--create', help="create", action='store_true') # object identity (existentially... what does it mean to be a pubkey?) parser.add_argument( '-k', '--pubkey', help= 'your public key for this username (only required for --create)') # meta data (create or amend) parser.add_argument('-p', '--proposal_name', help='the proposal name (must be unique)') parser.add_argument( '-d', '--description_url', help= 'your proposals url where a description of the project can be found' ) parser.add_argument( '-s', '--start_date', help= 'starting data, must be the first of the month. Example : 2017/1/1' ) parser.add_argument( '-e', '--end_date', help= 'ending data, must be the first of the month. Example : 2017/6/1') parser.add_argument( '-x', '--payment_address', help='the payment address where you wish to receive the funds') parser.add_argument( '-a', '--payment_amount', help='how much to send in each payment to the payment address') # process args = None try: args = parser.parse_args(parse(arg)) except: pass if not args: return ### ------ CREATE METHOD -------- #### if args.create: #--create --revision=1 --pubkey=XPubkey --username="******" if not args.proposal_name: print "proposal creation requires a proposal name, use --proposal_name" return if not args.description_url: print "proposal creation requires a description url, use --description_url" return if not args.start_date: print "start creation requires a start date, use --start_date" return if not args.end_date: print "end creation requires a end date, use --end_date" return if not args.payment_address: print "payment creation requires a valid base58 payment address, use --payment_address" return if not args.payment_amount: print "payment creation requires a valid payment amount, use --payment_amount" return ### ---- CONVERT AND CHECK EPOCHS ----- start_epoch = 0 end_epoch = 0 try: start_epoch = datetime.strptime(args.start_date, '"%d/%m/%y"').strftime('%s') end_epoch = datetime.strptime(args.end_date, '"%d/%m/%y"').strftime('%s') except: try: start_epoch = datetime.strptime( args.start_date, '"%Y/%m/%d"').strftime('%s') end_epoch = datetime.strptime(args.end_date, '"%Y/%m/%d"').strftime('%s') except: pass if start_epoch == 0 or end_epoch == 0: print "start or end date has invalid format, YYYY/MM/DD or DD/MM/YY is required" return ### ---- CHECK NAME UNIQUENESS ----- if GovernanceObjectMananger.object_with_name_exists( args.proposal_name): print "governance object with that name already exists" return fee_tx = CTransaction() newObj = GovernanceObject() newObj.create_new(parent, args.proposal_name, govtypes.proposal, govtypes.FIRST_REVISION, fee_tx) last_id = newObj.save() print last_id if last_id != None: # ADD OUR PROPOSAL AS A SUB-OBJECT WITHIN GOVERNANCE OBJECT c = Proposal() c.set_field("governance_object_id", last_id) c.set_field("type", govtypes.proposal) c.set_field("proposal_name", args.proposal_name) c.set_field("description_url", args.description_url) c.set_field("start_epoch", start_epoch) c.set_field("end_epoch", end_epoch) c.set_field("payment_address", args.payment_address) c.set_field("payment_amount", args.payment_amount) # 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() print "event queued successfully" else: print "error:", newObj.last_error() # abort mysql commit return ### ------- ELSE PRINT HELP --------------- ### parser.print_help()
def do_superblock(self, arg): 'superblock --create --event_block_height="28224" --payments="yLipDagwb1gM15RaUq3hpcaTxzDsFsSy9a=100"' 'superblock --create --event_date="2017/1/1" --payments="Addr1=amount,Addr2=amount,Addr3=amount"' parser = argparse.ArgumentParser(description='Create a dash proposal') # desired action parser.add_argument('-c', '--create', help="create", action='store_true') # meta data (create or amend) parser.add_argument('-p', '--payments', help='the payments desired in the superblock, serialized as a list. example: {"Addr1": amount,"Addr2": amount}') parser.add_argument('-b', '--event_block_height', help='block height to issue superblock') # process args = None try: args = parser.parse_args(parse(arg)) except: pass if not args: return ### ------ CREATE METHOD -------- #### if args.create: #--create --revision=1 --pubkey=XPubkey --username="******" if not args.payments: print "superblock creation requires a payment descriptions, use --payments" return if not args.event_block_height: print "superblock creation requires a event_block_height, use --event_block_height" return ### ---- CONVERT AND CHECK EPOCHS ----- payments = misc.normalize(args.payments).split(",") if len(payments) > 0: pass # COMPILE LIST OF ADDRESSES AND AMOUNTS list_addr = [] list_amount = [] for payment in payments: print payment addr,amount = payment.split("=") list_addr.append(addr) list_amount.append(amount) print list_amount print list_addr # CREATE NAME ACCORDING TO STARTING DATE (NON-UNIQUE IS NOT AN ATTACK) superblock_name = "sb" + str(random.randint(1000000, 9999999)) # DOES THIS ALREADY EXIST? if GovernanceObjectMananger.object_with_name_exists(superblock_name): print "governance object with that name already exists" return event_block_height = misc.normalize(args.event_block_height); print event_block_height fee_tx = CTransaction() newObj = GovernanceObject() newObj.create_new(parent, superblock_name, govtypes.trigger, govtypes.FIRST_REVISION, fee_tx) last_id = newObj.save() print last_id if last_id != None: # 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", "|".join(list_addr)) c.set_field("payment_amounts", "|".join(list_amount)) # APPEND TO GOVERNANCE OBJECT newObj.add_subclass("trigger", c) newObj.save() # CREATE EVENT TO TALK TO DASHD / PREPARE / SUBMIT OBJECT event = Event() event.create_new(last_id) event.save() libmysql.db.commit() print "event queued successfully" else: print "error:", newObj.last_error() # abort mysql commit return ### ------- ELSE PRINT HELP --------------- ### parser.print_help()
def do_superblock(self, arg): 'superblock --create --event_block_height="28224" --payments="yLipDagwb1gM15RaUq3hpcaTxzDsFsSy9a=100"' 'superblock --create --event_date="2017/1/1" --payments="Addr1=amount,Addr2=amount,Addr3=amount"' parser = argparse.ArgumentParser(description='Create a dash proposal') # desired action parser.add_argument('-c', '--create', help="create", action='store_true') # meta data (create or amend) parser.add_argument( '-p', '--payments', help= 'the payments desired in the superblock, serialized as a list. example: {"Addr1": amount,"Addr2": amount}' ) parser.add_argument('-b', '--event_block_height', help='block height to issue superblock') # process args = None try: args = parser.parse_args(parse(arg)) except: pass if not args: return ### ------ CREATE METHOD -------- #### if args.create: #--create --revision=1 --pubkey=XPubkey --username="******" if not args.payments: print "superblock creation requires a payment descriptions, use --payments" return if not args.event_block_height: print "superblock creation requires a event_block_height, use --event_block_height" return ### ---- CONVERT AND CHECK EPOCHS ----- payments = misc.normalize(args.payments).split(",") if len(payments) > 0: pass # COMPILE LIST OF ADDRESSES AND AMOUNTS list_addr = [] list_amount = [] for payment in payments: print payment addr, amount = payment.split("=") list_addr.append(addr) list_amount.append(amount) print list_amount print list_addr # CREATE NAME ACCORDING TO STARTING DATE (NON-UNIQUE IS NOT AN ATTACK) superblock_name = "sb" + str(random.randint(1000000, 9999999)) # DOES THIS ALREADY EXIST? if GovernanceObjectMananger.object_with_name_exists( superblock_name): print "governance object with that name already exists" return event_block_height = misc.normalize(args.event_block_height) print event_block_height fee_tx = CTransaction() newObj = GovernanceObject() newObj.create_new(parent, superblock_name, govtypes.trigger, govtypes.FIRST_REVISION, fee_tx) last_id = newObj.save() print last_id if last_id != None: # 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", "|".join(list_addr)) c.set_field("payment_amounts", "|".join(list_amount)) # APPEND TO GOVERNANCE OBJECT newObj.add_subclass("trigger", c) newObj.save() # CREATE EVENT TO TALK TO DASHD / PREPARE / SUBMIT OBJECT event = Event() event.create_new(last_id) event.save() libmysql.db.commit() print "event queued successfully" else: print "error:", newObj.last_error() # abort mysql commit return ### ------- ELSE PRINT HELP --------------- ### parser.print_help()