Type API Specs

AcceptedBid

{
  "gwapi": "001",
  "type_name": "accepted.bid",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Bid acceptance sent from MarketMaker to a market partipant. This is a legally binding contract for the bidder to consume or produce the quantity in its Bid consistent with the actual price.",
  "url": "https://gridworks.readthedocs.io/en/latest/market-bid.html",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "MarketSlotNameLrdFormat": {
      "type": "string",
      "description": "",
      "example": ""
    }
  },
  "properties": {
    "MarketSlotName": {
      "type": "string",
      "format": "MarketSlotNameLrdFormat",
      "title": "",
      "required": true
    },
    "BidderAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "PqPairs": {
      "type": "price.quantity.unitless.000",
      "title": "",
      "required": true
    },
    "ReceivedTimeUnixNs": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "accepted.bid.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

AtnBid

{
  "gwapi": "001",
  "type_name": "atn.bid",
  "version": "001",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "AtomicTNode bid sent to a MarketMaker",
  "url": "https://gridworks.readthedocs.io/en/latest/market-bid.html",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "MarketSlotNameLrdFormat": {
      "type": "string",
      "description": "",
      "example": ""
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "enums": {
    "MarketPriceUnit000": {
      "type": "string",
      "name": "market.price.unit.000",
      "description": "Price unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "USDPerMWh",
          "description": ""
        }
      ]
    },
    "MarketTypeName000": {
      "type": "string",
      "name": "market.type.name.000",
      "description": "Categorizes different markets run by MarketMaker",
      "oneOf": [
        {
          "const": "00000000",
          "title": "unknown",
          "description": "Default unknown"
        },
        {
          "const": "d20b81e4",
          "title": "rt5gate5",
          "description": "Real-time energy, 5 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "b36cbfb4",
          "title": "rt60gate5",
          "description": "Real-time energy, 60 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "94a3fe9b",
          "title": "da60",
          "description": "Day-ahead energy, 60 minute MarketSlots"
        },
        {
          "const": "5f335bdb",
          "title": "rt60gate30",
          "description": "Real-time energy, 60 minute MarketSlots, gate closing 30 minutes prior to start"
        },
        {
          "const": "01a84101",
          "title": "rt15gate5",
          "description": "Real-time energy, 15 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "e997ccfb",
          "title": "rt30gate5",
          "description": "Real-time energy, 30 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "618f9c0a",
          "title": "rt60gate30b",
          "description": "Real-time energy, 30 minute MarketSlots, gate closing 5 minutes prior to start, QuantityUnit AvgkW"
        }
      ]
    },
    "MarketQuantityUnit000": {
      "type": "string",
      "name": "market.quantity.unit.000",
      "description": "Quantity unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "AvgMW",
          "description": ""
        },
        {
          "const": "c272f3b3",
          "title": "AvgkW",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "BidderAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "BidderGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "MarketSlotName": {
      "type": "string",
      "format": "MarketSlotNameLrdFormat",
      "title": "",
      "required": true
    },
    "PqPairs": {
      "type": "price.quantity.unitless.000",
      "title": "Price Quantity Pairs",
      "description": "The list of Price Quantity Pairs making up the bid. The units are provided by the AtnBid.PriceUnit and AtnBid.QuantityUnit.",
      "required": true
    },
    "InjectionIsPositive": {
      "type": "boolean",
      "title": "",
      "required": true
    },
    "PriceUnit": {
      "type": "string",
      "format": "MarketPriceUnit000",
      "title": "",
      "required": true
    },
    "QuantityUnit": {
      "type": "string",
      "format": "MarketQuantityUnit000",
      "title": "",
      "required": true
    },
    "SignedMarketFeeTxn": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.bid.001",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "001",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "PqPairs PriceMax matches MarketType",
      "description": "There is a GridWorks global list of MarketTypes (a GridWorks type), identified by their MarketTypeNames (a GridWorks enum). The MarketType has a PriceMax, which must be the first price of the first PriceQuantity pair in PqPairs."
    },
    "Axiom2": {
      "title": "",
      "description": ""
    }
  }
}

AtnOutsideTempRegrCoeffs

{
  "gwapi": "001",
  "type_name": "atn.outside.temp.regr.coeffs",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": ". Coefficients for a linear regression of avg power leaving a building as a function of weather: PowerOut = Alpha + Beta * OutsideTempF These are an example of Slowly Varying State variables maintained for a thermal storage heating Terminal Asset by its AtomicTNode and Scada.",
  "url": "https://gridworks-atn.readthedocs.io/en/latest/data-categories.html#slowly-varying-state-variables",
  "properties": {
    "Alpha": {
      "type": "integer",
      "title": "Alpha (units: W)",
      "required": true
    },
    "Beta": {
      "type": "number",
      "title": "Beta (units: W / deg F)  ",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.outside.temp.regr.coeffs.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

AtnParams

{
  "gwapi": "001",
  "type_name": "atn.params",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Generic AtnParams. This is a partial type, which is expected to be satisfied by all types starting with atn.params (like atn.params.heatpumpwithbooststore). It is used to describe the generic info required for configuring an AtomicTNode.",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "HomeCity": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TimezoneString": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.params.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

AtnParamsBrickstorageheater

{
  "gwapi": "001",
  "type_name": "atn.params.brickstorageheater",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Params for a BrickStorageHeater Atn Strategy. Parameters for a model of a ceramic brick thermal storage room unit, using a two-dimensional Dijstra graph parameterized by 'fullness of the thermal battery' and time.",
  "url": "https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "enums": {
    "DistributionTariff000": {
      "type": "string",
      "name": "distribution.tariff.000",
      "description": "Name of distribution tariff of local network company/utility",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "2127aba6",
          "title": "VersantA1StorageHeatTariff",
          "url": "https://github.com/thegridelectric/gridworks-ps/blob/dev/input_data/electricity_prices/isone/distp__w.isone.stetson__2022__gw.me.versant.a1.res.ets.csv",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). Alternately known as the 'Home Eco Rate With Bonus Meter, Time-of-Use.' Look for rate A1 in Versant [rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/); details are also available [here](https://drive.google.com/drive/u/0/folders/1mhIeNj2JWVyIJrQnSHmBDOkBpNnRRVKB). More: Service under this rate will be available to residential customers with thermal energy storage devices, electric battery storage devices, and/or vehicle chargers who agree to install a second metered point of delivery. The customer will be subject to inspections to ensure that the thermal storage device, electric battery storage device, and electric vehicle charger(s) are sized appropriately for residential use. If the thermal storage device, electric battery storage device, and electric vehicle charger(s) do not pass Company inspection, then the service will be denied. Service will be single-phase, alternating current, 60 hertz, at one standard secondary distribution voltage. Customers taking service under this rate schedule are responsible for paying both Distribution Service and Stranded Cost."
        },
        {
          "const": "ea5c675a",
          "title": "VersantATariff",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). The A Tariff is their standard residential tariff. Look for rate A in Versant [rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/)"
        },
        {
          "const": "54aec3a7",
          "title": "VersantA20HeatTariff",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background).  This is an alternative tariff available for electric heat."
        }
      ]
    },
    "RecognizedCurrencyUnit000": {
      "type": "string",
      "name": "recognized.currency.unit.000",
      "description": "Unit of currency",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "e57c5143",
          "title": "USD",
          "description": "US Dollar"
        },
        {
          "const": "f7b38fc5",
          "title": "GBP",
          "description": "Pounds sterling"
        }
      ]
    },
    "RecognizedTemperatureUnit000": {
      "type": "string",
      "name": "recognized.temperature.unit.000",
      "description": "Unit of temperature",
      "oneOf": [
        {
          "const": "00000000",
          "title": "C",
          "description": "Celcius"
        },
        {
          "const": "6f16ee63",
          "title": "F",
          "description": "Fahrenheit"
        }
      ]
    },
    "EnergySupplyType000": {
      "type": "string",
      "name": "energy.supply.type.000",
      "description": "",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "cb18f937",
          "title": "StandardOffer",
          "description": ""
        },
        {
          "const": "e9dc99a6",
          "title": "RealtimeLocalLmp",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "GNode Alias",
      "required": true
    },
    "HomeCity": {
      "type": "string",
      "title": "Home City",
      "required": true
    },
    "TimezoneString": {
      "type": "string",
      "title": "Timezone String",
      "required": true
    },
    "StorageSteps": {
      "type": "integer",
      "title": "Storage Steps",
      "description": "The number of nodes in each TimeSlice for the Dijkstra graph.",
      "required": true
    },
    "FloSlices": {
      "type": "integer",
      "title": "",
      "description": "The number of nodes for each storage level in the Dijstra graph.",
      "required": true
    },
    "SliceDurationMinutes": {
      "type": "integer",
      "title": "",
      "description": "The length of",
      "required": true
    },
    "CurrencyUnit": {
      "type": "string",
      "format": "RecognizedCurrencyUnit000",
      "title": "",
      "required": true
    },
    "Tariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "EnergyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "StandardOfferPriceDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "DistributionTariffDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxBrickTempC": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "RatedMaxPowerKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "C": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ROff": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ROn": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RoomTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AnnualHvacKwhTh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "BetaOt": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TempUnit": {
      "type": "string",
      "format": "RecognizedTemperatureUnit000",
      "title": "",
      "required": true
    },
    "AmbientPowerInKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "HouseWorstCaseTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.params.brickstorageheater.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

AtnParamsReport

{
  "gwapi": "001",
  "type_name": "atn.params.report",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "AtomicTNode reporting its AtnParams. Parameters like the size of the thermal store.",
  "formats": {
    "ReasonableUnixTimeS": {
      "type": "string",
      "description": "Integer reflecting unix time seconds between 1970 and 3000",
      "example": ""
    },
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "GNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "AtnParamsTypeName": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "TimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": true
    },
    "IrlTimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": false
    },
    "Params": {
      "type": "atn.params.000",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.params.report.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

AtnParamsSimpleresistivehydronic

{
  "gwapi": "001",
  "type_name": "atn.params.simpleresistivehydronic",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "enums": {
    "DistributionTariff000": {
      "type": "string",
      "name": "distribution.tariff.000",
      "description": "Name of distribution tariff of local network company/utility",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "2127aba6",
          "title": "VersantA1StorageHeatTariff",
          "url": "https://github.com/thegridelectric/gridworks-ps/blob/dev/input_data/electricity_prices/isone/distp__w.isone.stetson__2022__gw.me.versant.a1.res.ets.csv",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). Alternately known as the 'Home Eco Rate With Bonus Meter, Time-of-Use.' Look for rate A1 in Versant [rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/); details are also available [here](https://drive.google.com/drive/u/0/folders/1mhIeNj2JWVyIJrQnSHmBDOkBpNnRRVKB). More: Service under this rate will be available to residential customers with thermal energy storage devices, electric battery storage devices, and/or vehicle chargers who agree to install a second metered point of delivery. The customer will be subject to inspections to ensure that the thermal storage device, electric battery storage device, and electric vehicle charger(s) are sized appropriately for residential use. If the thermal storage device, electric battery storage device, and electric vehicle charger(s) do not pass Company inspection, then the service will be denied. Service will be single-phase, alternating current, 60 hertz, at one standard secondary distribution voltage. Customers taking service under this rate schedule are responsible for paying both Distribution Service and Stranded Cost. See attached csv for instantiation of this rate as an 8760."
        },
        {
          "const": "ea5c675a",
          "title": "VersantATariff",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). The A Tariff is their standard residential tariff. Look for rate A in Versant [rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/)"
        },
        {
          "const": "54aec3a7",
          "title": "VersantA20HeatTariff",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). This is an alternative tariff available for electric heat."
        }
      ]
    },
    "RecognizedCurrencyUnit000": {
      "type": "string",
      "name": "recognized.currency.unit.000",
      "description": "Unit of currency",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "e57c5143",
          "title": "USD",
          "description": "US Dollar"
        },
        {
          "const": "f7b38fc5",
          "title": "GBP",
          "description": "Pounds sterling"
        }
      ]
    },
    "EnergySupplyType000": {
      "type": "string",
      "name": "energy.supply.type.000",
      "description": "",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "cb18f937",
          "title": "StandardOffer",
          "description": ""
        },
        {
          "const": "e9dc99a6",
          "title": "RealtimeLocalLmp",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "HomeCity": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TimezoneString": {
      "type": "string",
      "title": "",
      "required": true
    },
    "StorageSteps": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "FloSlices": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SliceDurationMinutes": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CurrencyUnit": {
      "type": "string",
      "format": "RecognizedCurrencyUnit000",
      "title": "",
      "required": true
    },
    "Tariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "EnergyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "StandardOfferPriceDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "FlatDistributionTariffDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreSizeGallons": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "ElementMaxPowerKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RequiredSourceWaterTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CirculatorPumpGpm": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ReturnWaterDeltaTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AnnualHvacKwhTh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientPowerInKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "HouseWorstCaseTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "RoomTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StorePassiveLossRatio": {
      "type": "number",
      "title": "",
      "required": true
    },
    "AmbientTempStoreF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.params.simpleresistivehydronic.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

BasegnodeScadaCreate

{
  "gwapi": "001",
  "type_name": "basegnode.scada.create",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Scada BaseGNode Creation. This is a payload designed to be sent from a TaOwner to the GNodeFactory. The TaOwner creates a private Algorand key and puts it on the Scada Device that will sense and control their TerminalAsset. The public address is associated with the Scada GNode by the GNodeFactory.",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "TaAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "TerminalAsset Alias",
      "description": "GNodeAlias of the TerminalAsset that will be controlled by the new SCADA GNode. The SCADA GNodeAlias will have '.scada' appended to this.",
      "required": true
    },
    "ScadaAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address for the SCADA",
      "description": "The TaOwner makes the corresponding private key, puts it on the SCADA device, and then sends this address to the GNodeFactory.",
      "required": true
    },
    "TaDaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address of the associated TaDaemon",
      "description": "The TaDaemonAddr will have the TaDeed, and can be used to verify the public address of the TaOwner",
      "required": true
    },
    "GNodeRegistryAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "GNodeRegistry Algorand address",
      "description": "The GNodeRegistry that contains Make/Model information about the SCADA and TerminalAsset",
      "required": true
    },
    "SignedProof": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "Recent transaction signed by the TaOwner",
      "description": "These will be replaced by composite transactions in next gen code.",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "basegnode.scada.create.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "TaOwner is SignedProof signer",
      "description": "The TaDaemonAddr provides the public address for the TaOwner. This TaOwnerAddr must match the signature on the SignedProof."
    },
    "Axiom2": {
      "title": "TaAlias matches TaDeed",
      "description": "The TaDaemonAddr owns a TaDeed for the TaAlias."
    }
  }
}

DiscoverycertAlgoCreate

{
  "gwapi": "001",
  "type_name": "discoverycert.algo.create",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    }
  },
  "enums": {
    "CoreGNodeRole000": {
      "type": "string",
      "name": "core.g.node.role.000",
      "description": "CoreGNodeRole assigned by GNodeFactory",
      "url": "https://gridworks.readthedocs.io/en/latest/core-g-node-role.html",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Other",
          "description": ""
        },
        {
          "const": "0f8872f7",
          "title": "TerminalAsset",
          "description": ""
        },
        {
          "const": "d9823442",
          "title": "AtomicTNode",
          "description": ""
        },
        {
          "const": "86f21dd2",
          "title": "MarketMaker",
          "description": ""
        },
        {
          "const": "9521af06",
          "title": "AtomicMeteringNode",
          "description": ""
        },
        {
          "const": "4502e355",
          "title": "ConductorTopologyNode",
          "description": ""
        },
        {
          "const": "d67e564e",
          "title": "InterconnectionComponent",
          "description": ""
        },
        {
          "const": "7a8e4046",
          "title": "Scada",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "Role": {
      "type": "string",
      "format": "CoreGNodeRole000",
      "title": "",
      "required": true
    },
    "OldChildAliasList": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "DiscovererAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "SupportingMaterialHash": {
      "type": "string",
      "title": "",
      "required": true
    },
    "MicroLat": {
      "type": "integer",
      "title": "",
      "required": false
    },
    "MicroLon": {
      "type": "integer",
      "title": "",
      "required": false
    },
    "TypeName": {
      "type": "string",
      "value": "discoverycert.algo.create.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

DispatchContractConfirmed

{
  "gwapi": "001",
  "type_name": "dispatch.contract.confirmed",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Message sent from AtomicTNode back to SCADA via Rabbit . Paired with join.dispatch.contract. Sent from AtomicTNode back to SCADA once the AtomicTNode has successfully finished bootstrapping the Dispatch Contract and opted in. Once it has done this, the Dispatch Contract is ready to collect audit information about heartbeats, dispatch, energy and power. https://gridworks.readthedocs.io/en/latest/dispatch-contract.html",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "AtnParamsTypeName": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "SignedProof": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "Params": {
      "type": "atn.params.000",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "dispatch.contract.confirmed.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "AtnParamsTypeName matches AtnParams",
      "description": "AtnParams must have"
    }
  }
}

FloParams

{
  "gwapi": "001",
  "type_name": "flo.params",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Base class for Forward Looking Optimizer params. Derived classes are expected to have TypeNames enforced as literals that start with flo.params. E.g. flo.params.brickstorageheater. This container is used for sending messages that include flo.params (i.e, flo.params.report",
  "url": "https://gridworks-atn.readthedocs.io/en/latest/flo.html#flo-params",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FloParamsUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "HomeCity": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TimezoneString": {
      "type": "string",
      "title": "",
      "required": true
    },
    "StartYearUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartMonthUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartDayUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartHourUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartMinuteUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "flo.params.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

FloParamsBrickstorageheater

{
  "gwapi": "001",
  "type_name": "flo.params.brickstorageheater",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": ". FloParams for the BrickStorageHeater AtomicTNode strategy.",
  "url": "https://gridworks-atn.readthedocs.io/en/latest/brick-storage-heater.html",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "enums": {
    "RecognizedCurrencyUnit000": {
      "type": "string",
      "name": "recognized.currency.unit.000",
      "description": "Unit of currency",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "e57c5143",
          "title": "USD",
          "description": "US Dollar"
        },
        {
          "const": "f7b38fc5",
          "title": "GBP",
          "description": "Pounds sterling"
        }
      ]
    },
    "RecognizedTemperatureUnit000": {
      "type": "string",
      "name": "recognized.temperature.unit.000",
      "description": "Unit of temperature",
      "oneOf": [
        {
          "const": "00000000",
          "title": "C",
          "description": "Celcius"
        },
        {
          "const": "6f16ee63",
          "title": "F",
          "description": "Fahrenheit"
        }
      ]
    }
  },
  "properties": {
    "MaxBrickTempC": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "RatedMaxPowerKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ROff": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ROn": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RoomTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CurrencyUnit": {
      "type": "string",
      "format": "RecognizedCurrencyUnit000",
      "title": "",
      "required": true
    },
    "TempUnit": {
      "type": "string",
      "format": "RecognizedTemperatureUnit000",
      "title": "",
      "required": true
    },
    "TimezoneString": {
      "type": "string",
      "title": "",
      "required": true
    },
    "HomeCity": {
      "type": "string",
      "title": "",
      "required": true
    },
    "IsRegulating": {
      "type": "boolean",
      "title": "",
      "required": true
    },
    "StorageSteps": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SliceDurationMinutes": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "PowerRequiredByHouseFromSystemAvgKwList": {
      "type": "number",
      "title": "",
      "required": true
    },
    "C": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RealtimeElectricityPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "OutsideTempF": {
      "type": "number",
      "title": "",
      "required": true
    },
    "DistributionPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RtElecPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "RegulationPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "WeatherUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "DistPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "RegPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": false
    },
    "StartYearUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartMonthUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartDayUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartHourUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartMinuteUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartingStoreIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientPowerInKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "HouseWorstCaseTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FloParamsUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "flo.params.brickstorageheater.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

FloParamsReport

{
  "gwapi": "001",
  "type_name": "flo.params.report",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Flo Params Report. Type used for a message provided by an AtomicTNode or SCADA actor re the flo parameters just used to run a FLO.",
  "url": "https://gridworks-atn.readthedocs.io/en/latest/flo.html#flo-params",
  "formats": {
    "ReasonableUnixTimeS": {
      "type": "string",
      "description": "Integer reflecting unix time seconds between 1970 and 3000",
      "example": ""
    },
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "GNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "FloParamsTypeName": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FloParamsTypeVersion": {
      "type": "string",
      "title": "",
      "required": true
    },
    "ReportGeneratedTimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": true
    },
    "IrlTimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": false
    },
    "Params": {
      "type": "flo.params.000",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "flo.params.report.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

FloParamsSimpleresistivehydronic

{
  "gwapi": "001",
  "type_name": "flo.params.simpleresistivehydronic",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "enums": {
    "DistributionTariff000": {
      "type": "string",
      "name": "distribution.tariff.000",
      "description": "Name of distribution tariff of local network company/utility",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "2127aba6",
          "title": "VersantA1StorageHeatTariff",
          "url": "https://github.com/thegridelectric/gridworks-ps/blob/dev/input_data/electricity_prices/isone/distp__w.isone.stetson__2022__gw.me.versant.a1.res.ets.csv",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). Alternately known as the 'Home Eco Rate With Bonus Meter, Time-of-Use.' Look for rate A1 in Versant [rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/); details are also available [here](https://drive.google.com/drive/u/0/folders/1mhIeNj2JWVyIJrQnSHmBDOkBpNnRRVKB). More: Service under this rate will be available to residential customers with thermal energy storage devices, electric battery storage devices, and/or vehicle chargers who agree to install a second metered point of delivery. The customer will be subject to inspections to ensure that the thermal storage device, electric battery storage device, and electric vehicle charger(s) are sized appropriately for residential use. If the thermal storage device, electric battery storage device, and electric vehicle charger(s) do not pass Company inspection, then the service will be denied. Service will be single-phase, alternating current, 60 hertz, at one standard secondary distribution voltage. Customers taking service under this rate schedule are responsible for paying both Distribution Service and Stranded Cost. See attached csv for instantiation of this rate as an 8760."
        },
        {
          "const": "ea5c675a",
          "title": "VersantATariff",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). The A Tariff is their standard residential tariff. Look for rate A in Versant [rate schedules](https://www.versantpower.com/residential/rates/rates-schedules/)"
        },
        {
          "const": "54aec3a7",
          "title": "VersantA20HeatTariff",
          "description": "Versant is a utility serving customers in Maine, and in particular serves much of the area behind the Keene Rd Constraint in the [GridWorks Millinocket Demo](https://gridworks.readthedocs.io/en/latest/millinocket-demo.html#background). This is an alternative tariff available for electric heat."
        }
      ]
    },
    "RecognizedCurrencyUnit000": {
      "type": "string",
      "name": "recognized.currency.unit.000",
      "description": "Unit of currency",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "e57c5143",
          "title": "USD",
          "description": "US Dollar"
        },
        {
          "const": "f7b38fc5",
          "title": "GBP",
          "description": "Pounds sterling"
        }
      ]
    },
    "EnergySupplyType000": {
      "type": "string",
      "name": "energy.supply.type.000",
      "description": "",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "cb18f937",
          "title": "StandardOffer",
          "description": ""
        },
        {
          "const": "e9dc99a6",
          "title": "RealtimeLocalLmp",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FloParamsUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "HomeCity": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TimezoneString": {
      "type": "string",
      "title": "",
      "required": true
    },
    "StartYearUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartMonthUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartDayUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartHourUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartMinuteUtc": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StorageSteps": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreSizeGallons": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "RatedPowerKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RequiredSourceWaterTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CirculatorPumpGpm": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ReturnWaterDeltaTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "RoomTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientPowerInKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "HouseWorstCaseTempF": {
      "type": "number",
      "title": "",
      "required": true
    },
    "StorePassiveLossRatio": {
      "type": "number",
      "title": "",
      "required": true
    },
    "PowerLostFromHouseKwList": {
      "type": "number",
      "title": "",
      "required": true
    },
    "AmbientTempStoreF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SliceDurationMinutes": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "RealtimeElectricityPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "DistributionPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "OutsideTempF": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RtElecPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "DistPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "WeatherUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "CurrencyUnit": {
      "type": "string",
      "format": "RecognizedCurrencyUnit000",
      "title": "",
      "required": true
    },
    "Tariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "EnergyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "StandardOfferPriceDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "FlatDistributionTariffDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StartingStoreIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "flo.params.simpleresistivehydronic.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

InitialTadeedAlgoCreate

{
  "gwapi": "001",
  "type_name": "initial.tadeed.algo.create",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "TaValidator sends to GNodeFactory to complete creation of an initial TaDeed. If this message is valid, the GNodeFactory co-signs and submits the TaDeed creation. In addition, the GnodeFactory creates a TerminalAsset with GNodeStatus pending. For more information: [TaDeed](https://gridworks.readthedocs.io/en/latest/ta-deed.html) [TaValidator](https://gridworks.readthedocs.io/en/latest/ta-validator.html)",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Address of the TaValidator",
      "description": "The Algorand address of the TaValidator who is going to validate the location, device type, and power metering of the TerminalAsset.",
      "required": true
    },
    "HalfSignedDeedCreationMtx": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "Algo mulit-transaction for TaDeed creation",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "initial.tadeed.algo.create.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Is correct Multisig",
      "description": "Decoded HalfSignedDeedCreationMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr].",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr"
    },
    "Axiom2": {
      "title": "Creates Initial ASA TaDeed",
      "description": "The transaction must create an Algorand Standard Asset - Total is 1 - UnitName is TADEED - Manager is GnfAdminAddr - AssetName has the following characteristics: - length <= 32 characters - LeftRightDot format - final word is '.ta'",
      "url": "https://gridworks.readthedocs.io/en/latest/ta-deed.html#asa-tadeed-specs"
    },
    "Axiom3": {
      "title": "Mtx signed by TaValidator",
      "description": ""
    }
  }
}

InitialTadeedAlgoOptin

{
  "gwapi": "001",
  "type_name": "initial.tadeed.algo.optin",
  "version": "002",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Received by TaDaemon so that it can opt into intial TaDeed. The TaDaemon must opt into the TaDeed before receiving it. This message prompts that action.",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "TerminalAssetAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "The GNodeAlias of the TerminalAsset",
      "required": true
    },
    "TaOwnerAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "The Algorand address of the owner for the TerminalAsset",
      "required": true
    },
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Address of the TaValidator",
      "description": "The Algorand address of the TaValidator who has validated the location, device type, and power metering of the TerminalAsset.",
      "required": true
    },
    "SignedInitialDaemonFundingTxn": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "description": "Funding transaction for the TaDaemon account, signed by the TaOwner.",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "initial.tadeed.algo.optin.002",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "002",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Is correct Multisig",
      "description": "Decoded SignedInitialDaemonFundingTxn must be a SignedTransaction signed by TaOwnerAddr."
    },
    "Axiom2": {
      "title": "TaDeed consistency",
      "description": "There is an ASA TaDeed created by and owned by the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr], where the TaDeed's AssetName is equal to the payload's TerminalAssetAlias."
    }
  }
}

InitialTadeedAlgoTransfer

{
  "gwapi": "001",
  "type_name": "initial.tadeed.algo.transfer",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "TaValidator sends to GNodeFactory after validating Transactive Device. Once the TaValidator has done the initial on-site inspection of the Transactive Device including its location and the type and quality of its power and energy metering, the TaValidator lets the GNodeFactory know by sending this message. Note the message also includes the lat/lon of the Transactive Device. On receiving and validating this message, the GNodeFactory will co-sign the transfer and send the TaDeed to the TaDaemon address. In addition, the GNodeFactory creates and sends a TaTradingRights certificate to the TaDaemon address. Only once the GNodeFactory has verified that the TaDaemon address owns the TaDeed and TaTradingRights will it change the GNodeStatus of the associated TerminalAsset from Pending to Active. [GNodeStatus](https://gridworks.readthedocs.io/en/latest/g-node-status.html) [TaDeed](https://gridworks.readthedocs.io/en/latest/ta-deed.html) [TaTradingRights](https://gridworks.readthedocs.io/en/latest/ta-trading-rights.html) [TaValidator](https://gridworks.readthedocs.io/en/latest/ta-validator.html) [TerminalAsset](https://gridworks.readthedocs.io/en/latest/terminal-asset.html) [Transactive Device](https://gridworks.readthedocs.io/en/latest/transactive-device.html)",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "MicroLat": {
      "type": "integer",
      "title": "",
      "description": "The Latitude of the Transactive Device, times 10^6",
      "required": true
    },
    "MicroLon": {
      "type": "integer",
      "title": "",
      "description": "The Longitude of the Transactive Device, times 10^6",
      "required": true
    },
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "description": "The Algoand address for the TaValidator who validated the location, metering and type of the Transactive Device.",
      "required": true
    },
    "TaDaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "description": "The Algorand address for the TaDaemon which will own the TaDeed and initially the TaTradingRights), as well as holding funds on behalf of the TaOwner.",
      "required": true
    },
    "TaOwnerAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "description": "The Algorand address of the entity owning the Transactive Device, and thus also the TerminalAsset",
      "required": true
    },
    "FirstDeedTransferMtx": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "description": "The half-signed multi transaction for transferring the TaDeed to the TaDaemon.",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "initial.tadeed.algo.transfer.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Is correct Multisig",
      "description": "Decoded FirstDeedTransferMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr].",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr"
    },
    "Axiom2": {
      "title": "TaDaemon funded by TaOwner",
      "description": "The TaDaemonAddr was created with funding from the TaOwnerAddr, and has sufficient funding according to the GNodeFactory."
    }
  }
}

JoinDispatchContract

{
  "gwapi": "001",
  "type_name": "join.dispatch.contract",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Sent from a Scada to its paired AtomicTNode on RabbitMQ. This is sent as an invitation to join the DispatchContract. Upon receipt of this, the AtomicTNode can check that the DispatchContract has finished the first part of its bootstrapping. This means it is well-funded, and also has the Scada Cert Id and the Scada Addr publicly available. The AtomicTNode can check these against the signature provided by the SCADA in its invitation. An AtomicTNode actor accepts the invitation by finishing the Dispatch Contract bootstrap (which it can only do if its Algorand Account holds the associated TaTradingRights certificate) and then responding to the SCADA via RabbitMQ with a dispatch.contract.confirmed payload. https://gridworks.readthedocs.io/en/latest/dispatch-contract.html",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "DispatchContractAppId": {
      "type": "integer",
      "minimum": 0,
      "title": "",
      "required": true
    },
    "SignedProof": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "join.dispatch.contract.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom0": {
      "title": "ScadaCert matches FromGNodeAlias",
      "description": "The name in the ScadaCert should be the GNodeAlias of the TerminalAsset corresponding to the sending SCADA. Therefore, FromGNodeAlias should be equal to the name of the ScadaCert ASA with `.scada` appended."
    }
  }
}

LatestPrice

{
  "gwapi": "001",
  "type_name": "latest.price",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Latest Price for a MarketType, sent by a MarketMaker. The price of the current MarketSlot",
  "url": "https://gridworks.readthedocs.io/en/latest/market-slot.html",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "IsoFormat": {
      "type": "string",
      "description": "",
      "example": ""
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "MarketSlotNameLrdFormat": {
      "type": "string",
      "description": "",
      "example": ""
    }
  },
  "enums": {
    "MarketPriceUnit000": {
      "type": "string",
      "name": "market.price.unit.000",
      "description": "Price unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "USDPerMWh",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "PriceTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "PriceUnit": {
      "type": "string",
      "format": "MarketPriceUnit000",
      "title": "",
      "required": true
    },
    "MarketSlotName": {
      "type": "string",
      "format": "MarketSlotNameLrdFormat",
      "title": "",
      "required": true
    },
    "IrlTimeUtc": {
      "type": "string",
      "format": "IsoFormat",
      "title": "",
      "required": false
    },
    "MessageId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": false
    },
    "TypeName": {
      "type": "string",
      "value": "latest.price.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

MarketSlot

{
  "gwapi": "001",
  "type_name": "market.slot",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "MarketSlot",
  "url": "https://gridworks.readthedocs.io/en/latest/market-slot.html",
  "formats": {
    "ReasonableUnixTimeS": {
      "type": "string",
      "description": "Integer reflecting unix time seconds between 1970 and 3000",
      "example": ""
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "Type": {
      "type": "market.type.gt.000",
      "title": "",
      "required": true
    },
    "MarketMakerAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "StartUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "market.slot.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

MarketTypeGt

{
  "gwapi": "001",
  "type_name": "market.type.gt",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used by MarketMakers to simultaneously run several different types of Markets. A [MarketMaker](https://gridworks.readthedocs.io/en/latest/market-maker.html) GNode can run several types of Markets. For example, it can run an hourly real-time market and also an ancillary services market for Regulation. This is captured by the concept of MarketType.",
  "url": "https://gridworks.readthedocs.io/en/latest/market-type.html",
  "enums": {
    "MarketPriceUnit000": {
      "type": "string",
      "name": "market.price.unit.000",
      "description": "Price unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "USDPerMWh",
          "description": ""
        }
      ]
    },
    "RecognizedCurrencyUnit000": {
      "type": "string",
      "name": "recognized.currency.unit.000",
      "description": "Unit of currency",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": ""
        },
        {
          "const": "e57c5143",
          "title": "USD",
          "description": "US Dollar"
        },
        {
          "const": "f7b38fc5",
          "title": "GBP",
          "description": "Pounds sterling"
        }
      ]
    },
    "MarketTypeName000": {
      "type": "string",
      "name": "market.type.name.000",
      "description": "Categorizes different markets run by MarketMaker",
      "oneOf": [
        {
          "const": "00000000",
          "title": "unknown",
          "description": "Default unknown"
        },
        {
          "const": "d20b81e4",
          "title": "rt5gate5",
          "description": "Real-time energy, 5 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "b36cbfb4",
          "title": "rt60gate5",
          "description": "Real-time energy, 60 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "94a3fe9b",
          "title": "da60",
          "description": "Day-ahead energy, 60 minute MarketSlots"
        },
        {
          "const": "5f335bdb",
          "title": "rt60gate30",
          "description": "Real-time energy, 60 minute MarketSlots, gate closing 30 minutes prior to start"
        },
        {
          "const": "01a84101",
          "title": "rt15gate5",
          "description": "Real-time energy, 15 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "e997ccfb",
          "title": "rt30gate5",
          "description": "Real-time energy, 30 minute MarketSlots, gate closing 5 minutes prior to start"
        },
        {
          "const": "618f9c0a",
          "title": "rt60gate30b",
          "description": "Real-time energy, 30 minute MarketSlots, gate closing 5 minutes prior to start, QuantityUnit AvgkW"
        }
      ]
    },
    "MarketQuantityUnit000": {
      "type": "string",
      "name": "market.quantity.unit.000",
      "description": "Quantity unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "AvgMW",
          "description": ""
        },
        {
          "const": "c272f3b3",
          "title": "AvgkW",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "Name": {
      "type": "string",
      "format": "MarketTypeName000",
      "title": "Name of the MarketType",
      "required": true
    },
    "DurationMinutes": {
      "type": "integer",
      "title": "Duration of MarketSlots, in minutes",
      "required": true
    },
    "GateClosingSeconds": {
      "type": "integer",
      "title": "Seconds before the start of a MarketSlot after which bids are not accepted",
      "required": true
    },
    "PriceUnit": {
      "type": "string",
      "format": "MarketPriceUnit000",
      "title": "Price Unit for market (e.g. USD Per MWh)",
      "required": true
    },
    "QuantityUnit": {
      "type": "string",
      "format": "MarketQuantityUnit000",
      "title": "Quantity Unit for market (e.g. AvgMW)",
      "required": true
    },
    "CurrencyUnit": {
      "type": "string",
      "format": "RecognizedCurrencyUnit000",
      "title": "Currency Unit for market (e.g. USD)",
      "required": true
    },
    "PriceMax": {
      "type": "integer",
      "title": "PMax, required for defining bids",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "market.type.gt.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

NewTadeedAlgoOptin

{
  "gwapi": "001",
  "type_name": "new.tadeed.algo.optin",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "NewTaDeedIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "OldTaDeedIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TaDaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "SignedTaDeedCreationTxn": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "new.tadeed.algo.optin.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

NewTadeedSend

{
  "gwapi": "001",
  "type_name": "new.tadeed.send",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "NewTaDeedIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "OldTaDeedIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TaDaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "SignedTadeedOptinTxn": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "new.tadeed.send.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

OldTadeedAlgoReturn

{
  "gwapi": "001",
  "type_name": "old.tadeed.algo.return",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "OldTaDeedIdx": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TaDaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "SignedNewDeedTransferTxn": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "old.tadeed.algo.return.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

PriceQuantity

{
  "gwapi": "001",
  "type_name": "price.quantity",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "enums": {
    "MarketPriceUnit000": {
      "type": "string",
      "name": "market.price.unit.000",
      "description": "Price unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "USDPerMWh",
          "description": ""
        }
      ]
    },
    "MarketQuantityUnit000": {
      "type": "string",
      "name": "market.quantity.unit.000",
      "description": "Quantity unit assigned to MarketMaker MarketType",
      "oneOf": [
        {
          "const": "00000000",
          "title": "AvgMW",
          "description": ""
        },
        {
          "const": "c272f3b3",
          "title": "AvgkW",
          "description": ""
        }
      ]
    }
  },
  "properties": {
    "PriceTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "QuantityTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "PriceUnit": {
      "type": "string",
      "format": "MarketPriceUnit000",
      "title": "",
      "required": true
    },
    "QuantityUnit": {
      "type": "string",
      "format": "MarketQuantityUnit000",
      "title": "",
      "required": true
    },
    "InjectionIsPositive": {
      "type": "boolean",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "price.quantity.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

PriceQuantityUnitless

{
  "gwapi": "001",
  "type_name": "price.quantity.unitless",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "properties": {
    "PriceTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "QuantityTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "price.quantity.unitless.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

ScadaCertTransfer

{
  "gwapi": "001",
  "type_name": "scada.cert.transfer",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Scada Certificate Transfer. This is a payload designed to be sent from a SCADA device to the GNodeFactory after the SCADA has opted into its certificate.",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "TaAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "TerminalAsset Alias",
      "description": "GNodeAlias of the TerminalAsset for which the SCADA certificate is issued. The ScadaCert can be found from this.",
      "required": true
    },
    "SignedProof": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "Signed Proof from the SCADA Actor",
      "description": "The Scada GNode has a ScadaAlgoAddr in the GNodeFactory database, and the identity of the SCADA actor can be verified by this.",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "scada.cert.transfer.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Scada is SignedProof signer",
      "description": "Axiom 1: Scada is SignedProof signer. There is a ScadaCert created by the Gnf with this ta_alias, and the txn is the OptIn."
    }
  }
}

SimplesimDriverData

{
  "gwapi": "001",
  "type_name": "simplesim.driver.data",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Generic driver report for a simple Scada Simulation",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "simplesim.driver.data.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SimplesimDriverDataBsh

{
  "gwapi": "001",
  "type_name": "simplesim.driver.data.bsh",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "PowerWatts": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "simplesim.driver.data.bsh.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SimplesimDriverReport

{
  "gwapi": "001",
  "type_name": "simplesim.driver.report",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "DriverDataTypeName": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "DriverData": {
      "type": "simplesim.driver.data.000",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "simplesim.driver.report.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SimplesimSnapshotBrickstorageheater

{
  "gwapi": "001",
  "type_name": "simplesim.snapshot.brickstorageheater",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "UuidCanonicalTextual": {
      "type": "string",
      "description": "A string of hex words separated by hyphens of length 8-4-4-4-12.",
      "example": "652ba6b0-c3bf-4f06-8a80-6b9832d60a25"
    },
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "PowerWatts": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AboutTerminalAssetAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "simplesim.snapshot.brickstorageheater.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SlaEnter

{
  "gwapi": "001",
  "type_name": "sla.enter",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "TerminalAssetAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "sla.enter.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

TadeedSpecsHack

{
  "gwapi": "001",
  "type_name": "tadeed.specs.hack",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    }
  },
  "properties": {
    "TerminalAssetAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "MicroLat": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MicroLon": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "DaemonPort": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "tadeed.specs.hack.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

TavalidatorcertAlgoCreate

{
  "gwapi": "001",
  "type_name": "tavalidatorcert.algo.create",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used for Step 1 of TaValidator certification. Meant to be sent from a pending TaValidator to the GNodeFactory (Gnf), to initiate the process of certifying the pending TaValidator.",
  "url": "https://gridworks.readthedocs.io/en/latest/ta-validator.html",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "The address of the pending TaValidator",
      "required": true
    },
    "HalfSignedCertCreationMtx": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "Algo multi-transaction for certificate creation, with 1 of 2 signatures",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "tavalidatorcert.algo.create.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Is correct Multisig",
      "description": "Decoded HalfSignedCertCreationMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr], signed by ValidatorAddr.",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr"
    },
    "Axiom2": {
      "title": "Is AssetConfigTxn",
      "description": "The transaction must have type AssetConfigTxn."
    },
    "Axiom3": {
      "title": "Is ValidatorCert",
      "description": "For the asset getting created: Total is 1, Decimals is 0, UnitName is VLDTR, Manager is GnfAdminAddr, AssetName is not blank.",
      "url": "https://gridworks.readthedocs.io/en/latest/ta-validator.html#tavalidator-certificate"
    },
    "Axiom5": {
      "title": "Uniqueness",
      "description": "There must not already be a TaValidatorCert belonging to the 2-sig [GnfAdminAddr, ValidatorAddr] address."
    }
  },
  "example": {
    "ValidatorAddr": "7QQT4GN3ZPAQEFCNWF5BMF7NULVK3CWICZVT4GM3BQRISD52YEDLWJ4MII",
    "HalfSignedCertCreationMtx": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxECeARrO2EeYKIqsObwggXge02aA+Lf5D/lXB23O98qsyuf7f9jqDu+WT2U/KB53CPR+XSUWGh5nonEUdp63TDIEo3RocgKhdgGjdHhuiaRhcGFyhKJhbq9Nb2xseSBNZXRlcm1haWShbcQgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmhdAGidW6lVkxEVFKjZmVlzQPoomZ2A6NnZW6qc2FuZG5ldC12MaJnaMQgZGDSySH2HEYnRD3oWlUn77Xl6iBj3QBYmURoHXJQSRCibHbNA+ukbm90ZcQrTW9sbHkgSW5jIFRlbGVtZXRyeSBTdXJ2ZXlvcnMgYW5kIFB1cnZleW9yc6NzbmTEIMdnGF0JPZPHHFmVn8fmYiS7Wzi6UObcSZTp1gpcJYQHpHR5cGWkYWNmZw==",
    "TypeName": "tavalidatorcert.algo.create",
    "Version": "000"
  }
}

TavalidatorcertAlgoTransfer

{
  "gwapi": "001",
  "type_name": "tavalidatorcert.algo.transfer",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used for Step 2 of TaValidator certification. Meant to be sent from a pending TaValidator to the GNodeFactory (Gnf), so the Gnf will transfer its ValidatorCert to the pending TaValidator's Algorand address.",
  "url": "https://gridworks.readthedocs.io/en/latest/ta-validator.html",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    },
    "AlgoMsgPackEncoded": {
      "type": "string",
      "description": "Error is not thrown with algosdk.encoding.future_msg_decode(candidate)",
      "example": "gqRtc2lng6ZzdWJzaWeSgaJwa8Qgi1hzb1WaDzF+215cR8xmiRfUQMrnjqHtQV5PiFBAUtmConBrxCD8IT4Zu8vBAhRNsXoWF+2i6q2KyBZrPhmbDCKJD7rBBqFzxEAEp8UcTEJSyTmgw96/mCnNHKfhkdYMCD5jxWejHRmPCrR8U9z/FBVsoCGbjDTTk2L1k7n/eVlumEk/M1KSe48Jo3RocgKhdgGjdHhuiaRhcGFyhaJhbq9Nb2xseSBNZXRlcm1haWSiYXXZKWh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC9tb2xseWNvL3doby13ZS1hcmUvoW3EIItYc29Vmg8xftteXEfMZokX1EDK546h7UFeT4hQQFLZoXQBonVupVZMRFRSo2ZlZc0D6KJmdlGjZ2VuqnNhbmRuZXQtdjGiZ2jEIC/iF+bI4LU6UTgG4SIxyD10PS0/vNAEa93OC5SVRFn6omx2zQQ5pG5vdGXEK01vbGx5IEluYyBUZWxlbWV0cnkgU3VydmV5b3JzIGFuZCBQdXJ2ZXlvcnOjc25kxCDHZxhdCT2TxxxZlZ/H5mIku1s4ulDm3EmU6dYKXCWEB6R0eXBlpGFjZmc="
    }
  },
  "properties": {
    "ValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "The address of the pending TaValidator",
      "required": true
    },
    "HalfSignedCertTransferMtx": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "Algo multi-transaction for certificate transfer, with 1 of 2 signatures",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "tavalidatorcert.algo.transfer.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Is correct Multisig",
      "description": "Decoded HalfSignedCertTransferMtx must have type MultisigTransaction from the 2-sig MultiAccount [GnfAdminAddr, ValidatorAddr], signed by the ValidatorAddr",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-factory.html#gnfadminaddr"
    },
    "Axiom2": {
      "title": "Transfers correct certificate",
      "description": "- The transaction must be the transfer of an Algorand Standard Asset -The sender must be the 2-sig Multi [GnfAdminAddr, TaValidatorAddr], which also created and owns the ASA - It must be getting sent to the ValidatorAddr -The ASA must have: - Total = 1 - UnitName=VLDITR - GnfAdminAddr as manage - AssetName not blank - The transfer amount must be 1",
      "url": "https://gridworks.readthedocs.io/en/latest/ta-validator.html#tavalidator-certificate"
    },
    "Axiom3": {
      "title": "TaValidator has opted in",
      "description": "ValidatorAddr must be opted into the transferring ASA."
    },
    "Axiom4": {
      "title": "TaValidator has sufficient Algos",
      "description": "ValidatorAddr must have enough Algos to meet the GNodeFactory criterion."
    }
  }
}

TerminalassetCertifyHack

{
  "gwapi": "001",
  "type_name": "terminalasset.certify.hack",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "formats": {
    "LeftRightDot": {
      "type": "string",
      "description": "Lowercase alphanumeric words separated by periods, most significant word (on the left) starting with an alphabet character.",
      "example": "dw1.isone.me.freedom.apple"
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    }
  },
  "properties": {
    "TerminalAssetAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "TaDaemonApiPort": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TaDaemonApiFqdn": {
      "type": "string",
      "title": "",
      "required": true
    },
    "TaDaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "terminalasset.certify.hack.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}