MissingVKeyWitnessesUTXOW when submitting

Hello,

I am following the tutorial for submitting an NFT. I was able to do this successfully on TestNet, so now I am moving on to the mainnet. This is the link to the tutorial I am following: https://developers.cardano.org/docs/native-tokens/minting-nfts/

However, I have a slightly different setup with mainnet and when I get to the submit portion, I receive the following error:
Command failed: transaction submit Error: Error while submitting tx: ShelleyTxValidationError ShelleyBasedEraAlonzo (ApplyTxError [UtxowFailure (WrappedShelleyEraFailure (MissingVKeyWitnessesUTXOW (WitHashes (fromList [KeyHash "16cec1ef722975c05df1bd2ded5a0c060a306dc1ef0ebb93d8e0f6d4"]))))])

From what I’ve researched, the “MissingVKeyWitnessesUTXOW” means I am missing a necessary --signing-key-file.

However, the only signing key file I have is the policy/policy.skey. I do not have the corresponding “payment.skey” per the tutorial. The reason for this is that I am using an address given to me by my colleague that he generated from his Yoroi wallet. It has the sufficient funds.

Is there a way around this or is there something I’m missing in the process?

Thank you in advance for any assistance.

Without knowing the details of the tutorial, I’d say you need to witness with the signing key for the NFT policy and the signing key for the address that pays the Tx fees.

Hello,

Thanks for the response.

I agree. I think this is where the problem lies. I don’t have the signing key for the address that pays the Tx fees. It is an address given to me to use and was generated by Yoroi wallet. Is there a way for my colleague to get the corresponding signing key from their wallet? I asked them, but they are not sure.

Per the tutorial, I have a “payment.skey” file which is a signing key. Of course, this is not the signing key associated with the address I’m using.

I ended up creating a my own address and having the funds transferred to it. With this method, I was able to submit my NFT because I have the respective signing key. Of course, this is a workaround and I assume there has to be proper way to do this.

When I am creating the “matx.raw” file, I notice there is a flag --witness-override 2. Is this related? I was guessing that if I change this to 1 and then use the following command to sign, maybe submission would work?:

cardano-cli transaction sign --signing-key-file policy/policy.skey --mainnet --tx-body-file matx.raw  --out-file matx.signed

I don’t quite understand. If you have the policy signing key (i.e. only you can mint/burn tokens with that policy) why can you not also pay the Tx fees to do so.

If it is really so that you want somebody else to pay the Tx fees to mint tokens for which you hold the policy key, then you can create the Tx and witness it first, then you send it to your friend, who also witnesses the Tx with his payment.skey and then either of you can submit the Tx to the network.

I don’t know about specific wallet tooling and their support (or lack of support) for this use case - with the cardano-cli (I’m pretty sure it) it would work like that.

Witnesses should map to the number of addresses in the TxIn and TxOut.

You will need need the signature from an address you have the skey of to cover the transaction there is no getting around this. If you don’t have one I would set one up with the cli and transfer the needed funds into it for the transaction.

One of the other things I’ve noticed that can throw this error are actually related to the before or after tags associated with a policy.

Thank you both “tomdx” and “JustinP”.

The answer I required is a combination of both of your suggestions.

The issue came down to my understanding of the concept of witness and the signing key process.

My final solution was:

  1. Create an address for which I have the corresponding “payment.skey.”
  2. My colleague then transferred the corresponding funds required to mint.
  3. I minted the NFT and submitted it.

Thank you again for the assistance.