@@ -712,6 +712,117 @@ test on_recv_packet_unescrow_succeed() {
712712 )
713713}
714714
715+ test on_recv_packet_unescrow_fail_unwanted_voucher () fail {
716+ let mock = setup ()
717+
718+ let transfer_amount = 1234
719+
720+ let receiver = mock.cardano_public_key_hash
721+
722+ //==========================arrange inputs=========================
723+ let inputs = [mock.module_input, mock.channel_input]
724+
725+ //==========================arrange outputs=========================
726+ let module_output =
727+ Output {
728+ .. mock.module_output,
729+ value: mock.module_output.value
730+ |> add (ada_policy_id, ada_asset_name, - transfer_amount),
731+ }
732+
733+ expect Some (receiver_public_key_hash) =
734+ string_utils.hex_string_to_bytes (receiver)
735+
736+ let receiver_output =
737+ Output {
738+ address: from_verification_key (receiver_public_key_hash),
739+ value: from_asset (ada_policy_id, ada_asset_name, transfer_amount),
740+ datum: NoDatum ,
741+ reference_script: None ,
742+ }
743+
744+ let outputs = [module_output, mock.channel_output, receiver_output]
745+
746+ //==========================arrange redeemers=========================
747+ let acknowledgement = acknowledgement_mod.new_result_acknowledgement ("AQ==" )
748+
749+ let source_port = "port-0"
750+ let source_channel = "channel-0"
751+
752+ let denom =
753+ transfer_coin.get_denom_prefix (source_port, source_channel)
754+ |> bytearray.concat ("6c6f76656c616365" )
755+
756+ let (ftpd, packet) =
757+ build_packet (
758+ denom,
759+ transfer_amount,
760+ mock.cosmos_address,
761+ receiver,
762+ source_port,
763+ source_channel,
764+ mock.port_id,
765+ mock.channel_id,
766+ )
767+
768+ let packet_data = TransferModuleData (ftpd)
769+
770+ let module_redeemer: Redeemer =
771+ Callback (
772+ OnRecvPacket {
773+ channel_id: mock.channel_id,
774+ acknowledgement,
775+ data: packet_data,
776+ },
777+ )
778+
779+ let channel_redeemer: Redeemer =
780+ RecvPacket {
781+ packet,
782+ proof_commitment: mock.proof,
783+ proof_height: mock.proof_height,
784+ }
785+
786+ let mint_voucher_redeemer: Redeemer =
787+ MintVoucher {
788+ packet_source_port: packet.source_port,
789+ packet_source_channel: packet.source_channel,
790+ packet_dest_port: packet.destination_port,
791+ packet_dest_channel: packet.destination_channel,
792+ }
793+
794+ let redeemers: Pairs < ScriptPurpose , Redeemer > =
795+ [
796+ Pair (Spend (mock.module_input.output_reference), module_redeemer),
797+ Pair (Spend (mock.channel_input.output_reference), channel_redeemer),
798+ Pair (Mint (mock.voucher_minting_policy_id), mint_voucher_redeemer),
799+ ]
800+
801+ //==========================arrange context=========================
802+ let transaction =
803+ Transaction {
804+ .. transaction.placeholder,
805+ inputs: inputs,
806+ outputs: outputs,
807+ redeemers: redeemers,
808+ }
809+
810+ expect module_redeemer: IBCModuleRedeemer = module_redeemer
811+
812+ spending_transfer_module.spend_transfer_module.spend (
813+ mock.handler_token,
814+ mock.port_token,
815+ mock.module_token,
816+ mock.port_id,
817+ mock.channel_minting_policy_id,
818+ mock.voucher_minting_policy_id,
819+ None ,
820+ module_redeemer,
821+ mock.module_input.output_reference,
822+ transaction,
823+ )
824+ }
825+
715826test transfer_escrow_succeed () {
716827 let mock = setup ()
717828
0 commit comments