Skip to content

Incorrect datum for fetchUtxos() with Koios provider #612

@mpizenberg

Description

@mpizenberg

Summary

I was facing a missing required datum in the UPLC offline evaluator for a datum this IS present inline by value in the corresponding spent UTxO. So I’ve looked for the reason and it seems this error only happens when I use Koios as the provider for the offline evaluator:

new MeshTxBuilder({
  evaluator: new OfflineEvaluator(koios, "preview"),
  ...

If I change the provider by blockfrost inside the OfflineEvaluator constructor, then everything works.

So I’ve dig a little in the code, and it seems the faulty function is fetchUTxOs(), called inside the evaluateTx() function of offline-evaluator.ts:

...
const txHashesSet = new Set(inputsToResolve.map((input) => input.txHash));
for (const txHash of txHashesSet) {
  const utxos = await this.fetcher.fetchUTxOs(txHash);            // HERE
  for (const utxo of utxos) {
    if (utxo)
      if (
        inputsToResolve.find(
          (input) =>
            input.txHash === txHash &&
            input.outputIndex === utxo.input.outputIndex,
        )
      ) {
        additionalUtxos.push(utxo);
        foundUtxos.add(`${utxo.input.txHash}:${utxo.input.outputIndex}`);
      }
  }
}
...

Steps to reproduce the bug

Create a Tx spending a utxo with an inline datum, and use the offline evaluator, with Koios configured as a fetcher.

Actual Result

The offline uplc vm says that the inline datum does not exist.

Expected Result

The fetched and decoded utxos should contain the inline datum, so that the offline uplc vm is aware of it.

SDK version

1.9.0-beta.37 with the fix in #608

Environment type

  • Node.js
  • Browser
  • Browser Extension
  • Other

Environment details

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions