1
0
mirror of https://github.com/bigchaindb/js-bigchaindb-driver.git synced 2024-11-22 01:36:56 +01:00

fix: add delegateSignatureAsync method

Signed-off-by: getlarge <ed@getlarge.eu>
This commit is contained in:
getlarge 2021-03-11 13:04:17 +01:00
parent 76c877c649
commit 71a231a50a
No known key found for this signature in database
GPG Key ID: E4E13243600F9566
4 changed files with 181 additions and 132 deletions

224
API.md
View File

@ -48,39 +48,41 @@
- [Parameters][44] - [Parameters][44]
- [delegateSignTransaction][45] - [delegateSignTransaction][45]
- [Parameters][46] - [Parameters][46]
- [ccJsonLoad][47] - [delegateSignTransactionAsync][47]
- [Parameters][48] - [Parameters][48]
- [ccJsonify][49] - [ccJsonLoad][49]
- [Parameters][50] - [Parameters][50]
- [ccJsonify][51]
- [Parameters][52]
## Ed25519Keypair ## Ed25519Keypair
[src/Ed25519Keypair.js:16-21][51] [src/Ed25519Keypair.js:16-21][53]
Type: [Object][52] Type: [Object][54]
### Parameters ### Parameters
- `seed` **[Buffer][53]?** A seed that will be used as a key derivation function - `seed` **[Buffer][55]?** A seed that will be used as a key derivation function
### Properties ### Properties
- `publicKey` **[string][54]** - `publicKey` **[string][56]**
- `privateKey` **[string][54]** - `privateKey` **[string][56]**
## Connection ## Connection
[src/connection.js:21-201][55] [src/connection.js:21-199][57]
### Parameters ### Parameters
- `nodes` - `nodes`
- `headers` **[Object][52]** Common headers for every request (optional, default `{}`) - `headers` **[Object][54]** Common headers for every request (optional, default `{}`)
- `timeout` **float** Optional timeout in secs (optional, default `DEFAULT_TIMEOUT`) - `timeout` **float** Optional timeout in secs (optional, default `DEFAULT_TIMEOUT`)
### getBlock ### getBlock
[src/connection.js:79-85][56] [src/connection.js:79-85][58]
#### Parameters #### Parameters
@ -88,7 +90,7 @@ Type: [Object][52]
### getTransaction ### getTransaction
[src/connection.js:90-96][57] [src/connection.js:90-96][59]
#### Parameters #### Parameters
@ -96,7 +98,7 @@ Type: [Object][52]
### listBlocks ### listBlocks
[src/connection.js:102-108][58] [src/connection.js:102-108][60]
#### Parameters #### Parameters
@ -105,7 +107,7 @@ Type: [Object][52]
### listOutputs ### listOutputs
[src/connection.js:114-126][59] [src/connection.js:114-126][61]
#### Parameters #### Parameters
@ -114,7 +116,7 @@ Type: [Object][52]
### listTransactions ### listTransactions
[src/connection.js:132-139][60] [src/connection.js:132-139][62]
#### Parameters #### Parameters
@ -123,7 +125,7 @@ Type: [Object][52]
### postTransaction ### postTransaction
[src/connection.js:144-146][61] [src/connection.js:144-146][63]
#### Parameters #### Parameters
@ -131,7 +133,7 @@ Type: [Object][52]
### postTransactionSync ### postTransactionSync
[src/connection.js:151-156][62] [src/connection.js:151-156][64]
#### Parameters #### Parameters
@ -139,7 +141,7 @@ Type: [Object][52]
### postTransactionAsync ### postTransactionAsync
[src/connection.js:162-167][63] [src/connection.js:161-166][65]
#### Parameters #### Parameters
@ -147,7 +149,7 @@ Type: [Object][52]
### postTransactionCommit ### postTransactionCommit
[src/connection.js:173-178][64] [src/connection.js:171-176][66]
#### Parameters #### Parameters
@ -155,7 +157,7 @@ Type: [Object][52]
### searchAssets ### searchAssets
[src/connection.js:183-189][65] [src/connection.js:181-187][67]
#### Parameters #### Parameters
@ -163,7 +165,7 @@ Type: [Object][52]
### searchMetadata ### searchMetadata
[src/connection.js:194-200][66] [src/connection.js:192-198][68]
#### Parameters #### Parameters
@ -171,65 +173,65 @@ Type: [Object][52]
## Transaction ## Transaction
[src/transaction.js:16-280][67] [src/transaction.js:16-288][69]
Construct Transactions Construct Transactions
### serializeTransactionIntoCanonicalString ### serializeTransactionIntoCanonicalString
[src/transaction.js:22-29][68] [src/transaction.js:22-29][70]
Canonically serializes a transaction into a string by sorting the keys Canonically serializes a transaction into a string by sorting the keys
#### Parameters #### Parameters
- `transaction` - `transaction`
- `null` **[Object][52]** (transaction) - `null` **[Object][54]** (transaction)
Returns **[string][54]** a canonically serialized Transaction Returns **[string][56]** a canonically serialized Transaction
### makeCreateTransaction ### makeCreateTransaction
[src/transaction.js:80-87][69] [src/transaction.js:80-87][71]
Generate a `CREATE` transaction holding the `asset`, `metadata`, and `outputs`, to be signed by Generate a `CREATE` transaction holding the `asset`, `metadata`, and `outputs`, to be signed by
the `issuers`. the `issuers`.
#### Parameters #### Parameters
- `asset` **[Object][52]** Created asset's data - `asset` **[Object][54]** Created asset's data
- `metadata` **[Object][52]** Metadata for the Transaction - `metadata` **[Object][54]** Metadata for the Transaction
- `outputs` **[Array][70]&lt;[Object][52]>** Array of Output objects to add to the Transaction. - `outputs` **[Array][72]&lt;[Object][54]>** Array of Output objects to add to the Transaction.
Think of these as the recipients of the asset after the transaction. Think of these as the recipients of the asset after the transaction.
For `CREATE` Transactions, this should usually just be a list of For `CREATE` Transactions, this should usually just be a list of
Outputs wrapping Ed25519 Conditions generated from the issuers' public Outputs wrapping Ed25519 Conditions generated from the issuers' public
keys (so that the issuers are the recipients of the created asset). keys (so that the issuers are the recipients of the created asset).
- `issuers` **...[Array][70]&lt;[string][54]>** Public key of one or more issuers to the asset being created by this - `issuers` **...[Array][72]&lt;[string][56]>** Public key of one or more issuers to the asset being created by this
Transaction. Transaction.
Note: Each of the private keys corresponding to the given public Note: Each of the private keys corresponding to the given public
keys MUST be used later (and in the same order) when signing the keys MUST be used later (and in the same order) when signing the
Transaction (`signTransaction()`). Transaction (`signTransaction()`).
Returns **[Object][52]** Unsigned transaction -- make sure to call signTransaction() on it before Returns **[Object][54]** Unsigned transaction -- make sure to call signTransaction() on it before
sending it off! sending it off!
### makeEd25519Condition ### makeEd25519Condition
[src/transaction.js:96-107][71] [src/transaction.js:96-101][73]
Create an Ed25519 Cryptocondition from an Ed25519 public key Create an Ed25519 Cryptocondition from an Ed25519 public key
to put into an Output of a Transaction to put into an Output of a Transaction
#### Parameters #### Parameters
- `publicKey` **[string][54]** base58 encoded Ed25519 public key for the recipient of the Transaction - `publicKey` **[string][56]** base58 encoded Ed25519 public key for the recipient of the Transaction
- `json` **[boolean][72]** If true returns a json object otherwise a crypto-condition type (optional, default `true`) - `json` **[boolean][74]** If true returns a json object otherwise a crypto-condition type (optional, default `true`)
Returns **[Object][52]** Ed25519 Condition (that will need to wrapped in an Output) Returns **[Object][54]** Ed25519 Condition (that will need to wrapped in an Output)
### makeOutput ### makeOutput
[src/transaction.js:117-137][73] [src/transaction.js:111-131][75]
Create an Output from a Condition. Create an Output from a Condition.
Note: Assumes the given Condition was generated from a Note: Assumes the given Condition was generated from a
@ -237,41 +239,41 @@ single public key (e.g. a Ed25519 Condition)
#### Parameters #### Parameters
- `condition` **[Object][52]** Condition (e.g. a Ed25519 Condition from `makeEd25519Condition()`) - `condition` **[Object][54]** Condition (e.g. a Ed25519 Condition from `makeEd25519Condition()`)
- `amount` **[string][54]** Amount of the output (optional, default `'1'`) - `amount` **[string][56]** Amount of the output (optional, default `'1'`)
Returns **[Object][52]** An Output usable in a Transaction Returns **[Object][54]** An Output usable in a Transaction
### makeSha256Condition ### makeSha256Condition
[src/transaction.js:145-153][74] [src/transaction.js:139-143][76]
Create a Preimage-Sha256 Cryptocondition from a secret to put into an Output of a Transaction Create a Preimage-Sha256 Cryptocondition from a secret to put into an Output of a Transaction
#### Parameters #### Parameters
- `preimage` **[string][54]** Preimage to be hashed and wrapped in a crypto-condition - `preimage` **[string][56]** Preimage to be hashed and wrapped in a crypto-condition
- `json` **[boolean][72]** If true returns a json object otherwise a crypto-condition type (optional, default `true`) - `json` **[boolean][74]** If true returns a json object otherwise a crypto-condition type (optional, default `true`)
Returns **[Object][52]** Preimage-Sha256 Condition (that will need to wrapped in an Output) Returns **[Object][54]** Preimage-Sha256 Condition (that will need to wrapped in an Output)
### makeThresholdCondition ### makeThresholdCondition
[src/transaction.js:162-176][75] [src/transaction.js:152-162][77]
Create an Sha256 Threshold Cryptocondition from threshold to put into an Output of a Transaction Create an Sha256 Threshold Cryptocondition from threshold to put into an Output of a Transaction
#### Parameters #### Parameters
- `threshold` **[number][76]** - `threshold` **[number][78]**
- `subconditions` **[Array][70]** (optional, default `[]`) - `subconditions` **[Array][72]** (optional, default `[]`)
- `json` **[boolean][72]** If true returns a json object otherwise a crypto-condition type (optional, default `true`) - `json` **[boolean][74]** If true returns a json object otherwise a crypto-condition type (optional, default `true`)
Returns **[Object][52]** Sha256 Threshold Condition (that will need to wrapped in an Output) Returns **[Object][54]** Sha256 Threshold Condition (that will need to wrapped in an Output)
### makeTransferTransaction ### makeTransferTransaction
[src/transaction.js:199-220][77] [src/transaction.js:185-206][79]
Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills
the `fulfilledOutputs` of `unspentTransaction`. the `fulfilledOutputs` of `unspentTransaction`.
@ -279,26 +281,26 @@ the `fulfilledOutputs` of `unspentTransaction`.
#### Parameters #### Parameters
- `unspentOutputs` - `unspentOutputs`
- `outputs` **[Array][70]&lt;[Object][52]>** Array of Output objects to add to the Transaction. - `outputs` **[Array][72]&lt;[Object][54]>** Array of Output objects to add to the Transaction.
Think of these as the recipients of the asset after the transaction. Think of these as the recipients of the asset after the transaction.
For `TRANSFER` Transactions, this should usually just be a list of For `TRANSFER` Transactions, this should usually just be a list of
Outputs wrapping Ed25519 Conditions generated from the public keys of Outputs wrapping Ed25519 Conditions generated from the public keys of
the recipients. the recipients.
- `metadata` **[Object][52]** Metadata for the Transaction - `metadata` **[Object][54]** Metadata for the Transaction
- `unspentTransaction` **[Object][52]** Previous Transaction you have control over (i.e. can fulfill - `unspentTransaction` **[Object][54]** Previous Transaction you have control over (i.e. can fulfill
its Output Condition) its Output Condition)
- `OutputIndices` **...[number][76]** Indices of the Outputs in `unspentTransaction` that this - `OutputIndices` **...[number][78]** Indices of the Outputs in `unspentTransaction` that this
Transaction fulfills. Transaction fulfills.
Note that listed public keys listed must be used (and in Note that listed public keys listed must be used (and in
the same order) to sign the Transaction the same order) to sign the Transaction
(`signTransaction()`). (`signTransaction()`).
Returns **[Object][52]** Unsigned transaction -- make sure to call signTransaction() on it before Returns **[Object][54]** Unsigned transaction -- make sure to call signTransaction() on it before
sending it off! sending it off!
### signTransaction ### signTransaction
[src/transaction.js:233-257][78] [src/transaction.js:219-243][80]
Sign the given `transaction` with the given `privateKey`s, returning a new copy of `transaction` Sign the given `transaction` with the given `privateKey`s, returning a new copy of `transaction`
that's been signed. that's been signed.
@ -307,42 +309,56 @@ an exercise for the user.
#### Parameters #### Parameters
- `transaction` **[Object][52]** Transaction to sign. `transaction` is not modified. - `transaction` **[Object][54]** Transaction to sign. `transaction` is not modified.
- `privateKeys` **...[string][54]** Private keys associated with the issuers of the `transaction`. - `privateKeys` **...[string][56]** Private keys associated with the issuers of the `transaction`.
Looped through to iteratively sign any Input Fulfillments found in Looped through to iteratively sign any Input Fulfillments found in
the `transaction`. the `transaction`.
Returns **[Object][52]** The signed version of `transaction`. Returns **[Object][54]** The signed version of `transaction`.
### delegateSignTransaction ### delegateSignTransaction
[src/transaction.js:266-279][79] [src/transaction.js:252-265][81]
Delegate signing of the given `transaction` returning a new copy of `transaction` Delegate signing of the given `transaction` returning a new copy of `transaction`
that's been signed. that's been signed.
#### Parameters #### Parameters
- `transaction` **[Object][52]** Transaction to sign. `transaction` is not modified. - `transaction` **[Object][54]** Transaction to sign. `transaction` is not modified.
- `signFn` **[Function][80]** Function signing the transaction, expected to return the fulfillment. - `signFn` **[Function][82]** Function signing the transaction, expected to return the fulfillment.
Returns **[Object][52]** The signed version of `transaction`. Returns **[Object][54]** The signed version of `transaction`.
### delegateSignTransactionAsync
[src/transaction.js:274-287][83]
Delegate signing of the given `transaction` returning a new copy of `transaction`
that's been signed.
#### Parameters
- `transaction` **[Object][54]** Transaction to sign. `transaction` is not modified.
- `signFn` **[Function][82]** Function signing the transaction, expected to resolve the fulfillment.
Returns **[Promise][84]&lt;[Object][54]>** The signed version of `transaction`.
## ccJsonLoad ## ccJsonLoad
[src/utils/ccJsonLoad.js:14-44][81] [src/utils/ccJsonLoad.js:13-44][85]
Loads a crypto-condition class (Fulfillment or Condition) from a BigchainDB JSON object Loads a crypto-condition class (Fulfillment or Condition) from a BigchainDB JSON object
### Parameters ### Parameters
- `conditionJson` **[Object][52]** - `conditionJson` **[Object][54]**
Returns **cc.Condition** Ed25519 Condition (that will need to wrapped in an Output) Returns **cc.Condition** Ed25519 Condition (that will need to wrapped in an Output)
## ccJsonify ## ccJsonify
[src/utils/ccJsonify.js:12-65][82] [src/utils/ccJsonify.js:12-65][86]
Serializes a crypto-condition class (Condition or Fulfillment) into a BigchainDB-compatible JSON Serializes a crypto-condition class (Condition or Fulfillment) into a BigchainDB-compatible JSON
@ -350,7 +366,7 @@ Serializes a crypto-condition class (Condition or Fulfillment) into a BigchainDB
- `fulfillment` **cc.Fulfillment** base58 encoded Ed25519 public key for recipient of the Transaction - `fulfillment` **cc.Fulfillment** base58 encoded Ed25519 public key for recipient of the Transaction
Returns **[Object][52]** Ed25519 Condition (that will need to wrapped in an Output) Returns **[Object][54]** Ed25519 Condition (that will need to wrapped in an Output)
[1]: #ed25519keypair [1]: #ed25519keypair
@ -444,74 +460,82 @@ Returns **[Object][52]** Ed25519 Condition (that will need to wrapped in an Outp
[46]: #parameters-21 [46]: #parameters-21
[47]: #ccjsonload [47]: #delegatesigntransactionasync
[48]: #parameters-22 [48]: #parameters-22
[49]: #ccjsonify [49]: #ccjsonload
[50]: #parameters-23 [50]: #parameters-23
[51]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/Ed25519Keypair.js#L16-L21 "Source code on GitHub" [51]: #ccjsonify
[52]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object [52]: #parameters-24
[53]: https://nodejs.org/api/buffer.html [53]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/Ed25519Keypair.js#L16-L21 "Source code on GitHub"
[54]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String [54]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[55]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L21-L201 "Source code on GitHub" [55]: https://nodejs.org/api/buffer.html
[56]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L79-L85 "Source code on GitHub" [56]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
[57]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L90-L96 "Source code on GitHub" [57]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L21-L199 "Source code on GitHub"
[58]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L102-L108 "Source code on GitHub" [58]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L79-L85 "Source code on GitHub"
[59]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L114-L126 "Source code on GitHub" [59]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L90-L96 "Source code on GitHub"
[60]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L132-L139 "Source code on GitHub" [60]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L102-L108 "Source code on GitHub"
[61]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L144-L146 "Source code on GitHub" [61]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L114-L126 "Source code on GitHub"
[62]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L151-L156 "Source code on GitHub" [62]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L132-L139 "Source code on GitHub"
[63]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L162-L167 "Source code on GitHub" [63]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L144-L146 "Source code on GitHub"
[64]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L173-L178 "Source code on GitHub" [64]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L151-L156 "Source code on GitHub"
[65]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L183-L189 "Source code on GitHub" [65]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L161-L166 "Source code on GitHub"
[66]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/connection.js#L194-L200 "Source code on GitHub" [66]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L171-L176 "Source code on GitHub"
[67]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L16-L280 "Source code on GitHub" [67]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L181-L187 "Source code on GitHub"
[68]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L22-L29 "Source code on GitHub" [68]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/connection.js#L192-L198 "Source code on GitHub"
[69]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L80-L87 "Source code on GitHub" [69]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L16-L288 "Source code on GitHub"
[70]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array [70]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L22-L29 "Source code on GitHub"
[71]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L96-L107 "Source code on GitHub" [71]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L80-L87 "Source code on GitHub"
[72]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean [72]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
[73]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L117-L137 "Source code on GitHub" [73]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L96-L101 "Source code on GitHub"
[74]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L145-L153 "Source code on GitHub" [74]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
[75]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L162-L176 "Source code on GitHub" [75]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L111-L131 "Source code on GitHub"
[76]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number [76]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L139-L143 "Source code on GitHub"
[77]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L199-L220 "Source code on GitHub" [77]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L152-L162 "Source code on GitHub"
[78]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L233-L257 "Source code on GitHub" [78]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
[79]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/transaction.js#L266-L279 "Source code on GitHub" [79]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L185-L206 "Source code on GitHub"
[80]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function [80]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L219-L243 "Source code on GitHub"
[81]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/utils/ccJsonLoad.js#L14-L44 "Source code on GitHub" [81]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L252-L265 "Source code on GitHub"
[82]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/3c76d3bb21e8cac17c3ca69cb9bf31b7fbc115ae/src/utils/ccJsonify.js#L12-L65 "Source code on GitHub" [82]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
[83]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/transaction.js#L274-L287 "Source code on GitHub"
[84]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
[85]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/utils/ccJsonLoad.js#L13-L44 "Source code on GitHub"
[86]: https://github.com/bigchaindb/js-bigchaindb-driver/blob/76c877c649801f0a26351d03237e0b59c18bd3ef/src/utils/ccJsonify.js#L12-L65 "Source code on GitHub"

View File

@ -78,7 +78,7 @@
"buffer": "^6.0.3", "buffer": "^6.0.3",
"clone": "^2.1.2", "clone": "^2.1.2",
"core-js": "^3.9.1", "core-js": "^3.9.1",
"crypto-conditions": "2.1.1", "crypto-conditions": "2.1.2",
"decamelize": "^5.0.0", "decamelize": "^5.0.0",
"es6-promise": "^4.2.8", "es6-promise": "^4.2.8",
"fetch-ponyfill": "^7.1.0", "fetch-ponyfill": "^7.1.0",

View File

@ -38,13 +38,13 @@ export default class Transaction {
static makeTransactionTemplate() { static makeTransactionTemplate() {
const txTemplate = { const txTemplate = {
'id': null, id: null,
'operation': null, operation: null,
'outputs': [], outputs: [],
'inputs': [], inputs: [],
'metadata': null, metadata: null,
'asset': null, asset: null,
'version': '2.0', version: '2.0',
} }
return txTemplate return txTemplate
} }
@ -79,7 +79,7 @@ export default class Transaction {
*/ */
static makeCreateTransaction(asset, metadata, outputs, ...issuers) { static makeCreateTransaction(asset, metadata, outputs, ...issuers) {
const assetDefinition = { const assetDefinition = {
'data': asset || null, data: asset || null,
} }
const inputs = issuers.map((issuer) => Transaction.makeInputTemplate([issuer])) const inputs = issuers.map((issuer) => Transaction.makeInputTemplate([issuer]))
@ -95,15 +95,9 @@ export default class Transaction {
*/ */
static makeEd25519Condition(publicKey, json = true) { static makeEd25519Condition(publicKey, json = true) {
const publicKeyBuffer = base58.decode(publicKey) const publicKeyBuffer = base58.decode(publicKey)
const ed25519Fulfillment = new Ed25519Sha256() const ed25519Fulfillment = new Ed25519Sha256()
ed25519Fulfillment.setPublicKey(publicKeyBuffer) ed25519Fulfillment.setPublicKey(publicKeyBuffer)
return json ? ccJsonify(ed25519Fulfillment) : ed25519Fulfillment
if (json) {
return ccJsonify(ed25519Fulfillment)
}
return ed25519Fulfillment
} }
/** /**
@ -131,8 +125,8 @@ export default class Transaction {
getPublicKeys(condition.details) getPublicKeys(condition.details)
return { return {
condition, condition,
'amount': amount, amount,
'public_keys': publicKeys, public_keys: publicKeys,
} }
} }
@ -145,11 +139,7 @@ export default class Transaction {
static makeSha256Condition(preimage, json = true) { static makeSha256Condition(preimage, json = true) {
const sha256Fulfillment = new PreimageSha256() const sha256Fulfillment = new PreimageSha256()
sha256Fulfillment.setPreimage(Buffer.from(preimage)) sha256Fulfillment.setPreimage(Buffer.from(preimage))
return json ? ccJsonify(sha256Fulfillment) : sha256Fulfillment
if (json) {
return ccJsonify(sha256Fulfillment)
}
return sha256Fulfillment
} }
/** /**
@ -162,18 +152,13 @@ export default class Transaction {
static makeThresholdCondition(threshold, subconditions = [], json = true) { static makeThresholdCondition(threshold, subconditions = [], json = true) {
const thresholdCondition = new ThresholdSha256() const thresholdCondition = new ThresholdSha256()
thresholdCondition.setThreshold(threshold) thresholdCondition.setThreshold(threshold)
subconditions.forEach((subcondition) => { subconditions.forEach((subcondition) => {
// TODO: add support for Condition // TODO: add support for Condition
thresholdCondition.addSubfulfillment(subcondition) thresholdCondition.addSubfulfillment(subcondition)
// ? Should be thresholdCondition.addSubcondition(subcondition) // ? Should be thresholdCondition.addSubcondition(subcondition)
}) })
if (json) { return json ? ccJsonify(thresholdCondition) : thresholdCondition
return ccJsonify(thresholdCondition)
}
return thresholdCondition
} }
/** /**
@ -206,15 +191,15 @@ export default class Transaction {
const { tx, outputIndex } = { tx: unspentOutput.tx, outputIndex: unspentOutput.output_index } const { tx, outputIndex } = { tx: unspentOutput.tx, outputIndex: unspentOutput.output_index }
const fulfilledOutput = tx.outputs[outputIndex] const fulfilledOutput = tx.outputs[outputIndex]
const transactionLink = { const transactionLink = {
'output_index': outputIndex, output_index: outputIndex,
'transaction_id': tx.id, transaction_id: tx.id,
} }
return Transaction.makeInputTemplate(fulfilledOutput.public_keys, transactionLink) return Transaction.makeInputTemplate(fulfilledOutput.public_keys, transactionLink)
}) })
const assetLink = { const assetLink = {
'id': unspentOutputs[0].tx.operation === 'CREATE' ? unspentOutputs[0].tx.id id: unspentOutputs[0].tx.operation === 'CREATE' ? unspentOutputs[0].tx.id
: unspentOutputs[0].tx.asset.id : unspentOutputs[0].tx.asset.id
} }
return Transaction.makeTransaction('TRANSFER', assetLink, metadata, outputs, inputs) return Transaction.makeTransaction('TRANSFER', assetLink, metadata, outputs, inputs)
@ -278,4 +263,26 @@ export default class Transaction {
signedTx.id = sha256Hash(serializedSignedTransaction) signedTx.id = sha256Hash(serializedSignedTransaction)
return signedTx return signedTx
} }
/**
* Delegate signing of the given `transaction` returning a new copy of `transaction`
* that's been signed.
* @param {Object} transaction Transaction to sign. `transaction` is not modified.
* @param {Function} signFn Function signing the transaction, expected to resolve the fulfillment.
* @returns {Promise<Object>} The signed version of `transaction`.
*/
static async delegateSignTransactionAsync(transaction, signFn) {
const signedTx = clone(transaction)
const serializedTransaction =
Transaction.serializeTransactionIntoCanonicalString(transaction)
await Promise.all(signedTx.inputs.map(async (input, index) => {
const fulfillmentUri = await signFn(serializedTransaction, input, index)
input.fulfillment = fulfillmentUri
}))
const serializedSignedTransaction = Transaction.serializeTransactionIntoCanonicalString(signedTx)
signedTx.id = sha256Hash(serializedSignedTransaction)
return signedTx
}
} }

View File

@ -115,6 +115,24 @@ test('Delegated signature is correct', t => {
t.deepEqual(signCreateTransaction, delegatedSignCreateTransaction) t.deepEqual(signCreateTransaction, delegatedSignCreateTransaction)
}) })
test('Delegated async signature is correct', async t => {
const alice = new Ed25519Keypair()
const txCreate = Transaction.makeCreateTransaction(
{},
{},
[Transaction.makeOutput(Transaction.makeEd25519Condition(alice.publicKey))],
alice.publicKey
)
const signCreateTransaction = Transaction.signTransaction(txCreate, alice.privateKey)
const delegatedSignCreateTransaction = await Transaction.delegateSignTransactionAsync(
txCreate,
delegatedSignTransaction(alice)
)
t.deepEqual(signCreateTransaction, delegatedSignCreateTransaction)
})
test('CryptoConditions JSON load', t => { test('CryptoConditions JSON load', t => {
const publicKey = '4zvwRjXUKGfvwnParsHAS3HuSVzV5cA4McphgmoCtajS' const publicKey = '4zvwRjXUKGfvwnParsHAS3HuSVzV5cA4McphgmoCtajS'
const cond = ccJsonLoad({ const cond = ccJsonLoad({