0

Indy Getting Startedに示されているように、現在、失効レジストリ定義 (revRegDef) を Hyperledger Indy プールに書き込もうとしています。ワークフローは次のようになります。

  1. スキーマを作成する
  2. schemaId を使用して、資格情報定義 (credDef) を作成します。
  3. credDefId を使用して、revRegDef を作成します。

Java を使用する必要があるため、元帳に適切な要求をJava サンプルに追加し、変更したバージョンをここにアップロードしました。

スキーマと credDef の作成は正常に機能しますが、最後の要求を送信すると、次のエラー メッセージが表示されます。

reason -> client request invalid: InvalidClientRequest("Format of credDefId field is not acceptable. 
Expected: 'did:marker:signature_type:schema_ref' or 'did:marker:signature_type:schema_ref:tag'",)

この時点で、上記の credDefId は次のようTh7MpTaRZVRYnPiabds81Y:3:CL:Th7MpTaRZVRYnPiabds81Y:2:gvt:1.0:Tag1 になります。Th7MpTaRZVRYnPiabds81Y:2:gvt:1.0

明らかに、前述のパターンは満たされていませんが、関数はこのようにLedger.buildCredDefReq()返すため、正しいと予想されます。credDefId

4

1 に答える 1

0

編集:私の古い答えはうまくいきましたが、それは回避策と完全なbs..以下は、資格情報スキーマ、資格情報定義、および失効レジストリ定義を作成する正しい方法である必要があります。

// Create Credential Schema
String name = "schema_name";
String schemaAttrs = new JSONArray().put("name").put("age").toString();
AnoncredsResults.IssuerCreateSchemaResult schema =
        Anoncreds.issuerCreateSchema(verinym, name, "1.0", schemaAttrs).get();
String schemaId = schema.getSchemaId();
String schemaJson = schema.getSchemaJson();
JSONObject schemaRes = new JSONObject(Ledger.signAndSubmitRequest(PoolUtils.getInstance(), wallet, verinym,
        Ledger.buildSchemaRequest(verinym, schemaJson).get()
).get());
int schemaSeqNo = schemaRes.getJSONObject("result").getJSONObject("txnMetadata").getInt("seqNo");
schemaJson = new JSONObject(schemaJson).put("seqNo", schemaSeqNo).toString();

// Create Credential Definition
AnoncredsResults.IssuerCreateAndStoreCredentialDefResult credDef =
        Anoncreds.issuerCreateAndStoreCredentialDef(
                wallet, verinym, schemaJson, "tag", null,
                new JSONObject().put("support_revocation", true).toString()
        ).get();

// creating credDef req and sending it to the ledger
JSONObject credDefRes = new JSONObject(
        Ledger.signAndSubmitRequest(
                PoolUtils.getInstance(), wallet, verinym,
                Ledger.buildCredDefRequest(verinym, credDef.getCredDefJson()).get()
        ).get()
);
int credSeqNo = credDefRes.getJSONObject("result").getJSONObject("txnMetadata").getInt("seqNo");

// Create Revocation Registry Definition
String tailsWriterConfig = new JSONObject().put("base_dir", "/tmp/indy_tails").put("uri_pattern", "").toString();
BlobStorageWriter tails = BlobStorageWriter.openWriter("default", tailsWriterConfig).get();
AnoncredsResults.IssuerCreateAndStoreRevocRegResult revocRegDef = Anoncreds.issuerCreateAndStoreRevocReg(
        wallet, verinym, null, "contractDef", credDefId,
        "{}", tails
).get();
JSONObject revocRegDefRes = new JSONObject(
        Ledger.signAndSubmitRequest(PoolUtils.getInstance(), wallet, verinym,
                Ledger.buildRevocRegDefRequest(verinym, revocRegDef.getRevRegDefJson()).get()
        ).get());
revocRegDefSeqNo = revocRegDefRes.getJSONObject("result").getJSONObject("txnMetadata").getInt("seqNo");

学習は、元帳が定義の作成に重要な値を返すことです

さらに、最初の失効レジストリ エントリを作成する必要があることはどこにも言及されていません。

// Create initial revocation entry
JSONObject revocRegEntryRes = new JSONObject(Ledger.signAndSubmitRequest(PoolUtils.getInstance(), wallet, verinym,
Ledger.buildRevocRegEntryRequest(verinym, revocRegDef.getRevRegId(),
"CL_ACCUM", revocRegDef.getRevRegEntryJson()).get()).get());
于 2021-09-03T08:19:16.867 に答える