{
  "contract_name": "transfers",
  "contract_version": "0.1.0",
  "idl_version": "1.0.0",
  "instantiate": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "InstantiateMsg",
    "type": "object",
    "required": [
      "denom",
      "quartz"
    ],
    "properties": {
      "denom": {
        "type": "string"
      },
      "quartz": {
        "$ref": "#/definitions/RawInstantiate_for_RawEpidAttestation"
      }
    },
    "additionalProperties": false,
    "definitions": {
      "Binary": {
        "description": "Binary is a wrapper around Vec<u8> to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec<u8>. See also <https://github.com/CosmWasm/cosmwasm/blob/main/docs/MESSAGE_TYPES.md>.",
        "type": "string"
      },
      "Duration": {
        "type": "object",
        "required": [
          "nanos",
          "secs"
        ],
        "properties": {
          "nanos": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "secs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "HexBinary": {
        "description": "This is a wrapper around Vec<u8> to add hex de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is similar to `cosmwasm_std::Binary` but uses hex. See also <https://github.com/CosmWasm/cosmwasm/blob/main/docs/MESSAGE_TYPES.md>.",
        "type": "string"
      },
      "IASReport": {
        "type": "object",
        "required": [
          "report",
          "reportsig"
        ],
        "properties": {
          "report": {
            "$ref": "#/definitions/ReportBody"
          },
          "reportsig": {
            "$ref": "#/definitions/Binary"
          }
        },
        "additionalProperties": false
      },
      "RawAttested_for_RawCoreInstantiate_and_RawEpidAttestation": {
        "type": "object",
        "required": [
          "attestation",
          "msg"
        ],
        "properties": {
          "attestation": {
            "$ref": "#/definitions/RawEpidAttestation"
          },
          "msg": {
            "$ref": "#/definitions/RawCoreInstantiate"
          }
        },
        "additionalProperties": false
      },
      "RawConfig": {
        "type": "object",
        "required": [
          "epoch_duration",
          "light_client_opts",
          "mr_enclave"
        ],
        "properties": {
          "epoch_duration": {
            "$ref": "#/definitions/Duration"
          },
          "light_client_opts": {
            "$ref": "#/definitions/RawLightClientOpts"
          },
          "mr_enclave": {
            "$ref": "#/definitions/HexBinary"
          }
        },
        "additionalProperties": false
      },
      "RawCoreInstantiate": {
        "type": "object",
        "required": [
          "config"
        ],
        "properties": {
          "config": {
            "$ref": "#/definitions/RawConfig"
          }
        },
        "additionalProperties": false
      },
      "RawEpidAttestation": {
        "type": "object",
        "required": [
          "report"
        ],
        "properties": {
          "report": {
            "$ref": "#/definitions/IASReport"
          }
        },
        "additionalProperties": false
      },
      "RawInstantiate_for_RawEpidAttestation": {
        "$ref": "#/definitions/RawAttested_for_RawCoreInstantiate_and_RawEpidAttestation"
      },
      "RawLightClientOpts": {
        "type": "object",
        "required": [
          "chain_id",
          "max_block_lag",
          "max_clock_drift",
          "trust_threshold",
          "trusted_hash",
          "trusted_height",
          "trusting_period"
        ],
        "properties": {
          "chain_id": {
            "type": "string"
          },
          "max_block_lag": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "max_clock_drift": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "trust_threshold": {
            "type": "array",
            "items": [
              {
                "type": "integer",
                "format": "uint64",
                "minimum": 0.0
              },
              {
                "type": "integer",
                "format": "uint64",
                "minimum": 0.0
              }
            ],
            "maxItems": 2,
            "minItems": 2
          },
          "trusted_hash": {
            "$ref": "#/definitions/HexBinary"
          },
          "trusted_height": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "trusting_period": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        },
        "additionalProperties": false
      },
      "ReportBody": {
        "type": "object",
        "required": [
          "advisoryIDs",
          "advisoryURL",
          "epidPseudonym",
          "id",
          "isvEnclaveQuoteBody",
          "isvEnclaveQuoteStatus",
          "platformInfoBlob",
          "timestamp",
          "version"
        ],
        "properties": {
          "advisoryIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "advisoryURL": {
            "type": "string"
          },
          "epidPseudonym": {
            "$ref": "#/definitions/Binary"
          },
          "id": {
            "type": "string"
          },
          "isvEnclaveQuoteBody": {
            "$ref": "#/definitions/Binary"
          },
          "isvEnclaveQuoteStatus": {
            "type": "string"
          },
          "platformInfoBlob": {
            "type": "string"
          },
          "timestamp": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        },
        "additionalProperties": false
      }
    }
  },
  "execute": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "ExecuteMsg",
    "oneOf": [
      {
        "type": "string",
        "enum": [
          "deposit",
          "withdraw"
        ]
      },
      {
        "type": "object",
        "required": [
          "quartz"
        ],
        "properties": {
          "quartz": {
            "$ref": "#/definitions/RawExecute_for_RawEpidAttestation"
          }
        },
        "additionalProperties": false
      },
      {
        "type": "object",
        "required": [
          "transfer_request"
        ],
        "properties": {
          "transfer_request": {
            "$ref": "#/definitions/TransferRequestMsg"
          }
        },
        "additionalProperties": false
      },
      {
        "type": "object",
        "required": [
          "clear_text_transfer_request"
        ],
        "properties": {
          "clear_text_transfer_request": {
            "$ref": "#/definitions/ClearTextTransferRequestMsg"
          }
        },
        "additionalProperties": false
      },
      {
        "type": "object",
        "required": [
          "update"
        ],
        "properties": {
          "update": {
            "$ref": "#/definitions/RawAttested_for_RawUpdateMsg_and_RawEpidAttestation"
          }
        },
        "additionalProperties": false
      }
    ],
    "definitions": {
      "Addr": {
        "description": "A human readable address.\n\nIn Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length.\n\nThis type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances.\n\nThis type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance.",
        "type": "string"
      },
      "Binary": {
        "description": "Binary is a wrapper around Vec<u8> to add base64 de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is only needed as serde-json-{core,wasm} has a horrible encoding for Vec<u8>. See also <https://github.com/CosmWasm/cosmwasm/blob/main/docs/MESSAGE_TYPES.md>.",
        "type": "string"
      },
      "ClearTextTransferRequestMsg": {
        "type": "object",
        "required": [
          "amount",
          "receiver",
          "sender"
        ],
        "properties": {
          "amount": {
            "$ref": "#/definitions/Uint128"
          },
          "receiver": {
            "$ref": "#/definitions/Addr"
          },
          "sender": {
            "$ref": "#/definitions/Addr"
          }
        },
        "additionalProperties": false
      },
      "HexBinary": {
        "description": "This is a wrapper around Vec<u8> to add hex de/serialization with serde. It also adds some helper methods to help encode inline.\n\nThis is similar to `cosmwasm_std::Binary` but uses hex. See also <https://github.com/CosmWasm/cosmwasm/blob/main/docs/MESSAGE_TYPES.md>.",
        "type": "string"
      },
      "IASReport": {
        "type": "object",
        "required": [
          "report",
          "reportsig"
        ],
        "properties": {
          "report": {
            "$ref": "#/definitions/ReportBody"
          },
          "reportsig": {
            "$ref": "#/definitions/Binary"
          }
        },
        "additionalProperties": false
      },
      "RawAttested_for_RawSessionCreate_and_RawEpidAttestation": {
        "type": "object",
        "required": [
          "attestation",
          "msg"
        ],
        "properties": {
          "attestation": {
            "$ref": "#/definitions/RawEpidAttestation"
          },
          "msg": {
            "$ref": "#/definitions/RawSessionCreate"
          }
        },
        "additionalProperties": false
      },
      "RawAttested_for_RawSessionSetPubKey_and_RawEpidAttestation": {
        "type": "object",
        "required": [
          "attestation",
          "msg"
        ],
        "properties": {
          "attestation": {
            "$ref": "#/definitions/RawEpidAttestation"
          },
          "msg": {
            "$ref": "#/definitions/RawSessionSetPubKey"
          }
        },
        "additionalProperties": false
      },
      "RawAttested_for_RawUpdateMsg_and_RawEpidAttestation": {
        "type": "object",
        "required": [
          "attestation",
          "msg"
        ],
        "properties": {
          "attestation": {
            "$ref": "#/definitions/RawEpidAttestation"
          },
          "msg": {
            "$ref": "#/definitions/RawUpdateMsg"
          }
        },
        "additionalProperties": false
      },
      "RawEpidAttestation": {
        "type": "object",
        "required": [
          "report"
        ],
        "properties": {
          "report": {
            "$ref": "#/definitions/IASReport"
          }
        },
        "additionalProperties": false
      },
      "RawExecute_for_RawEpidAttestation": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "session_create"
            ],
            "properties": {
              "session_create": {
                "$ref": "#/definitions/RawAttested_for_RawSessionCreate_and_RawEpidAttestation"
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "session_set_pub_key"
            ],
            "properties": {
              "session_set_pub_key": {
                "$ref": "#/definitions/RawAttested_for_RawSessionSetPubKey_and_RawEpidAttestation"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "RawSessionCreate": {
        "type": "object",
        "required": [
          "nonce"
        ],
        "properties": {
          "nonce": {
            "$ref": "#/definitions/HexBinary"
          }
        },
        "additionalProperties": false
      },
      "RawSessionSetPubKey": {
        "type": "object",
        "required": [
          "nonce",
          "pub_key"
        ],
        "properties": {
          "nonce": {
            "$ref": "#/definitions/HexBinary"
          },
          "pub_key": {
            "$ref": "#/definitions/HexBinary"
          }
        },
        "additionalProperties": false
      },
      "RawUpdateMsg": {
        "type": "object",
        "required": [
          "ciphertext",
          "quantity",
          "withdrawals"
        ],
        "properties": {
          "ciphertext": {
            "$ref": "#/definitions/HexBinary"
          },
          "quantity": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "withdrawals": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/definitions/Uint128"
            }
          }
        },
        "additionalProperties": false
      },
      "ReportBody": {
        "type": "object",
        "required": [
          "advisoryIDs",
          "advisoryURL",
          "epidPseudonym",
          "id",
          "isvEnclaveQuoteBody",
          "isvEnclaveQuoteStatus",
          "platformInfoBlob",
          "timestamp",
          "version"
        ],
        "properties": {
          "advisoryIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "advisoryURL": {
            "type": "string"
          },
          "epidPseudonym": {
            "$ref": "#/definitions/Binary"
          },
          "id": {
            "type": "string"
          },
          "isvEnclaveQuoteBody": {
            "$ref": "#/definitions/Binary"
          },
          "isvEnclaveQuoteStatus": {
            "type": "string"
          },
          "platformInfoBlob": {
            "type": "string"
          },
          "timestamp": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        },
        "additionalProperties": false
      },
      "TransferRequestMsg": {
        "type": "object",
        "required": [
          "ciphertext",
          "digest"
        ],
        "properties": {
          "ciphertext": {
            "$ref": "#/definitions/HexBinary"
          },
          "digest": {
            "$ref": "#/definitions/HexBinary"
          }
        },
        "additionalProperties": false
      },
      "Uint128": {
        "description": "A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq.\n\n# Examples\n\nUse `from` to create instances of this and `u128` to get the value out:\n\n``` # use cosmwasm_std::Uint128; let a = Uint128::from(123u128); assert_eq!(a.u128(), 123);\n\nlet b = Uint128::from(42u64); assert_eq!(b.u128(), 42);\n\nlet c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ```",
        "type": "string"
      }
    }
  },
  "query": null,
  "migrate": null,
  "sudo": null,
  "responses": null
}