Java Binding :: ExerciseCommand - multiSubmit mode

Following @Leonid_Rozenberg lead on submit API i was able to implement a scenario in which a multi party submit is performed on an existing contract.

However, i face an “UNAUTHENTICATED” error although i made sure my tokens are up-to-date. I belive the root cause is one of the following bullets (code is shown below):

  • The choice receives a party and productId - Is the party suppose to be the contract’s owner?

  • The Exercise receives actAs and readAs which are currently set to the new created party (“dummyParty”) and the owner. Is this correct input? Should i populate both list with same parties?

private void exerciseCommandOnProduct(String contractId, ProductFields productFields, String multiPartyToken) {
        List<String> actAs     = Arrays.asList(damlProperties.getOwnerParty(), "dummyParty");
        List<String> readAs    = Arrays.asList(damlProperties.getOwnerParty(), "dummyParty");

        ArrayList<DamlRecord.Field> fields = new ArrayList<DamlRecord.Field>();
        fields.add(new DamlRecord.Field(new Party(damlProperties.getOwnerParty())));
        fields.add(new DamlRecord.Field(new Party(productFields.getProductCode())));

        DamlRecord choiceArgument = new DamlRecord(fields);

        ExerciseCommand command = new ExerciseCommand(TEMPLATE_ID, contractId, "CustomerCreatesPolicyRequest", choiceArgument);
        List<Command> commands = Collections.singletonList(command);

        final Single<Empty> emptySingle = client.
                getCommandSubmissionClient().
                submit(WORKFLOW_ID, APPLICATION_ID, UUID.randomUUID().toString(), actAs, readAs, commands, multiPartyToken);

        emptySingle.blockingGet();
    }

Thanks

UNAUTHENTICATED is an issue with your token. Either it’s not set or it’s invalid in some form (e.g. expired). I recommend to look at the ledger logs to see the issue.

Thanks @cocreature, where are the logs located?

Somewhat depends on your ledger setup, usually you either get a log file or it’s written to stdout.

Is your answer refer to DamlHub or sandbox?

I was thinking of self-hosted ledgers. For hub, you cannot get access directly. I’ll reach out to the hub team for help.

Appriciate it. Thanks

I believe you’re an enterprise user so if you want the logs pulled, can you open a support ticket with your ledger ID? We can pull the logs that way.

Additionally:

  • your token must authorize you to perform actions as the parties that you are trying to actAs/readAs; simply including them in your command submission request won’t be enough.
  • on Daml Hub, we currently only allow multiparty tokens that include a reference to a party and a readAs for the so-called “public” party (see this post How to fetch a contract from dumlhub Ledger via Java - #20 by Leonid_Rozenberg)