[
  {
    "type": "constructor",
    "inputs": [
      {
        "name": "permitAuthority",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "graphFactory",
        "type": "address",
        "internalType": "contract IProgrammableCreate2GraphDeployerV1"
      },
      {
        "name": "poolManager",
        "type": "address",
        "internalType": "contract IPoolManager"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "CHAIN_ID",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "GRAPH_FACTORY",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IProgrammableCreate2GraphDeployerV1"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "GRAPH_FACTORY_RUNTIME_CODE_HASH",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "PERMIT_AUTHORITY",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "PERMIT_AUTHORITY_RUNTIME_CODE_HASH",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "POOL_MANAGER",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "contract IPoolManager"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "POOL_MANAGER_RUNTIME_CODE_HASH",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "componentRuntimeCodeHash",
    "inputs": [
      {
        "name": "component",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "runtimeCodeHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "computeComponentSetHash",
    "inputs": [
      {
        "name": "components",
        "type": "tuple[]",
        "internalType": "struct IProgrammableLaunchStampRouterV1.ComponentV1[]",
        "components": [
          {
            "name": "resultIndex",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "account",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "runtimeCodeHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "kind",
            "type": "uint8",
            "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentKindV1"
          },
          {
            "name": "scope",
            "type": "uint8",
            "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentScopeV1"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "computePoolKeyHash",
    "inputs": [
      {
        "name": "poolKey",
        "type": "tuple",
        "internalType": "struct PoolKey",
        "components": [
          {
            "name": "currency0",
            "type": "address",
            "internalType": "Currency"
          },
          {
            "name": "currency1",
            "type": "address",
            "internalType": "Currency"
          },
          {
            "name": "fee",
            "type": "uint24",
            "internalType": "uint24"
          },
          {
            "name": "tickSpacing",
            "type": "int24",
            "internalType": "int24"
          },
          {
            "name": "hooks",
            "type": "address",
            "internalType": "contract IHooks"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "computeStampRequestHash",
    "inputs": [
      {
        "name": "request",
        "type": "tuple",
        "internalType": "struct IProgrammableLaunchStampRouterV1.StampRequestV1",
        "components": [
          {
            "name": "launchId",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "token",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenRuntimeCodeHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "poolKey",
            "type": "tuple",
            "internalType": "struct PoolKey",
            "components": [
              {
                "name": "currency0",
                "type": "address",
                "internalType": "Currency"
              },
              {
                "name": "currency1",
                "type": "address",
                "internalType": "Currency"
              },
              {
                "name": "fee",
                "type": "uint24",
                "internalType": "uint24"
              },
              {
                "name": "tickSpacing",
                "type": "int24",
                "internalType": "int24"
              },
              {
                "name": "hooks",
                "type": "address",
                "internalType": "contract IHooks"
              }
            ]
          },
          {
            "name": "hookRuntimeCodeHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "components",
            "type": "tuple[]",
            "internalType": "struct IProgrammableLaunchStampRouterV1.ComponentV1[]",
            "components": [
              {
                "name": "resultIndex",
                "type": "uint8",
                "internalType": "uint8"
              },
              {
                "name": "account",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "runtimeCodeHash",
                "type": "bytes32",
                "internalType": "bytes32"
              },
              {
                "name": "kind",
                "type": "uint8",
                "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentKindV1"
              },
              {
                "name": "scope",
                "type": "uint8",
                "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentScopeV1"
              }
            ]
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "eip712Domain",
    "inputs": [],
    "outputs": [
      {
        "name": "fields",
        "type": "bytes1",
        "internalType": "bytes1"
      },
      {
        "name": "name",
        "type": "string",
        "internalType": "string"
      },
      {
        "name": "version",
        "type": "string",
        "internalType": "string"
      },
      {
        "name": "chainId",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "verifyingContract",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "salt",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "extensions",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "launchAndStampV1",
    "inputs": [
      {
        "name": "permit",
        "type": "tuple",
        "internalType": "struct IProgrammableLaunchStampRouterV1.LaunchPermitV1",
        "components": [
          {
            "name": "chainId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "router",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "launchWallet",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "kind",
            "type": "uint8",
            "internalType": "enum IProgrammableLaunchStampRouterV1.LaunchKindV1"
          },
          {
            "name": "routePayloadHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expectedResultHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "stampRequestHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "nonce",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "validAfter",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "deadline",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "value",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "stampRequest",
        "type": "tuple",
        "internalType": "struct IProgrammableLaunchStampRouterV1.StampRequestV1",
        "components": [
          {
            "name": "launchId",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "token",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenRuntimeCodeHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "poolKey",
            "type": "tuple",
            "internalType": "struct PoolKey",
            "components": [
              {
                "name": "currency0",
                "type": "address",
                "internalType": "Currency"
              },
              {
                "name": "currency1",
                "type": "address",
                "internalType": "Currency"
              },
              {
                "name": "fee",
                "type": "uint24",
                "internalType": "uint24"
              },
              {
                "name": "tickSpacing",
                "type": "int24",
                "internalType": "int24"
              },
              {
                "name": "hooks",
                "type": "address",
                "internalType": "contract IHooks"
              }
            ]
          },
          {
            "name": "hookRuntimeCodeHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "components",
            "type": "tuple[]",
            "internalType": "struct IProgrammableLaunchStampRouterV1.ComponentV1[]",
            "components": [
              {
                "name": "resultIndex",
                "type": "uint8",
                "internalType": "uint8"
              },
              {
                "name": "account",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "runtimeCodeHash",
                "type": "bytes32",
                "internalType": "bytes32"
              },
              {
                "name": "kind",
                "type": "uint8",
                "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentKindV1"
              },
              {
                "name": "scope",
                "type": "uint8",
                "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentScopeV1"
              }
            ]
          }
        ]
      },
      {
        "name": "routePayload",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "signature",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [
      {
        "name": "stampHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "launchIdByComponent",
    "inputs": [
      {
        "name": "component",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "launchIdByPool",
    "inputs": [
      {
        "name": "poolManager",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "poolId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "launchIdByToken",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "launchStamp",
    "inputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "tuple",
        "internalType": "struct IProgrammableLaunchStampRouterV1.StampRecordV1",
        "components": [
          {
            "name": "kind",
            "type": "uint8",
            "internalType": "enum IProgrammableLaunchStampRouterV1.LaunchKindV1"
          },
          {
            "name": "launchWallet",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "token",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "hook",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "poolManager",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "poolId",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "poolKeyHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "componentSetHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "routePayloadHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "routeLauncher",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "routeLauncherRuntimeCodeHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expectedResultHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "permitDigest",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "stampHash",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "permitDigest",
    "inputs": [
      {
        "name": "permit",
        "type": "tuple",
        "internalType": "struct IProgrammableLaunchStampRouterV1.LaunchPermitV1",
        "components": [
          {
            "name": "chainId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "router",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "launchWallet",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "kind",
            "type": "uint8",
            "internalType": "enum IProgrammableLaunchStampRouterV1.LaunchKindV1"
          },
          {
            "name": "routePayloadHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expectedResultHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "stampRequestHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "nonce",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "validAfter",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "deadline",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "value",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "stampProof",
    "inputs": [
      {
        "name": "component",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "stampHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "EIP712DomainChanged",
    "inputs": [],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ProgrammableComponentStampedV1",
    "inputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "component",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "kind",
        "type": "uint8",
        "indexed": true,
        "internalType": "enum IProgrammableLaunchStampRouterV1.ComponentKindV1"
      },
      {
        "name": "runtimeCodeHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ProgrammableLaunchRouteStampedV1",
    "inputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "kind",
        "type": "uint8",
        "indexed": true,
        "internalType": "enum IProgrammableLaunchStampRouterV1.LaunchKindV1"
      },
      {
        "name": "routePayloadHash",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "expectedResultHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "permitDigest",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ProgrammableLaunchStampedV1",
    "inputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "indexed": true,
        "internalType": "bytes32"
      },
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "hook",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "poolManager",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "poolId",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "stampHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "ComponentAlreadyStamped",
    "inputs": [
      {
        "name": "component",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "DuplicateOrUnsortedComponent",
    "inputs": [
      {
        "name": "previous",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "current",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "FactoryResultMismatch",
    "inputs": [
      {
        "name": "field",
        "type": "uint8",
        "internalType": "uint8"
      },
      {
        "name": "index",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidArrayLength",
    "inputs": [
      {
        "name": "field",
        "type": "uint8",
        "internalType": "uint8"
      },
      {
        "name": "actual",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "expected",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidBinding",
    "inputs": [
      {
        "name": "field",
        "type": "uint8",
        "internalType": "uint8"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidComponent",
    "inputs": [
      {
        "name": "component",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "supplied",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "actual",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidPermitSignature",
    "inputs": []
  },
  {
    "type": "error",
    "name": "InvalidShortString",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LaunchAlreadyStamped",
    "inputs": [
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "NonCanonicalRoutePayload",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NonceAlreadyUsed",
    "inputs": [
      {
        "name": "launchWallet",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "nonce",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "PermitAlreadyUsed",
    "inputs": [
      {
        "name": "permitDigest",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "PermitOutsideValidityWindow",
    "inputs": [
      {
        "name": "timestamp",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "validAfter",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "deadline",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "PoolAlreadyInitialized",
    "inputs": [
      {
        "name": "poolManager",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "poolId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "PoolAlreadyStamped",
    "inputs": [
      {
        "name": "poolManager",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "poolId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "launchId",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ]
  },
  {
    "type": "error",
    "name": "ReentrancyGuardReentrantCall",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ResidualLaunchValue",
    "inputs": [
      {
        "name": "expected",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "actual",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "StringTooLong",
    "inputs": [
      {
        "name": "str",
        "type": "string",
        "internalType": "string"
      }
    ]
  },
  {
    "type": "error",
    "name": "UnauthorizedLaunchWallet",
    "inputs": [
      {
        "name": "caller",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "launchWallet",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "UnsupportedLaunchKind",
    "inputs": [
      {
        "name": "kind",
        "type": "uint8",
        "internalType": "enum IProgrammableLaunchStampRouterV1.LaunchKindV1"
      }
    ]
  }
]
