mirror of
https://github.com/bigchaindb/js-bigchaindb-driver.git
synced 2024-11-25 11:28:37 +01:00
(needs rework): multi input serialization for divisible assets
This commit is contained in:
parent
f436896d96
commit
1c5ec81ed2
20
index.js
20
index.js
@ -141,8 +141,7 @@ export function signTransaction(transaction, ...privateKeys) {
|
|||||||
signedTx.inputs.forEach((input, index) => {
|
signedTx.inputs.forEach((input, index) => {
|
||||||
const privateKey = privateKeys[index];
|
const privateKey = privateKeys[index];
|
||||||
const privateKeyBuffer = new Buffer(base58.decode(privateKey));
|
const privateKeyBuffer = new Buffer(base58.decode(privateKey));
|
||||||
const serializedTransaction = serializeTransactionIntoCanonicalString(transaction);
|
const serializedTransaction = serializeTransactionIntoCanonicalString(transaction, input);
|
||||||
|
|
||||||
const ed25519Fulfillment = new cc.Ed25519();
|
const ed25519Fulfillment = new cc.Ed25519();
|
||||||
ed25519Fulfillment.sign(new Buffer(serializedTransaction), privateKeyBuffer);
|
ed25519Fulfillment.sign(new Buffer(serializedTransaction), privateKeyBuffer);
|
||||||
const fulfillmentUri = ed25519Fulfillment.serializeUri();
|
const fulfillmentUri = ed25519Fulfillment.serializeUri();
|
||||||
@ -209,14 +208,23 @@ function sha256Hash(data) {
|
|||||||
.hex();
|
.hex();
|
||||||
}
|
}
|
||||||
|
|
||||||
function serializeTransactionIntoCanonicalString(transaction) {
|
function serializeTransactionIntoCanonicalString(transaction, input) {
|
||||||
// BigchainDB signs fulfillments by serializing transactions into a "canonical" format where
|
// BigchainDB signs fulfillments by serializing transactions into a "canonical" format where
|
||||||
// each fulfillment URI is removed before sorting the remaining keys
|
// each fulfillment URI is removed before sorting the remaining keys
|
||||||
const tx = clone(transaction);
|
const tx = clone(transaction);
|
||||||
tx.inputs.forEach((input) => {
|
let match;
|
||||||
input.fulfillment = null;
|
tx.inputs.forEach((_input) => {
|
||||||
});
|
|
||||||
|
|
||||||
|
if (!(_input && input && _input['fulfills'] && input['fulfills']
|
||||||
|
&& !(_input['fulfills']['txid'] === input['fulfills']['txid']
|
||||||
|
&& _input['fulfills']['output'] === input['fulfills']['output']))) {
|
||||||
|
match = tx.inputs.indexOf(_input);
|
||||||
|
}
|
||||||
|
_input.fulfillment = null;
|
||||||
|
});
|
||||||
|
if (input && match >= 0 && tx.inputs) {
|
||||||
|
tx.inputs = [tx.inputs[match]];
|
||||||
|
}
|
||||||
// Sort the keys
|
// Sort the keys
|
||||||
return stableStringify(tx, (a, b) => (a.key > b.key ? 1 : -1));
|
return stableStringify(tx, (a, b) => (a.key > b.key ? 1 : -1));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user