我正在尝试执行indy-sdk包的createPairwise函数。
它抛出一个 INDY 错误212=>WalletItemNotFound。 (我还执行了createAndStoreMyDid函数(
这是我的代码
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);
有人可以帮助我吗?
在你的代码中,实际上有 2 个地方IndySDK 1.11.1
可以抛出212 WalletItemNotFound
。
1.第一行是:
let theirVerkey = await sdk.keyForDid(await indy.pool.get(), await indy.wallet.get(), theirDid);
IndySDK将首先尝试查看变量theirDid
下的DID是否不是存储在钱包中的DID。如果没有,它将尝试在账本上找到这个 DID。如果仍然没有找到,它将抛出WalletItemNotFound。您可以在 IndySDK Rust 代码中查看此行为:
https://github.com/hyperledger/indy-sdk/blob/v1.11.1/libindy/src/commands/did.rs#L331
2.但是,我认为这实际上不是您的情况,并且您有此错误来自
wait sdk.createPairwise(await indy.wallet.get(), theirDid, myDid, meta);
如果你看看这个方法是如何在 Rust 中实现的
https://github.com/hyperledger/indy-sdk/blob/v1.11.1/libindy/src/commands/pairwise.rs#L84
您将看到它正在为您提供的theirDid
和myDid
调用get_indy_record
。因此,如果不先将两个 DID 都存储在钱包中,则无法创建成对记录。您可以通过调用storeTheirDid
方法来确保您的钱包包含theirDid
。在
sdk.storeTheirDid(wh, {did:'V4SGRU86Z58d6TV7PBUe6f', verkey: 'GJ1SzoWzavQYfNL9XkaJdrQejfztN4XqdsiV4ct3LXKL'} )
拨打此电话后,您将能够毫无问题地在您和他们之间拨打createPairwise
。
印地SDK版本/缓存说明
我认为您可能正在使用一些旧版本的IndySDK。在 IndySDK1.11.1
中,当keyForDid
从账本解析某些内容时,它实际上会缓存这些数据,因此您发布的代码实际上对我来说开箱即用,没有错误。