All files / src/transaction/utils ccJsonify.js

53.33% Statements 16/30
37.5% Branches 6/16
50% Functions 1/2
53.33% Lines 16/30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 694x                 8x   8x 8x         8x         8x                   8x                                 8x 8x 8x   8x 8x 8x 8x       8x           8x    
import base58 from 'bs58'
 
/**
 * @public
 * Serializes a crypto-condition class (Condition or Fulfillment) into a BigchainDB-compatible JSON
 * @param {cc.Fulfillment} fulfillment base58 encoded Ed25519 public key for recipient of the Transaction
 * @returns {object} Ed25519 Condition (that will need to wrapped in an Output)
 */
export default function ccJsonify(fulfillment) {
    let conditionUri
 
    Eif ('getConditionUri' in fulfillment) {
        conditionUri = fulfillment.getConditionUri()
    } else if ('serializeUri' in fulfillment) {
        conditionUri = fulfillment.serializeUri()
    }
 
    const jsonBody = {
        'details': {},
        'uri': conditionUri,
    }
 
    Iif (fulfillment.getTypeId() === 0) {
        jsonBody.details.type_id = 0
        jsonBody.details.bitmask = 3
 
        if ('preimage' in fulfillment) {
            jsonBody.details.preimage = fulfillment.preimage.toString()
            jsonBody.details.type = 'fulfillment'
        }
    }
 
    Iif (fulfillment.getTypeId() === 2) {
        return {
            'details': {
                'type_id': 2,
                'type': 'fulfillment',
                'bitmask': fulfillment.getBitmask(),
                'threshold': fulfillment.threshold,
                'subfulfillments': fulfillment.subconditions.map((subcondition) => {
                    const subconditionJson = ccJsonify(subcondition.body)
                    subconditionJson.details.weight = 1
                    return subconditionJson.details
                })
            },
            'uri': conditionUri,
        }
    }
 
    Eif (fulfillment.getTypeId() === 4) {
        jsonBody.details.type_id = 4
        jsonBody.details.bitmask = 32
 
        Eif ('publicKey' in fulfillment) {
            jsonBody.details.signature = null
            jsonBody.details.public_key = base58.encode(fulfillment.publicKey)
            jsonBody.details.type = 'fulfillment'
        }
    }
 
    Iif ('hash' in fulfillment) {
        jsonBody.details.hash = base58.encode(fulfillment.hash)
        jsonBody.details.max_fulfillment_length = fulfillment.maxFulfillmentLength
        jsonBody.details.type = 'condition'
    }
 
    return jsonBody
}