cardano-serialization-lib icon indicating copy to clipboard operation
cardano-serialization-lib copied to clipboard

Issues with moving a utxo locked in always_succeeds contract

Open devMoney71 opened this issue 1 year ago • 6 comments

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.

devMoney71 avatar Jul 23 '24 05:07 devMoney71