InsufficientFeeAmount Error when dealing with predicate

I am trying to send a tx request that will send the asset in the predicate back to a owner of the asset. I try it with this predicate code. Here is how I try to do it with fuel ts-sdk v0.75.0:

    const req = new ScriptTransactionRequest({
      gasPrice: 1,
      gasLimit: 10000
    });
    req.addCoinInput(walletCoin)
    req.addPredicateResource(predicateCoin, predicate)
    req.addChangeOutput(wallet.address, BaseAssetId)
    req.addCoinOutput(wallet.address, 1000, BaseAssetId)

    const tx2 = await wallet.sendTransaction(req)
    await tx2.waitForResult();

But before approving the tx on the extension, I get this error:

> Error: {"Validity(InsufficientFeeAmount":[{"errorMessage":"Validity(InsufficientFeeAmount { expected: 2383, provided: 2000 })"}]}

@fsociety Thanks for notifying us about this.

I will investigate the issue.

3 Likes

Hi @Torres-ssf! Any update on this?

@fsociety sorry for the late response.

I will investigate it this week.

In the mean time, can you use this approach instead when preparing the TX request:

    const predicateAmount = 1000;

    const req = new ScriptTransactionRequest({
      gasPrice: 1,
    });

    const predicateCoin = await predicate.getResourcesToSpend([[predicateAmount, BaseAssetId]]);

    req.addPredicateResources(predicateCoin, predicate);
    req.addCoinOutput(wallet.address, predicateAmount, BaseAssetId);

    const { gasUsed, requiredQuantities, maxFee } = await wallet.provider.getTransactionCost(req);

    req.gasLimit = gasUsed;

    await wallet.fund(req, requiredQuantities, maxFee);

    const tx2 = await wallet.sendTransaction(req);
    await tx2.waitForResult();

When I submitted the Tx like this, It seemed I was running into another error that appears to be specific to your predicate code.

I am still validating this, but I am not sure if this revert code can be used within a Predicate.

Have you succeeded in using this predicate on Rust SDK?

I did not try with Rust sdk