def create_redeem_transaction(payload: ProducerInfo, output_address: str, amount: int, rpc_port: int): # create outputs outputs, total_amount = create_normal_outputs( output_addresses=[output_address], amount=amount, fee=util.TX_FEE, output_lock=0) # create inputs deposit_address = payload.get_deposit_address() inputs, change_outputs = create_normal_inputs(deposit_address, total_amount, rpc_port) if inputs is None or change_outputs is None: Logger.error("Create normal inputs failed") return None outputs.extend(change_outputs) # create program programs = list() redeem_script = bytes.fromhex(payload.owner_account.redeem_script()) program = Program(code=redeem_script, params=None) programs.append(program) # create attributes attributes = list() attribute = Attribute(usage=Attribute.NONCE, data=bytes("attributes".encode())) attributes.append(attribute) tx = Transaction() tx.version = Transaction.TX_VERSION_09 tx.tx_type = Transaction.RETURN_DEPOSIT_CHAIN tx.payload_version = 0 tx.payload = Payload(Payload.DEFAULT_VERSION) tx.attributes = attributes tx.inputs = inputs tx.outputs = outputs tx.lock_time = 0 tx.programs = programs return tx
def create_register_transaction(input_private_key: str, amount: int, payload: ProducerInfo, rpc_port: int): # create outputs outputs, total_amount = create_normal_outputs( output_addresses=[payload.get_deposit_address()], amount=amount, fee=util.TX_FEE, output_lock=0) # create inputs account = Account(input_private_key) inputs, change_outputs = create_normal_inputs(account.address(), total_amount, rpc_port) if inputs is None or change_outputs is None: Logger.error("Create normal inputs failed") return None outputs.extend(change_outputs) # create program programs = list() redeem_script = bytes.fromhex(account.redeem_script()) program = Program(code=redeem_script, params=None) programs.append(program) # create attributes attributes = list() attribute = Attribute(usage=Attribute.NONCE, data=bytes("attributes".encode())) attributes.append(attribute) tx = Transaction() tx.version = Transaction.TX_VERSION_09 tx.tx_type = Transaction.REGISTER_PRODUCER tx.payload_version = 0 tx.payload = payload tx.attributes = attributes tx.inputs = inputs tx.outputs = outputs tx.lock_time = 0 tx.programs = programs return tx
def create_cancel_transaction(input_private_key: str, payload: ProducerInfo, rpc_port: int): # create inputs account = Account(input_private_key) inputs, change_outputs = create_normal_inputs(account.address(), util.TX_FEE, rpc_port) if inputs is None or change_outputs is None: Logger.error("Create normal inputs failed") return None # create outputs outputs = list() outputs.extend(change_outputs) # create program programs = list() redeem_script = bytes.fromhex(account.redeem_script()) program = Program(code=redeem_script, params=None) programs.append(program) # create attributes attributes = list() attribute = Attribute(usage=Attribute.NONCE, data=bytes("attributes".encode())) attributes.append(attribute) payload = ProcessProducer( bytes.fromhex(payload.owner_account.public_key()), bytes.fromhex(payload.owner_account.private_key())) tx = Transaction() tx.version = Transaction.TX_VERSION_09 tx.tx_type = Transaction.CANCEL_PRODUCER tx.payload_version = 0 tx.payload = payload tx.attributes = attributes tx.inputs = inputs tx.outputs = outputs tx.lock_time = 0 tx.programs = programs return tx