mirror of
https://github.com/bigchaindb/js-bigchaindb-driver.git
synced 2025-02-14 21:10:32 +01:00
fulfills.txid => fulfills.transaction_id + tests
This commit is contained in:
parent
a14dbbaebd
commit
b8241589df
@ -21,6 +21,8 @@ import makeTransaction from './makeTransaction'
|
|||||||
* @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before
|
* @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before
|
||||||
* sending it off!
|
* sending it off!
|
||||||
*/
|
*/
|
||||||
|
// TODO: `outputs` should throw or include output in array if no array was
|
||||||
|
// passed
|
||||||
export default function makeCreateTransaction(asset, metadata, outputs, ...issuers) {
|
export default function makeCreateTransaction(asset, metadata, outputs, ...issuers) {
|
||||||
const assetDefinition = {
|
const assetDefinition = {
|
||||||
'data': asset || null,
|
'data': asset || null,
|
||||||
|
@ -2,6 +2,32 @@ import makeInputTemplate from './makeInputTemplate'
|
|||||||
import makeTransaction from './makeTransaction'
|
import makeTransaction from './makeTransaction'
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: Can we remove `export` here somehow, but still be able to import the
|
||||||
|
// function for tests?
|
||||||
|
export function _makeTransferTransaction(
|
||||||
|
unspentTransaction,
|
||||||
|
metadata,
|
||||||
|
outputs,
|
||||||
|
...fulfilledOutputs
|
||||||
|
) {
|
||||||
|
const inputs = fulfilledOutputs.map((outputIndex) => {
|
||||||
|
const fulfilledOutput = unspentTransaction.outputs[outputIndex]
|
||||||
|
const transactionLink = {
|
||||||
|
'output': outputIndex,
|
||||||
|
'transaction_id': unspentTransaction.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
return makeInputTemplate(fulfilledOutput.public_keys, transactionLink)
|
||||||
|
})
|
||||||
|
|
||||||
|
const assetLink = {
|
||||||
|
'id': unspentTransaction.operation === 'CREATE' ? unspentTransaction.id
|
||||||
|
: unspentTransaction.asset.id
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['TRANSFER', assetLink, metadata, outputs, inputs]
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
* Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills
|
* Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills
|
||||||
@ -22,26 +48,17 @@ import makeTransaction from './makeTransaction'
|
|||||||
* @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before
|
* @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before
|
||||||
* sending it off!
|
* sending it off!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
// - Make `metadata` optional argument
|
||||||
|
// - Rename `fulfilledOutputs`, e.g. inputs
|
||||||
|
// TODO: `outputs` should throw or include output in array if no array was
|
||||||
|
// passed
|
||||||
export default function makeTransferTransaction(
|
export default function makeTransferTransaction(
|
||||||
unspentTransaction,
|
unspentTransaction,
|
||||||
metadata,
|
metadata,
|
||||||
outputs,
|
outputs,
|
||||||
...fulfilledOutputs
|
...fulfilledOutputs
|
||||||
) {
|
) {
|
||||||
const inputs = fulfilledOutputs.map((outputIndex) => {
|
return makeTransaction(..._makeTransferTransaction(...arguments))
|
||||||
const fulfilledOutput = unspentTransaction.outputs[outputIndex]
|
|
||||||
const transactionLink = {
|
|
||||||
'output': outputIndex,
|
|
||||||
'transaction_id': unspentTransaction.id,
|
|
||||||
}
|
|
||||||
|
|
||||||
return makeInputTemplate(fulfilledOutput.public_keys, transactionLink)
|
|
||||||
})
|
|
||||||
|
|
||||||
const assetLink = {
|
|
||||||
'id': unspentTransaction.operation === 'CREATE' ? unspentTransaction.id
|
|
||||||
: unspentTransaction.asset.id
|
|
||||||
}
|
|
||||||
|
|
||||||
return makeTransaction('TRANSFER', assetLink, metadata, outputs, inputs)
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,27 @@
|
|||||||
import test from 'ava'
|
import test from 'ava'
|
||||||
import { Transaction } from '../../src'
|
import { Transaction, Ed25519Keypair } from '../../src'
|
||||||
|
import { _makeTransferTransaction } from '../../src/transaction/makeTransferTransaction'
|
||||||
|
import makeInputTemplate from '../../src/transaction/makeInputTemplate'
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: Find out if ava has something like conftest, if so put this there.
|
||||||
|
const alice = new Ed25519Keypair()
|
||||||
|
const aliceCondition = Transaction.makeEd25519Condition(alice.publicKey)
|
||||||
|
const aliceOutput = Transaction.makeOutput(aliceCondition)
|
||||||
|
const assetMessage = { assetMessage: 'assetMessage' }
|
||||||
|
const metaDataMessage = { metaDataMessage: 'metaDataMessage' }
|
||||||
|
const createTx = Transaction.makeCreateTransaction(
|
||||||
|
assetMessage,
|
||||||
|
metaDataMessage,
|
||||||
|
[aliceOutput],
|
||||||
|
alice.publicKey
|
||||||
|
)
|
||||||
|
const transferTx = Transaction.makeTransferTransaction(
|
||||||
|
createTx,
|
||||||
|
metaDataMessage,
|
||||||
|
[aliceOutput],
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
test('Create valid output with default amount', t => {
|
test('Create valid output with default amount', t => {
|
||||||
@ -53,3 +75,47 @@ test('Pass condition not based on public_keys to makeOutput', t => {
|
|||||||
test('makeOutput throws TypeError with incorrect amount type', t => {
|
test('makeOutput throws TypeError with incorrect amount type', t => {
|
||||||
t.throws(() => Transaction.makeOutput({}, 1337), TypeError)
|
t.throws(() => Transaction.makeOutput({}, 1337), TypeError)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test('Create TRANSFER transaction based on CREATE transaction', t => {
|
||||||
|
const testTx = _makeTransferTransaction(
|
||||||
|
createTx,
|
||||||
|
metaDataMessage,
|
||||||
|
[aliceOutput],
|
||||||
|
0
|
||||||
|
)
|
||||||
|
const expected = [
|
||||||
|
'TRANSFER',
|
||||||
|
{id: createTx.id },
|
||||||
|
metaDataMessage,
|
||||||
|
[aliceOutput],
|
||||||
|
[makeInputTemplate(
|
||||||
|
[alice.publicKey],
|
||||||
|
{ output: 0, transaction_id: createTx.id }
|
||||||
|
)]
|
||||||
|
]
|
||||||
|
|
||||||
|
t.deepEqual(testTx, expected)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test('Create TRANSFER transaction based on TRANSFER transaction', t => {
|
||||||
|
const testTx = _makeTransferTransaction(
|
||||||
|
transferTx,
|
||||||
|
metaDataMessage,
|
||||||
|
[aliceOutput],
|
||||||
|
0
|
||||||
|
)
|
||||||
|
const expected = [
|
||||||
|
'TRANSFER',
|
||||||
|
{ id: transferTx.asset.id },
|
||||||
|
metaDataMessage,
|
||||||
|
[aliceOutput],
|
||||||
|
[makeInputTemplate(
|
||||||
|
[alice.publicKey],
|
||||||
|
{ output: 0, transaction_id: transferTx.id }
|
||||||
|
)]
|
||||||
|
]
|
||||||
|
|
||||||
|
t.deepEqual(testTx, expected)
|
||||||
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user