Venkatesh Sorapalli
Venkatesh Sorapalli

Reputation: 41

INDY Error 212 while executing createPairwise

I am trying to execute createPairwise function of indy-sdk package.

It throws an INDY Error 212 => WalletItemNotFound. (I also executed createAndStoreMyDid function)

Here is my code

let [myDid, myVerkey] = await sdk.createAndStoreMyDid(await indy.wallet.get(), {});

let theirVerkey = await sdk.keyForDid(await indy.pool.get(), await indy.wallet.get(), theirDid);

let meta = JSON.stringify({
    theirEndpointDid: theirEndpointDid,
    verified: false // Indicates that the owner of the agent has confirmed they want to stay connected with this person.
});

//FIXME: Check to see if pairwise exists
await sdk.createPairwise(await indy.wallet.get(), theirDid, myDid, meta);

Can anybody help me out?

Upvotes: 0

Views: 703

Answers (1)

Patrik Stas
Patrik Stas

Reputation: 2082

In your code, there's actually 2 places where IndySDK 1.11.1 can throw 212 WalletItemNotFound.

1. The first is on this line:

let theirVerkey = await sdk.keyForDid(await indy.pool.get(), await indy.wallet.get(), theirDid);

IndySDK will first try to see if the DID under variable theirDid is not one of your DIDs, stored in your wallet. If no, it will try to find this DID on the ledger. If it's still not found, it will throw WalletItemNotFound. You can check out this behaviour in the IndySDK Rust code here:

https://github.com/hyperledger/indy-sdk/blob/v1.11.1/libindy/src/commands/did.rs#L331

2. However I assume this is not actually your case and you having this error coming out from

wait sdk.createPairwise(await indy.wallet.get(), theirDid, myDid, meta);

If you look how is this method implemented in Rust

https://github.com/hyperledger/indy-sdk/blob/v1.11.1/libindy/src/commands/pairwise.rs#L84

you will see that it's calling get_indy_record for both theirDid and myDid you've supplied. Hence you can't create pairwise record without having both DIDs stored in wallet first. You can assure your wallet contains theirDid by calling storeTheirDid method. In

sdk.storeTheirDid(wh, {did:'V4SGRU86Z58d6TV7PBUe6f', verkey: 'GJ1SzoWzavQYfNL9XkaJdrQejfztN4XqdsiV4ct3LXKL'} )

After calling this, you will be able to call createPairwise between you and them without an issue.

IndySDK version / caching note

I think you might be using some older version of IndySDK. In IndySDK 1.11.1 when keyForDid resolves something from ledger, it actually caches this data, so the code you've posted actually worked out of the box for me without an error.

Upvotes: 3

Related Questions