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": ""
    }
  }
}

AtnParamsHeatpumpwithbooststore

{
  "gwapi": "001",
  "type_name": "atn.params.heatpumpwithbooststore",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "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": "VersantStorageHeatTariff",
          "description": ""
        },
        {
          "const": "ea5c675a",
          "title": "VersantATariff",
          "description": ""
        }
      ]
    },
    "EmitterPumpFeedbackModel000": {
      "type": "string",
      "name": "emitter.pump.feedback.model.000",
      "description": "",
      "oneOf": [
        {
          "const": "00000000",
          "title": "ConstantDeltaT",
          "description": ""
        },
        {
          "const": "f6bde4fa",
          "title": "ConstantGpm",
          "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"
        }
      ]
    },
    "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"
        }
      ]
    },
    "MixingValveFeedbackModel000": {
      "type": "string",
      "name": "mixing.valve.feedback.model.000",
      "description": "Control mechanism for a mixing valve, used by Spaceheat SCADAs",
      "oneOf": [
        {
          "const": "00000000",
          "title": "ConstantSwt",
          "description": "Constant Source Water Temp"
        },
        {
          "const": "0397c1df",
          "title": "NaiveVariableSwt",
          "description": "Variable Source Water Temp, naive assumptions about distribution system capabilities"
        },
        {
          "const": "6a668ab8",
          "title": "CautiousVariableSwt",
          "description": "Variable Source Water Temp, conservative assumptions about distribution system capabilities"
        }
      ]
    },
    "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": {
    "StoreSizeGallons": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreMaxPowerKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RatedHeatpumpElectricityKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "MaxHeatpumpSourceWaterTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputSwtF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputDeltaTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputGpm": {
      "type": "number",
      "title": "",
      "required": true
    },
    "EmitterMaxSafeSwtF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CirculatorPumpMaxGpm": {
      "type": "number",
      "title": "",
      "required": true
    },
    "HeatpumpTariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "HeatpumpEnergySupplyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "BoostTariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "BoostEnergySupplyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "StandardOfferPriceDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "DistributionTariffDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientTempStoreF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StorePassiveLossRatio": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RoomTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientPowerInKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ZeroPotentialEnergyWaterTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "EmitterPumpFeedbackModel": {
      "type": "string",
      "format": "EmitterPumpFeedbackModel000",
      "title": "",
      "required": true
    },
    "MixingValveFeedbackModel": {
      "type": "string",
      "format": "MixingValveFeedbackModel000",
      "title": "",
      "required": true
    },
    "CautiousMixingValveTempDeltaF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "Cop1TempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "Cop4TempF": {
      "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
    },
    "StorageSteps": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "FloSlices": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SliceDurationMinutes": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "HouseWorstCaseTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AnnualHvacKwhTh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "BetaOt": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "HouseHeatingCapacity": {
      "type": "number",
      "title": "",
      "required": true
    },
    "GNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "GNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.params.heatpumpwithbooststore.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

AtnParamsReportHeatpumpwithbooststore

{
  "gwapi": "001",
  "type_name": "atn.params.report.heatpumpwithbooststore",
  "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
    },
    "TimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": true
    },
    "IrlTimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "",
      "required": false
    },
    "AtnParams": {
      "type": "atn.params.heatpumpwithbooststore.000",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "atn.params.report.heatpumpwithbooststore.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

BaseGNodeGt

{
  "gwapi": "001",
  "type_name": "base.g.node.gt",
  "version": "002",
  "owner": "gridworks@gridworks-consulting.com",
  "description": ". BaseGNode. Authority is GNodeFactory.",
  "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"
    },
    "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": ""
        }
      ]
    },
    "GNodeStatus100": {
      "type": "string",
      "name": "g.node.status.100",
      "description": "Enum for managing GNode lifecycle",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-status.html",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": "Default value"
        },
        {
          "const": "153d3475",
          "title": "Pending",
          "description": "The GNode exists but cannot be used yet."
        },
        {
          "const": "a2cfc2f7",
          "title": "Active",
          "description": "The GNode can be used."
        },
        {
          "const": "839b38db",
          "title": "PermanentlyDeactivated",
          "description": "The GNode can no longer be used, now or in the future."
        },
        {
          "const": "f5831e1d",
          "title": "Suspended",
          "description": "The GNode cannot be used, but may become active in the future."
        }
      ]
    }
  },
  "properties": {
    "GNodeId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "Alias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "Status": {
      "type": "string",
      "format": "GNodeStatus100",
      "title": "",
      "required": true
    },
    "Role": {
      "type": "string",
      "format": "CoreGNodeRole000",
      "title": "",
      "required": true
    },
    "GNodeRegistryAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": true
    },
    "PrevAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": false
    },
    "GpsPointId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": false
    },
    "OwnershipDeedId": {
      "type": "integer",
      "minimum": 0,
      "title": "",
      "required": false
    },
    "OwnershipDeedValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": false
    },
    "OwnerAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": false
    },
    "DaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": false
    },
    "TradingRightsId": {
      "type": "integer",
      "minimum": 0,
      "title": "",
      "required": false
    },
    "ScadaAlgoAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": false
    },
    "ScadaCertId": {
      "type": "integer",
      "minimum": 0,
      "title": "",
      "required": false
    },
    "TypeName": {
      "type": "string",
      "value": "base.g.node.gt.002",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "002",
      "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
    }
  }
}

DispatchContractConfirmedHeatpumpwithbooststore

{
  "gwapi": "001",
  "type_name": "dispatch.contract.confirmed.heatpumpwithbooststore",
  "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
    },
    "SignedProof": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "",
      "required": true
    },
    "AtnParams": {
      "type": "atn.params.heatpumpwithbooststore.000",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "dispatch.contract.confirmed.heatpumpwithbooststore.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

FloParamsHeatpumpwithbooststore

{
  "gwapi": "001",
  "type_name": "flo.params.heatpumpwithbooststore",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "",
  "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": "VersantStorageHeatTariff",
          "description": ""
        },
        {
          "const": "ea5c675a",
          "title": "VersantATariff",
          "description": ""
        }
      ]
    },
    "EmitterPumpFeedbackModel000": {
      "type": "string",
      "name": "emitter.pump.feedback.model.000",
      "description": "",
      "oneOf": [
        {
          "const": "00000000",
          "title": "ConstantDeltaT",
          "description": ""
        },
        {
          "const": "f6bde4fa",
          "title": "ConstantGpm",
          "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"
        }
      ]
    },
    "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"
        }
      ]
    },
    "MixingValveFeedbackModel000": {
      "type": "string",
      "name": "mixing.valve.feedback.model.000",
      "description": "Control mechanism for a mixing valve, used by Spaceheat SCADAs",
      "oneOf": [
        {
          "const": "00000000",
          "title": "ConstantSwt",
          "description": "Constant Source Water Temp"
        },
        {
          "const": "0397c1df",
          "title": "NaiveVariableSwt",
          "description": "Variable Source Water Temp, naive assumptions about distribution system capabilities"
        },
        {
          "const": "6a668ab8",
          "title": "CautiousVariableSwt",
          "description": "Variable Source Water Temp, conservative assumptions about distribution system capabilities"
        }
      ]
    },
    "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": {
    "StoreSizeGallons": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreMaxPowerKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RatedHeatpumpElectricityKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "MaxHeatpumpSourceWaterTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputSwtF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputDeltaTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputGpm": {
      "type": "number",
      "title": "",
      "required": true
    },
    "EmitterMaxSafeSwtF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CirculatorPumpMaxGpm": {
      "type": "number",
      "title": "",
      "required": true
    },
    "HeatpumpTariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "HeatpumpEnergySupplyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "BoostTariff": {
      "type": "string",
      "format": "DistributionTariff000",
      "title": "",
      "required": true
    },
    "BoostEnergySupplyType": {
      "type": "string",
      "format": "EnergySupplyType000",
      "title": "",
      "required": true
    },
    "StandardOfferPriceDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "DistributionTariffDollarsPerMwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientTempStoreF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StorePassiveLossRatio": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RoomTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AmbientPowerInKw": {
      "type": "number",
      "title": "",
      "required": true
    },
    "ZeroPotentialEnergyWaterTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "EmitterPumpFeedbackModel": {
      "type": "string",
      "format": "EmitterPumpFeedbackModel000",
      "title": "",
      "required": true
    },
    "MixingValveFeedbackModel": {
      "type": "string",
      "format": "MixingValveFeedbackModel000",
      "title": "",
      "required": true
    },
    "CautiousMixingValveTempDeltaF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "Cop1TempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "Cop4TempF": {
      "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
    },
    "StorageSteps": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "HouseWorstCaseTempF": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "SystemMaxHeatOutputKwAvg": {
      "type": "number",
      "title": "",
      "required": true
    },
    "K": {
      "type": "number",
      "title": "",
      "description": "Rate at which temperature falls in the pipes, when divided by gpm",
      "required": true
    },
    "IsRegulating": {
      "type": "boolean",
      "title": "",
      "required": true
    },
    "SliceDurationMinutes": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "PowerRequiredByHouseFromSystemAvgKwList": {
      "type": "number",
      "title": "",
      "required": true
    },
    "OutsideTempF": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RealtimeElectricityPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "DistributionPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RegulationPrice": {
      "type": "number",
      "title": "",
      "required": true
    },
    "RtElecPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "WeatherUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": true
    },
    "DistPriceUid": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "",
      "required": false
    },
    "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
    },
    "TypeName": {
      "type": "string",
      "value": "flo.params.heatpumpwithbooststore.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

GNodeGt

{
  "gwapi": "001",
  "type_name": "g.node.gt",
  "version": "002",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used to send and receive updates about GNodes. GNodes are the building blocks of Gridworks. They have slowly-changing state that must be kept in sync across a distributed system. Therefore, they require a global registry to act as Single Source of Truth (SSoT). This class is used for that SSoT to share information with actors about their GNodes, and the GNodes that they will observe and communicate with.",
  "url": "https://gridworks.readthedocs.io/en/latest/g-node.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"
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    }
  },
  "enums": {
    "GNodeRole000": {
      "type": "string",
      "name": "g.node.role.000",
      "description": "Categorizes GNodes by their function within GridWorks",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-role.html",
      "oneOf": [
        {
          "const": "00000000",
          "title": "GNode",
          "description": "Default value"
        },
        {
          "const": "bdeaa0b1",
          "title": "TerminalAsset",
          "url": "https://gridworks.readthedocs.io/en/latest/transactive-device.html",
          "description": "An avatar for a real-word Transactive Device"
        },
        {
          "const": "8021dcad",
          "title": "AtomicTNode",
          "description": "Transacts in markets on behalf of, and controlling the power use of, a TerminalAsset"
        },
        {
          "const": "304890c5",
          "title": "MarketMaker",
          "description": "Runs energy markets at its Node in the GNodeTree"
        },
        {
          "const": "8eb5b9e1",
          "title": "AtomicMeteringNode",
          "description": "Role of a GNode that will become an AtomicTNode, prior to it owning TaTradingRights"
        },
        {
          "const": "234cfaa2",
          "title": "ConductorTopologyNode",
          "description": "An avatar for a real-world electric grid node - e.g. a substation or transformer"
        },
        {
          "const": "fec0c127",
          "title": "InterconnectionComponent",
          "description": "An avatar for a cable or wire on the electric grid"
        },
        {
          "const": "3901c7d2",
          "title": "World",
          "description": "Adminstrative GNode responsible for managing and authorizing instances"
        },
        {
          "const": "c499943c",
          "title": "TimeCoordinator",
          "description": "Responsible for managing time in simulations"
        },
        {
          "const": "88112a93",
          "title": "Supervisor",
          "description": "Responsible for GNode actors running in a container"
        },
        {
          "const": "674ad859",
          "title": "Scada",
          "description": "GNode associated to the device and code that directly monitors and actuates a Transactive Device"
        },
        {
          "const": "2161739f",
          "title": "PriceService",
          "description": "Provides price forecasts for markets run by MarketMakers"
        },
        {
          "const": "1dce1efd",
          "title": "WeatherService",
          "description": "Provides weather forecasts"
        },
        {
          "const": "db57d184",
          "title": "AggregatedTNode",
          "description": "An aggregation of AtomicTNodes"
        },
        {
          "const": "07f28817",
          "title": "Persister",
          "description": "Responsible for acking events with delivery guarantees"
        }
      ]
    },
    "GNodeStatus100": {
      "type": "string",
      "name": "g.node.status.100",
      "description": "Enum for managing GNode lifecycle",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-status.html",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": "Default value"
        },
        {
          "const": "153d3475",
          "title": "Pending",
          "description": "The GNode exists but cannot be used yet."
        },
        {
          "const": "a2cfc2f7",
          "title": "Active",
          "description": "The GNode can be used."
        },
        {
          "const": "839b38db",
          "title": "PermanentlyDeactivated",
          "description": "The GNode can no longer be used, now or in the future."
        },
        {
          "const": "f5831e1d",
          "title": "Suspended",
          "description": "The GNode cannot be used, but may become active in the future."
        }
      ]
    }
  },
  "properties": {
    "GNodeId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "Immutable identifier for GNode",
      "required": true
    },
    "Alias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "Structured mutable identifier for GNode",
      "description": "The GNode Aliases are used for organizing how actors in Gridworks communicate. Together, they also encode the known topology of the electric grid.",
      "required": true
    },
    "Status": {
      "type": "string",
      "format": "GNodeStatus100",
      "title": "Lifecycle indicator",
      "required": true
    },
    "Role": {
      "type": "string",
      "format": "GNodeRole000",
      "title": "Role within Gridworks",
      "required": true
    },
    "GNodeRegistryAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address for GNodeRegistry",
      "description": "For actors in a Gridworks world, the GNodeRegistry is the Single Source of Truth for existence and updates to GNodes.",
      "required": true
    },
    "PrevAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "Previous GNodeAlias",
      "description": "As the topology of the grid updates, GNodeAliases will change to reflect that. This may happen a handful of times over the life of a GNode.",
      "required": false
    },
    "GpsPointId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "Lat/lon of GNode",
      "description": "Some GNodes, in particular those acting as avatars for physical devices that are part of or are attached to the electric grid, have physical locations. These locations are used to help validate the grid topology.",
      "required": false
    },
    "OwnershipDeedId": {
      "type": "integer",
      "minimum": 0,
      "title": "Algorand Id of ASA Deed",
      "description": "The Id of the TaDeed Algorand Standard Asset if the GNode is a TerminalAsset.",
      "required": false
    },
    "OwnershipDeedValidatorAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address of Validator",
      "description": "Deeds are issued by the GNodeFactory, in partnership with third party Validators.",
      "required": false
    },
    "OwnerAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address of the deed owner",
      "required": false
    },
    "DaemonAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address of the daemon app",
      "description": "Some GNodes have Daemon applications associated to them to handle blockchain operations.",
      "required": false
    },
    "TradingRightsId": {
      "type": "integer",
      "minimum": 0,
      "title": "Algorand Id of ASA TradingRights",
      "description": "The Id of the TradingRights Algorand Standard Asset.",
      "required": false
    },
    "ScadaAlgoAddr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "",
      "required": false
    },
    "ScadaCertId": {
      "type": "integer",
      "minimum": 0,
      "title": "",
      "required": false
    },
    "ComponentId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "Unique identifier for GNode's Component",
      "description": "Used if a GNode is an avatar for a physical device. The serial number of a device is different from its make/model. The ComponentId captures the specific instance of the device.",
      "required": false
    },
    "DisplayName": {
      "type": "string",
      "title": "Display Name",
      "required": false
    },
    "TypeName": {
      "type": "string",
      "value": "g.node.gt.002",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "002",
      "required": true
    }
  },
  "example": {
    "GNodeId": "575f374f-8533-4733-baf7-91146c607445",
    "Alias": "d1.isone.ver.keene",
    "StatusGtEnumSymbol": "a2cfc2f7",
    "RoleGtEnumSymbol": "234cfaa2",
    "GNodeRegistryAddr": "MONSDN5MXG4VMIOHJNCJJBVASG7HEZQSCEIKJAPEPVI5ZJUMQGXQKSOAYU",
    "TypeName": "g.node.gt",
    "Version": "000"
  }
}

GNodeInstanceGt

{
  "gwapi": "001",
  "type_name": "g.node.instance.gt",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used to send and receive updates about GNodeInstances. One of the layers of abstraction connecting a GNode with a running app in a Docker container.",
  "url": "https://gridworks.readthedocs.io/en/latest/g-node-instance.html",
  "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"
    },
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    }
  },
  "enums": {
    "GniStatus000": {
      "type": "string",
      "name": "gni.status.000",
      "description": "Enum for managing GNodeInstance lifecycle",
      "url": "https://gridworks.readthedocs.io/en/latest/g-node-instance.html",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": "Default Value"
        },
        {
          "const": "7890ab0a",
          "title": "Pending",
          "description": "Has been created by the World, but has not yet finished provisioning"
        },
        {
          "const": "69241259",
          "title": "Active",
          "description": "Active in its GridWorks world. If the GNodeInstance has an actor, that actor is communicating"
        },
        {
          "const": "8222421f",
          "title": "Done",
          "description": "No longer represents the GNode."
        }
      ]
    },
    "StrategyName000": {
      "type": "string",
      "name": "strategy.name.000",
      "description": "Used to assign code to run a particular GNodeInstance",
      "oneOf": [
        {
          "const": "00000000",
          "title": "NoActor",
          "description": "Assigned to GNodes that do not have actors"
        },
        {
          "const": "642c83d3",
          "title": "WorldA",
          "description": "Basic GridWorks world strategy"
        },
        {
          "const": "4bb2cf7e",
          "title": "SupervisorA",
          "description": "Supervisor A Strategy, in [gridworks-atn package](https://pypi.org/project/gridworks-atn/)"
        },
        {
          "const": "f5961401",
          "title": "AtnHeatPumpWithBoostStore",
          "description": "GridWorks strategy for an AtomicTNode representing a type of heat pump storage heating system"
        },
        {
          "const": "73fbe6ab",
          "title": "TcGlobalA",
          "description": "Basic GridWorks TimeCoordinator strategy, in [gridworks-timecoordinator repo](https://github.com/thegridelectric/gridworks-timecoordinator)"
        },
        {
          "const": "5e18a52e",
          "title": "MarketMakerA",
          "description": "Simple GridWorks MarketMaker strategy, in [gridworks-marketmaker repo](https://github.com/thegridelectric/gridworks-marketmaker)"
        }
      ]
    }
  },
  "properties": {
    "GNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "Immutable identifier for GNodeInstance (Gni)",
      "required": true
    },
    "GNode": {
      "type": "g.node.gt.002",
      "title": "The GNode represented by the Gni",
      "required": true
    },
    "Strategy": {
      "type": "string",
      "format": "StrategyName000",
      "title": "Used to determine the code running in a GNode actor application",
      "required": true
    },
    "Status": {
      "type": "string",
      "format": "GniStatus000",
      "title": "Lifecycle Status for Gni",
      "required": true
    },
    "SupervisorContainerId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "The Id of the docker container where the Gni runs",
      "required": true
    },
    "StartTimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "When the gni starts representing the GNode",
      "description": "Specifically, when the Status changes from Pending to Active. Note that this is time in the GNode's World, which may not be real time if it is a simulation.",
      "required": true
    },
    "EndTimeUnixS": {
      "type": "integer",
      "title": "When the gni stops representing the GNode",
      "description": "Specifically, when the Status changes from Active to Done.",
      "required": true
    },
    "AlgoAddress": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand address for Gni",
      "required": false
    },
    "TypeName": {
      "type": "string",
      "value": "g.node.instance.gt.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

GtDispatchBoolean

{
  "gwapi": "001",
  "type_name": "gt.dispatch.boolean",
  "version": "110",
  "owner": "gridworks@gridworks-consulting.com",
  "description": ". Boolean dispatch command sent over the cloud broker from one GNode (FromGNodeAlias/ FromGNodeId) to another (ToGNodeAlias). AboutNodeAlias is the node getting dispatched. It may be a GNode, but it can also be a SpaceHeatNode.",
  "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"
    },
    "ReasonableUnixTimeMs": {
      "type": "string",
      "description": "An integer reflecting unix time in ms between midnight Jan 1 2000 and midnight Jan 1 3000 UTC",
      "example": ""
    }
  },
  "properties": {
    "AboutNodeName": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "The Spaceheat Node getting dispatched",
      "required": true
    },
    "ToGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "GNodeAlias of the SCADA",
      "required": true
    },
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "GNodeAlias of AtomicTNode",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "GNodeInstance of the AtomicTNode",
      "required": true
    },
    "RelayState": {
      "type": "integer",
      "title": "0 or 1",
      "required": true
    },
    "SendTimeUnixMs": {
      "type": "integer",
      "format": "ReasonableUnixTimeMs",
      "title": "Time the AtomicTNode sends the dispatch, by its clock",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "gt.dispatch.boolean.110",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "110",
      "required": true
    }
  }
}

GwCertId

{
  "gwapi": "001",
  "type_name": "gw.cert.id",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Clarifies whether cert id is an Algorand Standard Asset or SmartSig",
  "formats": {
    "AlgoAddressStringFormat": {
      "type": "string",
      "description": "String of length 32, characters are all base32 digits.",
      "example": "RNMHG32VTIHTC7W3LZOEPTDGREL5IQGK46HKD3KBLZHYQUCAKLMT4G5ALI"
    }
  },
  "enums": {
    "AlgoCertType000": {
      "type": "string",
      "name": "algo.cert.type.000",
      "description": "Used to distinguish ASA vs SmartSignature certificates",
      "oneOf": [
        {
          "const": "00000000",
          "title": "ASA",
          "description": "Certificate based on Algorand Standard Asset"
        },
        {
          "const": "086b5165",
          "title": "SmartSig",
          "description": "Certificate based on Algorand Smart Signature"
        }
      ]
    }
  },
  "properties": {
    "Type": {
      "type": "string",
      "format": "AlgoCertType000",
      "title": "",
      "required": true
    },
    "Idx": {
      "type": "integer",
      "minimum": 0,
      "title": "ASA Index",
      "required": false
    },
    "Addr": {
      "type": "string",
      "format": "AlgoAddressStringFormat",
      "title": "Algorand Smart Signature Address",
      "required": false
    },
    "TypeName": {
      "type": "string",
      "value": "gw.cert.id.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  },
  "axioms": {
    "Axiom1": {
      "title": "Cert type consistency",
      "description": "If Type is ASA, then Id exists and Addr does not. Otherwise, Addr exists and Id does not."
    }
  },
  "example": {
    "TypeGtEnumSymbol": "00000000",
    "Idx": 14,
    "TypeName": "gw.cert.id",
    "Version": "000"
  }
}

HeartbeatA

{
  "gwapi": "001",
  "type_name": "heartbeat.a",
  "version": "100",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used to check that an actor can both send and receive messages. Payload for direct messages sent back and forth between actors, for example a Supervisor and one of its subordinates.",
  "url": "https://gridworks.readthedocs.io/en/latest/g-node-instance.html",
  "formats": {
    "HexChar": {
      "type": "string",
      "description": "single-char string in '0123456789abcdefABCDEF'",
      "example": "d"
    }
  },
  "properties": {
    "MyHex": {
      "type": "string",
      "format": "HexChar",
      "title": "Hex character getting sent",
      "required": true
    },
    "YourLastHex": {
      "type": "string",
      "format": "HexChar",
      "title": "Last hex character received from heartbeat partner",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "heartbeat.a.100",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "100",
      "required": true
    }
  }
}

HeartbeatAlgoAudit

{
  "gwapi": "001",
  "type_name": "heartbeat.algo.audit",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": ". Algo payload with report of last HeartbeatB sent to partner via Rabbit, to be sent to DispatchContract on Algo blockchain",
  "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": {
    "SignedProof": {
      "type": "string",
      "format": "AlgoMsgPackEncoded",
      "title": "Tiny signed payment to DispatchContract to prove identity",
      "description": "Can be a minimal payment, as long as it comes from the AtomicTNode or SCADA.",
      "required": true
    },
    "Heartbeat": {
      "type": "heartbeat.b.000",
      "title": "Heartbeat sender last sent to its partner",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "heartbeat.algo.audit.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

HeartbeatB

{
  "gwapi": "001",
  "type_name": "heartbeat.b",
  "version": "001",
  "owner": "gridworks@gridworks-consulting.com",
  "description": ". Heartbeat for Scada-AtomicTNode DispatchContract, to send via RabbitMQ",
  "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"
    },
    "HexChar": {
      "type": "string",
      "description": "single-char string in '0123456789abcdefABCDEF'",
      "example": "d"
    },
    "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"
    },
    "ReasonableUnixTimeMs": {
      "type": "string",
      "description": "An integer reflecting unix time in ms between midnight Jan 1 2000 and midnight Jan 1 3000 UTC",
      "example": ""
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "My GNodeAlias",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "My GNodeInstanceId",
      "required": true
    },
    "MyHex": {
      "type": "string",
      "format": "HexChar",
      "title": "Hex character getting sent",
      "required": true
    },
    "YourLastHex": {
      "type": "string",
      "format": "HexChar",
      "title": "Last hex character received from heartbeat partner. If the heartbeat initiator wants to start the sequence over, it does not include this.",
      "required": false
    },
    "LastReceivedTimeUnixMs": {
      "type": "integer",
      "format": "ReasonableUnixTimeMs",
      "title": "Time YourLastHex was received on my clock",
      "required": true
    },
    "SendTimeUnixMs": {
      "type": "integer",
      "format": "ReasonableUnixTimeMs",
      "title": "Time this message is made and sent on my clock",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "heartbeat.b.001",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "001",
      "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
    }
  }
}

Ready

{
  "gwapi": "001",
  "type_name": "ready",
  "version": "001",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used in simulations by TimeCoordinator GNodes. Only intended for simulations that do not have sub-second TimeSteps. TimeCoordinators based on ```gridworks-timecoordinator``` have a notion of actors whose `Ready` must be received before issuing the next TimeStep.",
  "url": "https://gridworks.readthedocs.io/en/latest/time-coordinator.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"
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "The GNodeAlias of the sender",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "The GNodeInstanceId of the sender",
      "required": true
    },
    "TimeUnixS": {
      "type": "integer",
      "title": "Latest simulated time for sender",
      "description": "The time in unix seconds of the latest TimeStep received from the TimeCoordinator by the actor that sent the payload.",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "ready.001",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "001",
      "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."
    }
  }
}

SimScadaDriverReport

{
  "gwapi": "001",
  "type_name": "sim.scada.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
    },
    "BoostPowerKwTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "HeatpumpPowerKwTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CopTimes10": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "sim.scada.driver.report.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SimTimestep

{
  "gwapi": "001",
  "type_name": "sim.timestep",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Sent by TimeCoordinators to coordinate time. For simulated actors, time progresses discretely on receipt of these time steps.",
  "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"
    },
    "ReasonableUnixTimeMs": {
      "type": "string",
      "description": "An integer reflecting unix time in ms between midnight Jan 1 2000 and midnight Jan 1 3000 UTC",
      "example": ""
    }
  },
  "properties": {
    "FromGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "The GNodeAlias of the sender",
      "description": "The sender should always be a GNode Actor of role TimeCoordinator.",
      "required": true
    },
    "FromGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "The GNodeInstanceId of the sender",
      "required": true
    },
    "TimeUnixS": {
      "type": "integer",
      "format": "ReasonableUnixTimeS",
      "title": "Current time in unix seconds",
      "required": true
    },
    "TimestepCreatedMs": {
      "type": "integer",
      "format": "ReasonableUnixTimeMs",
      "title": "The real time created, in unix milliseconds",
      "required": true
    },
    "MessageId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "MessageId",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "sim.timestep.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
    }
  }
}

SnapshotHeatpumpwithbooststore

{
  "gwapi": "001",
  "type_name": "snapshot.heatpumpwithbooststore",
  "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
    },
    "BoostPowerKwTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "HeatpumpPowerKwTimes1000": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "StoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "CopTimes10": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "MaxStoreKwh": {
      "type": "integer",
      "title": "",
      "required": true
    },
    "AboutTerminalAssetAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "snapshot.heatpumpwithbooststore.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SuperStarter

{
  "gwapi": "001",
  "type_name": "super.starter",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used by world to seed a docker container with data needed to spawn and superviser GNodeInstances",
  "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": {
    "SupervisorContainer": {
      "type": "supervisor.container.gt.000",
      "title": "Key data about the docker container",
      "required": true
    },
    "GniList": {
      "type": "g.node.instance.gt.000",
      "title": "List of GNodeInstances (Gnis) run in the container",
      "required": true
    },
    "AliasWithKeyList": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "Aliases of Gnis that own Algorand secret keys",
      "required": true
    },
    "KeyList": {
      "type": "string",
      "title": "Algorand secret keys owned by Gnis",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "super.starter.000",
      "title": "The type name"
    },
    "Version": {
      "type": "string",
      "title": "The type version",
      "default": "000",
      "required": true
    }
  }
}

SupervisorContainerGt

{
  "gwapi": "001",
  "type_name": "supervisor.container.gt",
  "version": "000",
  "owner": "gridworks@gridworks-consulting.com",
  "description": "Used to send and receive updates about SupervisorContainers. Sent from a GNodeRegistry to a World, and used also by the World as it spawns GNodeInstances in docker instances (i.e., the SupervisorContainers).",
  "url": "https://gridworks.readthedocs.io/en/latest/supervisor.html",
  "formats": {
    "WorldInstanceNameFormat": {
      "type": "string",
      "description": "AlphanumericString + '__' + Integer",
      "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"
    }
  },
  "enums": {
    "SupervisorContainerStatus000": {
      "type": "string",
      "name": "supervisor.container.status.000",
      "description": "Manages lifecycle of the docker containers where GridWorks actors run",
      "oneOf": [
        {
          "const": "00000000",
          "title": "Unknown",
          "description": "Default value"
        },
        {
          "const": "f48cff43",
          "title": "Authorized",
          "description": "World has created the information for starting the container"
        },
        {
          "const": "17c5cc54",
          "title": "Launching",
          "description": "World has launched the container"
        },
        {
          "const": "ec342324",
          "title": "Provisioning",
          "description": "Container has started, but is going through its provisioning process"
        },
        {
          "const": "cfde1b40",
          "title": "Running",
          "description": "GNode actors in the container are active"
        },
        {
          "const": "4e28b6ae",
          "title": "Stopped",
          "description": "Stopped"
        },
        {
          "const": "da2dafe0",
          "title": "Deleted",
          "description": "Deleted"
        }
      ]
    }
  },
  "properties": {
    "SupervisorContainerId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "Id of the docker SupervisorContainer",
      "required": true
    },
    "Status": {
      "type": "string",
      "format": "SupervisorContainerStatus000",
      "title": "",
      "required": true
    },
    "WorldInstanceName": {
      "type": "string",
      "format": "WorldInstanceNameFormat",
      "title": "Name of the WorldInstance",
      "description": "For example, d1__1 is a potential name for a World whose World GNode has alias d1.",
      "required": true
    },
    "SupervisorGNodeInstanceId": {
      "type": "string",
      "format": "UuidCanonicalTextual",
      "title": "Id of the SupervisorContainer's prime actor (aka the Supervisor GNode)",
      "required": true
    },
    "SupervisorGNodeAlias": {
      "type": "string",
      "format": "LeftRightDot",
      "title": "Alias of the SupervisorContainer's prime actor (aka the Supervisor GNode)",
      "required": true
    },
    "TypeName": {
      "type": "string",
      "value": "supervisor.container.gt.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
    }
  }
}