The Transaction Schema Files

BigchainDB checks all transactions (JSON documents) against a formal schema defined in some JSON Schema files named transaction.yaml, transaction_create.yaml and transaction_transfer.yaml. The contents of those files are copied below. To understand those contents (i.e. JSON Schema), check out “Understanding JSON Schema” by Michael Droettboom or json-schema.org.

transaction.yaml

---
"$schema": "http://json-schema.org/draft-04/schema#"
id: "http://www.bigchaindb.com/schema/transaction.json"
type: object
additionalProperties: false
title: Transaction Schema
required:
- id
- inputs
- outputs
- operation
- metadata
- asset
- version
properties:
  id:
    "$ref": "#/definitions/sha3_hexdigest"
  operation:
    "$ref": "#/definitions/operation"
  asset:
    "$ref": "#/definitions/asset"
  inputs:
    type: array
    title: "Transaction inputs"
    items:
      "$ref": "#/definitions/input"
  outputs:
    type: array
    items:
      "$ref": "#/definitions/output"
  metadata:
    "$ref": "#/definitions/metadata"
  version:
    type: string
    pattern: "^1\\.0$"
definitions:
  offset:
    type: integer
    minimum: 0
  base58:
    pattern: "[1-9a-zA-Z^OIl]{43,44}"
    type: string
  public_keys:
    anyOf:
    - type: array
      items:
        "$ref": "#/definitions/base58"
    - type: 'null'
  sha3_hexdigest:
    pattern: "[0-9a-f]{64}"
    type: string
  uuid4:
    pattern: "[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}"
    type: string
  operation:
    type: string
    enum:
    - CREATE
    - TRANSFER
    - GENESIS
  asset:
    type: object
    additionalProperties: false
    properties:
      id:
        "$ref": "#/definitions/sha3_hexdigest"
      data:
        anyOf:
        - type: object
          additionalProperties: true
        - type: 'null'
  output:
    type: object
    additionalProperties: false
    required:
    - amount
    - condition
    - public_keys
    properties:
      amount:
        type: string
        pattern: "^[0-9]{1,20}$"
      condition:
        type: object
        additionalProperties: false
        required:
        - details
        - uri
        properties:
          details:
            "$ref": "#/definitions/condition_details"
          uri:
            type: string
            pattern: "^ni:///sha-256;([a-zA-Z0-9_-]{0,86})[?]\
              (fpt=(ed25519|threshold)-sha-256(&)?|cost=[0-9]+(&)?|\
              subtypes=ed25519-sha-256(&)?){2,3}$"
      public_keys:
        "$ref": "#/definitions/public_keys"
  input:
    type: "object"
    additionalProperties: false
    required:
    - owners_before
    - fulfillment
    properties:
      owners_before:
        "$ref": "#/definitions/public_keys"
      fulfillment:
        anyOf:
        - type: string
          pattern: "^[a-zA-Z0-9_-]*$"
        - "$ref": "#/definitions/condition_details"
      fulfills:
        anyOf:
        - type: 'object'
          additionalProperties: false
          required:
          - output_index
          - transaction_id
          properties:
            output_index:
              "$ref": "#/definitions/offset"
            transaction_id:
              "$ref": "#/definitions/sha3_hexdigest"
        - type: 'null'
  metadata:
    anyOf:
    - type: object
      additionalProperties: true
      minProperties: 1
    - type: 'null'
  condition_details:
    anyOf:
    - type: object
      additionalProperties: false
      required:
      - type
      - public_key
      properties:
        type:
          type: string
          pattern: "^ed25519-sha-256$"
        public_key:
          "$ref": "#/definitions/base58"
    - type: object
      additionalProperties: false
      required:
      - type
      - threshold
      - subconditions
      properties:
        type:
          type: "string"
          pattern: "^threshold-sha-256$"
        threshold:
          type: integer
          minimum: 1
          maximum: 100
        subconditions:
          type: array
          items:
            "$ref": "#/definitions/condition_details"

transaction_create.yaml

---
"$schema": "http://json-schema.org/draft-04/schema#"
type: object
title: Transaction Schema - CREATE/GENESIS specific constraints
required:
- asset
- inputs
properties:
  asset:
    additionalProperties: false
    properties:
      data:
        anyOf:
        - type: object
          additionalProperties: true
        - type: 'null'
    required:
    - data
  inputs:
    type: array
    title: "Transaction inputs"
    maxItems: 1
    minItems: 1
    items:
      type: "object"
      required:
      - fulfills
      properties:
        fulfills:
            type: "null"

transaction_transfer.yaml

---
"$schema": "http://json-schema.org/draft-04/schema#"
type: object
title: Transaction Schema - TRANSFER specific properties
required:
- asset
properties:
  asset:
    additionalProperties: false
    properties:
      id:
        "$ref": "#/definitions/sha3_hexdigest"
    required:
    - id
  inputs:
    type: array
    title: "Transaction inputs"
    minItems: 1
    items:
      type: "object"
      required:
      - fulfills
      properties:
        fulfills:
            type: "object"
definitions:
  sha3_hexdigest:
    pattern: "[0-9a-f]{64}"
    type: string