2017-06-12 16:57:29 +02:00
|
|
|
import { Buffer } from 'buffer'
|
|
|
|
import base58 from 'bs58'
|
|
|
|
import cc from 'five-bells-condition'
|
2017-05-01 18:44:49 +02:00
|
|
|
|
|
|
|
/**
|
2017-05-03 01:02:50 +02:00
|
|
|
* @public
|
|
|
|
* Loads a crypto-condition class (Fulfillment or Condition) from a BigchainDB JSON object
|
2017-05-01 18:44:49 +02:00
|
|
|
* @param {object} conditionJson
|
|
|
|
* @returns {cc.Condition} Ed25519 Condition (that will need to wrapped in an Output)
|
|
|
|
*/
|
|
|
|
export default function ccJsonLoad(conditionJson) {
|
|
|
|
if ('hash' in conditionJson) {
|
2017-06-12 16:57:29 +02:00
|
|
|
const condition = new cc.Condition()
|
|
|
|
condition.type = conditionJson.type_id
|
|
|
|
condition.bitmask = conditionJson.bitmask
|
|
|
|
condition.hash = new Buffer(base58.decode(conditionJson.hash))
|
|
|
|
condition.maxFulfillmentLength = parseInt(conditionJson.max_fulfillment_length, 10)
|
2017-05-01 18:44:49 +02:00
|
|
|
return condition
|
|
|
|
} else {
|
2017-06-12 16:57:29 +02:00
|
|
|
let fulfillment
|
2017-05-01 18:44:49 +02:00
|
|
|
|
|
|
|
if (conditionJson.type_id === 2) {
|
2017-06-12 16:57:29 +02:00
|
|
|
fulfillment = new cc.ThresholdSha256()
|
|
|
|
fulfillment.threshold = conditionJson.threshold
|
2017-06-13 12:01:29 +02:00
|
|
|
conditionJson.subfulfillments.forEach((subfulfillmentJson) => {
|
|
|
|
const subfulfillment = ccJsonLoad(subfulfillmentJson)
|
2017-06-12 16:57:29 +02:00
|
|
|
if ('getConditionUri' in subfulfillment) {
|
|
|
|
fulfillment.addSubfulfillment(subfulfillment)
|
|
|
|
} else if ('serializeUri' in subfulfillment) {
|
2017-05-01 18:44:49 +02:00
|
|
|
fulfillment.addSubcondition(subfulfillment)
|
2017-06-12 16:57:29 +02:00
|
|
|
}
|
2017-05-01 18:44:49 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
if (conditionJson.type_id === 0) {
|
2017-06-12 16:57:29 +02:00
|
|
|
fulfillment = new cc.PreimageSha256()
|
|
|
|
fulfillment.preimage = new Buffer(conditionJson.preimage)
|
2017-05-01 18:44:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (conditionJson.type_id === 4) {
|
2017-06-12 16:57:29 +02:00
|
|
|
fulfillment = new cc.Ed25519()
|
|
|
|
fulfillment.publicKey = new Buffer(base58.decode(conditionJson.public_key))
|
|
|
|
if (conditionJson.signature) {
|
|
|
|
fulfillment.signature = new Buffer(base58.decode(conditionJson.signature))
|
|
|
|
}
|
2017-05-01 18:44:49 +02:00
|
|
|
}
|
2017-06-12 16:57:29 +02:00
|
|
|
return fulfillment
|
2017-05-01 18:44:49 +02:00
|
|
|
}
|
|
|
|
}
|