java-bigchaindb-driver icon indicating copy to clipboard operation
java-bigchaindb-driver copied to clipboard

Multiple Inputs will fail transaction

Open omnibasissupport opened this issue 6 years ago • 0 comments

If you try to combine assets as described in https://www.bigchaindb.com/developers/guide/tutorial-token-launch/ it will fail.

The code only update first input fullfillment. See this.transaction.getInputs().get(0) .setFullFillment(Base64.encodeBase64URLSafeString(fulfillment.getEncoded()));

We fixed in upcoming release of C# driver https://github.com/Omnibasis/bigchaindb-csharp-driver

Here is a solution to proper sign fulfillments.

// based on javascript signTransaction
                    foreach (Input input in this.transaction.Inputs)
                    {
                        var transactionUniqueFulfillment = "";
                        if (input.FulFills != null)
                        {
                            FulFill fulfill = input.FulFills;
                            transactionUniqueFulfillment = jsonOrdered + fulfill.TransactionId + fulfill.OutputIndex.ToString();
                        } else
                        {
                            transactionUniqueFulfillment = jsonOrdered;
                        }
                        var transactionHash = DriverUtils.getSha3HashHex(transactionUniqueFulfillment);
                        var b = Utils.StringToByteArray(transactionHash);
                        var sig = algorithm.Sign(key, b);
                        Ed25519Sha256Fulfillment ff = new Ed25519Sha256Fulfillment(this.publicKey, sig);
                        input.FulFillment = Base64UrlEncoder.Encode(ff.Encoded);
                    }

omnibasissupport avatar Oct 30 '19 01:10 omnibasissupport