Skip to content

Issues with moving a utxo locked in always_succeeds contract #678

@devMoney71

Description

@devMoney71

I am a beginner who just started developing with Cardano.
I am writing a javascript code to move a utxo locked in the trivial.always_succeeds contract (preprod: addr_test1wquu2gxsvfa2lfeg7ljd6yq59dmuy4up8sm02l3vhz8h9fg4q3ckq), using a reference UTXO.
I managed to sent a utxo with datum "TEST" to the contract, but failed to withdraw it to my address.

Here is a part of my code.

Create a TransactionBuilder and a TxInputsBuilder:

let txBuilder = CardanoWasm.TransactionBuilder.new(txBuilderCfg);
let txInputsBuilder = CardanoWasm.TxInputsBuilder.new();

Create a TransactionInput for a transaction, and also a reference TransactionInput :

let txIn = CardanoWasm.TransactionInput.new(
	CardanoWasm.TransactionHash.from_bytes(Buffer.from(utxoHash, 'hex')),
	parseInt(utxoIndex, 10)
);
let txInRef = CardanoWasm.TransactionInput.new(
	CardanoWasm.TransactionHash.from_bytes(Buffer.from(referenceUtxoHash, 'hex')),
	parseInt(referenceUtxoIndex, 10)
);

And build the input of transction:

txInputsBuilder.add_plutus_script_input(
	plutusWitness,
	txIn,
	CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(utxoAmount))
);
txBuilder.set_inputs(txInputsBuilder);

Here plutusWitness is defined as follows:

let scriptHash = "39c520d0627aafa728f7e4dd10142b77c257813c36f57e2cb88f72a5";
let script = CardanoWasm.PlutusScriptSource.new_ref_input_with_lang_ver(
	CardanoWasm.ScriptHash.from_hex(scriptHash),
	txInRef,
	CardanoWasm.Language.new_plutus_v2()
);
let datum = CardanoWasm.DatumSource.new(CardanoWasm.PlutusData.new_bytes(Buffer.from("TEST", "utf-8")));
let redeemer = CardanoWasm.Redeemer.new(
	CardanoWasm.RedeemerTag.new_spend(),
	CardanoWasm.BigNum.from_str('0'),
	CardanoWasm.PlutusData.new_bytes(Buffer.from(datumStr, "utf-8")),
	CardanoWasm.ExUnits.new(
		CardanoWasm.BigNum.from_str("7000000"),
		CardanoWasm.BigNum.from_str("3000000000")
	)
);
let plutusWitness = CardanoWasm.PlutusWitness.new_with_ref(
    	script,
	datum,
	redeemer
);

In fact, I am not sure those variables are set correctly. The hash of the script is "39c520d0627aafa728f7e4dd10142b77c257813c36f57e2cb88f72a5", I found this hash at "https://preprod.cardanoscan.io/transaction/be8217d6682be1d1888ca112896345612f0d6dec4552970188a9d1cbcf47e17b?tab=utxo".

And then, I add collateral utxo.

let collateralBuilder = CardanoWasm.TxInputsBuilder.new();
let collateralInput = CardanoWasm.TransactionInput.new(
  CardanoWasm.TransactionHash.from_bytes(Buffer.from(collateralUtxo.tx_hash, 'hex')),
  parseInt(collateralUtxo.tx_index, 10)
);
collateralBuilder.add_input(
  CardanoWasm.Address.from_bech32(public_key),
  collateralInput,
  CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(collateral_quantity))
);
txBuilder.set_collateral(collateralBuilder);

After that, I use calc_script_data_hash:

let costModel = CardanoWasm.TxBuilderConstants.plutus_vasil_cost_models().get(CardanoWasm.Language.new_plutus_v2());
let costModels = CardanoWasm.Costmdls.new();
costModels.insert(CardanoWasm.Language.new_plutus_v2(), costModel);
txBuilder.calc_script_data_hash(costModels);

Then, add change:
txBuilder.add_change_if_needed(CardanoWasm.Address.from_bech32(to));

And then, build tx:
let tx = txBuilder.build_tx();

And sign with payment_key (this is for collateral) and submit transaction using blockfrost api:

let txBytes = tx.to_bytes();
let signedTxBytes = signTransaction(txBytes, payment_key);
let result = await submitTransaction(signedTxBytes);

But got the following error.

{
  contents: {
    contents: {
      contents: {
        era: 'ShelleyBasedEraBabbage',
        error: [
          {
            contents: {
              contents: {
                contents: [
                  [
                    {
                      kind: 'AlonzoSpending',
                      value: {
                        item: '542077cd26ff83bc5de764be8aa3dfa985f8479c983153bbcc7ee690101cbc98#TxIx 0'
                      }
                    },
                    'dc90c02719b5b3b1d56b5f22a39225dd9da5cf4d435c048a0c8657b4'
                  ]
                ],
                tag: 'MissingRedeemers'
              },
              tag: 'AlonzoInBabbageUtxowPredFailure'
            },
            tag: 'UtxowFailure'
          },
          {
            contents: {
              contents: {
                contents: [
                  'd6483414bef2d593b18792aeb898cd6c2d88933d30e49ea234cdba87219ea719',
                  '75be5e37c2a7f07027713f0cf852aabedb84498d31182e96a4d2390dc2817d3f'
                ],
                tag: 'PPViewHashesDontMatch'
              },
              tag: 'AlonzoInBabbageUtxowPredFailure'
            },
            tag: 'UtxowFailure'
          },
          {
            contents: {
              contents: 'AlonzoInBabbageUtxoPredFailure (UtxosFailure (CollectErrors [NoRedeemer (AlonzoSpending (TxIn (TxId {unTxId = SafeHash "542077cd26ff83bc5de764be8aa3dfa985f8479c983153bbcc7ee690101cbc98"}) (TxIx 0)))]))',
              tag: 'UtxoFailure'
            },
            tag: 'UtxowFailure'
          }
        ],
        kind: 'ShelleyTxValidationError'
      },
      tag: 'TxValidationErrorInCardanoMode'
    },
    tag: 'TxCmdTxSubmitValidationError'
  },
  tag: 'TxSubmitFail'
}

I would appreciate any help you can provide on this issue. Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions