From 0f9726f612bc874309ecc8e60ea8b80bdceb2306 Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Wed, 1 Apr 2026 18:53:25 +0530 Subject: [PATCH 01/11] init token update --- tee_gateway/__main__.py | 20 ++++++++++++++++++-- tee_gateway/definitions.py | 11 +++++++++-- tests/test_pricing.py | 4 ++-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index a27f426..8afcdfb 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -39,7 +39,9 @@ BASE_TESTNET_NETWORK, EVM_PAYMENT_ADDRESS, USDC_ADDRESS, - BASE_OPG_ADDRESS, + BASE_TESTNET_OPG_ADDRESS, + BASE_MAINNET_NETWORK, + BASE_MAINNET_OPG_ADDRESS, CHAT_COMPLETIONS_USDC_AMOUNT, CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, COMPLETIONS_USDC_AMOUNT, @@ -138,7 +140,7 @@ def _shutdown_heartbeat(): pay_to=EVM_PAYMENT_ADDRESS, price=AssetAmount( amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, - asset=BASE_OPG_ADDRESS, + asset=BASE_TESTNET_OPG_ADDRESS, extra={ "name": "OPG", "version": "2", @@ -147,6 +149,20 @@ def _shutdown_heartbeat(): ), network=BASE_TESTNET_NETWORK, ), + PaymentOption( + scheme="upto", + pay_to=EVM_PAYMENT_ADDRESS, + price=AssetAmount( + amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, + asset=BASE_MAINNET_OPG_ADDRESS, + extra={ + "name": "OPG", + "version": "2", + "assetTransferMethod": "permit2", + }, + ), + network=BASE_MAINNET_NETWORK, + ), ], mime_type="application/json", description="Chat completion", diff --git a/tee_gateway/definitions.py b/tee_gateway/definitions.py index 6ff58de..2c14a4e 100644 --- a/tee_gateway/definitions.py +++ b/tee_gateway/definitions.py @@ -25,6 +25,9 @@ # Base Testnet — where OPG payments are accepted BASE_TESTNET_NETWORK: str = "eip155:84532" +# Base Mainnet — where OPG payments are accepted +BASE_MAINNET_NETWORK: str = "eip155:8453" + # --------------------------------------------------------------------------- # Payment recipient # --------------------------------------------------------------------------- @@ -45,7 +48,10 @@ USDC_ADDRESS: str = "0x094E464A23B90A71a0894D5D1e5D470FfDD074e1" # OpenGradient token (OPG) on Base Testnet -BASE_OPG_ADDRESS: str = "0x240b09731D96979f50B2C649C9CE10FcF9C7987F" +BASE_TESTNET_OPG_ADDRESS: str = "0x240b09731D96979f50B2C649C9CE10FcF9C7987F" + +# OpenGradient token (OPG) on Base Mainnet +BASE_MAINNET_OPG_ADDRESS: str = "0x5feCcD17C393CaF1001D18164236A37E731FCb9d" # --------------------------------------------------------------------------- # Token decimal places @@ -54,7 +60,8 @@ # Maps lowercase contract address → number of decimals for unit conversion. ASSET_DECIMALS_BY_ADDRESS: dict[str, int] = { USDC_ADDRESS.lower(): 6, # USDC / OUSDC standard: 6 decimals - BASE_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) + BASE_TESTNET_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) + BASE_MAINNET_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) } # Fallback for any asset not explicitly listed above diff --git a/tests/test_pricing.py b/tests/test_pricing.py index 2b397c3..1a2f528 100644 --- a/tests/test_pricing.py +++ b/tests/test_pricing.py @@ -11,7 +11,7 @@ import unittest from decimal import Decimal -from tee_gateway.definitions import BASE_OPG_ADDRESS, USDC_ADDRESS +from tee_gateway.definitions import BASE_TESTNET_OPG_ADDRESS, USDC_ADDRESS from tee_gateway.model_registry import ( _MODEL_LOOKUP, get_model_config, @@ -26,7 +26,7 @@ def _opg_requirements() -> dict: """Fake PaymentRequirements dict for OPG (18 decimals).""" - return {"asset": BASE_OPG_ADDRESS, "amount": "50000000000000000"} + return {"asset": BASE_TESTNET_OPG_ADDRESS, "amount": "50000000000000000"} def _usdc_requirements() -> dict: From dac78ea91b4281f6668270e58b0ec387b8264028 Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Thu, 9 Apr 2026 19:09:22 +0530 Subject: [PATCH 02/11] base mainnet changes --- pyproject.toml | 2 +- tee_gateway/__main__.py | 70 ++++++++++++++++++++++++----------------- uv.lock | 18 ++++++++--- 3 files changed, 56 insertions(+), 34 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5f27fb3..285ca61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "setuptools>=21.0.0", "Flask>=3.0.0", "gunicorn>=23.0.0", - "og-x402[evm]==0.0.1.dev6", + "og-x402[evm]>=0.0.1.dev7", "fastapi>=0.128.0", "uvicorn[standard]>=0.40.0", "pydantic>=2.12.5", diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index 8afcdfb..c92c4e7 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -27,24 +27,22 @@ from x402.http.types import RouteConfig from x402.mechanisms.evm.exact import ExactEvmServerScheme from x402.mechanisms.evm.upto import UptoEvmServerScheme +from x402.extensions.eip2612_gas_sponsoring import declare_eip2612_gas_sponsoring_extension +from x402.extensions.erc20_approval_gas_sponsoring import declare_erc20_approval_gas_sponsoring_extension from x402.schemas import AssetAmount from x402.server import x402ResourceServerSync from x402.session import SessionStore -import types as _types import x402.http.middleware.flask as x402_flask +import types as _types from .util import dynamic_session_cost_calculator from .definitions import ( - EVM_NETWORK, BASE_TESTNET_NETWORK, EVM_PAYMENT_ADDRESS, - USDC_ADDRESS, BASE_TESTNET_OPG_ADDRESS, BASE_MAINNET_NETWORK, BASE_MAINNET_OPG_ADDRESS, - CHAT_COMPLETIONS_USDC_AMOUNT, CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, - COMPLETIONS_USDC_AMOUNT, FACILITATOR_URL, ) @@ -113,28 +111,16 @@ def _shutdown_heartbeat(): server = x402ResourceServerSync(facilitator) store = SessionStore() -server.register(EVM_NETWORK, ExactEvmServerScheme()) server.register(BASE_TESTNET_NETWORK, ExactEvmServerScheme()) -server.register(EVM_NETWORK, UptoEvmServerScheme()) +server.register(BASE_MAINNET_NETWORK, ExactEvmServerScheme()) + +# Upto scheme registrations (permit2-based, variable settlement) server.register(BASE_TESTNET_NETWORK, UptoEvmServerScheme()) +server.register(BASE_MAINNET_NETWORK, UptoEvmServerScheme()) routes = { "POST /v1/chat/completions": RouteConfig( accepts=[ - PaymentOption( - scheme="upto", - pay_to=EVM_PAYMENT_ADDRESS, - price=AssetAmount( - amount=CHAT_COMPLETIONS_USDC_AMOUNT, - asset=USDC_ADDRESS, - extra={ - "name": "OUSDC", - "version": "2", - "assetTransferMethod": "permit2", - }, - ), - network=EVM_NETWORK, - ), PaymentOption( scheme="upto", pay_to=EVM_PAYMENT_ADDRESS, @@ -142,8 +128,8 @@ def _shutdown_heartbeat(): amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, asset=BASE_TESTNET_OPG_ADDRESS, extra={ - "name": "OPG", - "version": "2", + "name": "OpenGradient", + "version": "1", "assetTransferMethod": "permit2", }, ), @@ -156,14 +142,18 @@ def _shutdown_heartbeat(): amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, asset=BASE_MAINNET_OPG_ADDRESS, extra={ - "name": "OPG", - "version": "2", + "name": "OpenGradient", + "version": "1", "assetTransferMethod": "permit2", }, ), network=BASE_MAINNET_NETWORK, ), ], + extensions={ + **declare_eip2612_gas_sponsoring_extension(), + **declare_erc20_approval_gas_sponsoring_extension(), + }, mime_type="application/json", description="Chat completion", ), @@ -173,13 +163,35 @@ def _shutdown_heartbeat(): scheme="upto", pay_to=EVM_PAYMENT_ADDRESS, price=AssetAmount( - amount=COMPLETIONS_USDC_AMOUNT, - asset=USDC_ADDRESS, - extra={"name": "USDC", "version": "2"}, + amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, + asset=BASE_TESTNET_OPG_ADDRESS, + extra={ + "name": "OpenGradient", + "version": "1", + "assetTransferMethod": "permit2", + }, ), - network=EVM_NETWORK, + network=BASE_TESTNET_NETWORK, ), + PaymentOption( + scheme="upto", + pay_to=EVM_PAYMENT_ADDRESS, + price=AssetAmount( + amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, + asset=BASE_MAINNET_OPG_ADDRESS, + extra={ + "name": "OpenGradient", + "version": "1", + "assetTransferMethod": "permit2", + }, + ), + network=BASE_MAINNET_NETWORK, + ), ], + extensions={ + **declare_eip2612_gas_sponsoring_extension(), + **declare_erc20_approval_gas_sponsoring_extension(), + }, mime_type="application/json", description="Completion", ), diff --git a/uv.lock b/uv.lock index 4026c9d..9f67ce2 100644 --- a/uv.lock +++ b/uv.lock @@ -1242,17 +1242,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + [[package]] name = "og-x402" -version = "0.0.1.dev6" +version = "0.0.1.dev7" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "nest-asyncio" }, { name = "pydantic" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/70/aa/2b616b9be6dfa4dfee98bde3ed20dd41cb446d0569e0069c1d6c11faa032/og_x402-0.0.1.dev6.tar.gz", hash = "sha256:140c4b725f372e81f4a3c2caf392f58b6fcf242bc51a1c3a6417f58e3ef9e347", size = 900115, upload-time = "2026-03-30T07:13:25.623Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e2/45/5fa555d9c8ba319780b6f12d8f7222e31019e90b032b85ce9a7f9a08a9f4/og_x402-0.0.1.dev7.tar.gz", hash = "sha256:a4bce840c07b783d14debad0c11941c8660ea8d80c423164e0e18da012bf92d6", size = 1306033, upload-time = "2026-04-09T11:42:59.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/5e/a64de6f29eb80bb180288297882d5aba2a894363622d4f94417b420cf0b5/og_x402-0.0.1.dev6-py3-none-any.whl", hash = "sha256:2a1f962fa2a50d02f28421199027245d5c5f013f36a143ec2f184a546325f1bd", size = 952670, upload-time = "2026-03-30T07:13:00.408Z" }, + { url = "https://files.pythonhosted.org/packages/36/a0/30f882406ba5e52913127f1e85c6fd2ec977291273be0fdc89980dcb7c4c/og_x402-0.0.1.dev7-py3-none-any.whl", hash = "sha256:947f91a13134350997fcac2a78c435587111d6ea7d69d8a4a96fbf63d21306c7", size = 1386876, upload-time = "2026-04-09T11:42:57.667Z" }, ] [package.optional-dependencies] @@ -1881,7 +1891,7 @@ requires-dist = [ { name = "langchain-google-genai", specifier = ">=4.2.0" }, { name = "langchain-openai", specifier = ">=0.3.35" }, { name = "langchain-xai", specifier = ">=0.2.5" }, - { name = "og-x402", extras = ["evm"], specifier = "==0.0.1.dev6" }, + { name = "og-x402", extras = ["evm"], specifier = ">=0.0.1.dev7" }, { name = "openai", specifier = ">=2.15.0" }, { name = "psutil", specifier = ">=7.2.1" }, { name = "pydantic", specifier = ">=2.12.5" }, From ce3a491c8e876d11ff8ef42b3cd7a458854863b5 Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Thu, 9 Apr 2026 20:09:49 +0530 Subject: [PATCH 03/11] addr updates --- tee_gateway/definitions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tee_gateway/definitions.py b/tee_gateway/definitions.py index 2c14a4e..4337e87 100644 --- a/tee_gateway/definitions.py +++ b/tee_gateway/definitions.py @@ -37,7 +37,7 @@ # your own instance. EVM_PAYMENT_ADDRESS: str = os.getenv( "EVM_PAYMENT_ADDRESS", - "0x40eFb45552EDfB2502D90A657a8ab41F03ec460d", + "0x9deEBB5D1b22e4a6e027977CeAd13893A7E4cC1a", ) # --------------------------------------------------------------------------- From 015edb96aedce1712c4655b0267c3ce7869c4f17 Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Fri, 10 Apr 2026 01:15:45 +0530 Subject: [PATCH 04/11] dep updates --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 285ca61..42d915e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "setuptools>=21.0.0", "Flask>=3.0.0", "gunicorn>=23.0.0", - "og-x402[evm]>=0.0.1.dev7", + "og-x402[evm]>=0.0.1.dev8", "fastapi>=0.128.0", "uvicorn[standard]>=0.40.0", "pydantic>=2.12.5", diff --git a/uv.lock b/uv.lock index 9f67ce2..5029d5d 100644 --- a/uv.lock +++ b/uv.lock @@ -1253,16 +1253,16 @@ wheels = [ [[package]] name = "og-x402" -version = "0.0.1.dev7" +version = "0.0.1.dev8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nest-asyncio" }, { name = "pydantic" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/45/5fa555d9c8ba319780b6f12d8f7222e31019e90b032b85ce9a7f9a08a9f4/og_x402-0.0.1.dev7.tar.gz", hash = "sha256:a4bce840c07b783d14debad0c11941c8660ea8d80c423164e0e18da012bf92d6", size = 1306033, upload-time = "2026-04-09T11:42:59.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/9e/1d718f3e0f7a6f6fd53c8a183c1794bc4aa15d986b0faa76139d5b04096b/og_x402-0.0.1.dev8.tar.gz", hash = "sha256:9d02c2c81112b7a612cd1aea03c09af75fc75d70766d042b5ddcc82ee7d8f98a", size = 1306960, upload-time = "2026-04-09T19:44:24.966Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/36/a0/30f882406ba5e52913127f1e85c6fd2ec977291273be0fdc89980dcb7c4c/og_x402-0.0.1.dev7-py3-none-any.whl", hash = "sha256:947f91a13134350997fcac2a78c435587111d6ea7d69d8a4a96fbf63d21306c7", size = 1386876, upload-time = "2026-04-09T11:42:57.667Z" }, + { url = "https://files.pythonhosted.org/packages/c8/0e/48facce5d73330d1cb79bbd67eda9c94b9786ea86f433338ee4423a6b1d0/og_x402-0.0.1.dev8-py3-none-any.whl", hash = "sha256:2b5b9601a6d312f9b1cf68967eaf98229eb203c54ca403e46994d6eed2488ccc", size = 1387989, upload-time = "2026-04-09T19:44:23.174Z" }, ] [package.optional-dependencies] @@ -1891,7 +1891,7 @@ requires-dist = [ { name = "langchain-google-genai", specifier = ">=4.2.0" }, { name = "langchain-openai", specifier = ">=0.3.35" }, { name = "langchain-xai", specifier = ">=0.2.5" }, - { name = "og-x402", extras = ["evm"], specifier = ">=0.0.1.dev7" }, + { name = "og-x402", extras = ["evm"], specifier = ">=0.0.1.dev8" }, { name = "openai", specifier = ">=2.15.0" }, { name = "psutil", specifier = ">=7.2.1" }, { name = "pydantic", specifier = ">=2.12.5" }, From 6bd40759658c33a146893714163c7308d36e657a Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Fri, 10 Apr 2026 16:11:12 +0530 Subject: [PATCH 05/11] updates --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 42d915e..027e43e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ "setuptools>=21.0.0", "Flask>=3.0.0", "gunicorn>=23.0.0", - "og-x402[evm]>=0.0.1.dev8", + "og-x402[evm]>=0.0.1.dev9", "fastapi>=0.128.0", "uvicorn[standard]>=0.40.0", "pydantic>=2.12.5", diff --git a/uv.lock b/uv.lock index 5029d5d..4cab594 100644 --- a/uv.lock +++ b/uv.lock @@ -1253,16 +1253,16 @@ wheels = [ [[package]] name = "og-x402" -version = "0.0.1.dev8" +version = "0.0.1.dev9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nest-asyncio" }, { name = "pydantic" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/9e/1d718f3e0f7a6f6fd53c8a183c1794bc4aa15d986b0faa76139d5b04096b/og_x402-0.0.1.dev8.tar.gz", hash = "sha256:9d02c2c81112b7a612cd1aea03c09af75fc75d70766d042b5ddcc82ee7d8f98a", size = 1306960, upload-time = "2026-04-09T19:44:24.966Z" } +sdist = { url = "https://files.pythonhosted.org/packages/97/f5/02e7b68af825c200da2aa88292f2c07823d321a4fd9e2a3d20130358fc10/og_x402-0.0.1.dev9.tar.gz", hash = "sha256:d3cfd05443636712cb1277e3d904b878d875a60b3728d64265098ea06eeb116b", size = 1312652, upload-time = "2026-04-10T10:40:13.267Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/0e/48facce5d73330d1cb79bbd67eda9c94b9786ea86f433338ee4423a6b1d0/og_x402-0.0.1.dev8-py3-none-any.whl", hash = "sha256:2b5b9601a6d312f9b1cf68967eaf98229eb203c54ca403e46994d6eed2488ccc", size = 1387989, upload-time = "2026-04-09T19:44:23.174Z" }, + { url = "https://files.pythonhosted.org/packages/8b/08/f5a05fc8454541e96650d44bf15b34491505d0e4f1e9e77b26c804fbbdd3/og_x402-0.0.1.dev9-py3-none-any.whl", hash = "sha256:2db171be2526aa13a1243255538d185c4f1f6106f615eff532d1720a89672034", size = 1392934, upload-time = "2026-04-10T10:40:11.224Z" }, ] [package.optional-dependencies] @@ -1891,7 +1891,7 @@ requires-dist = [ { name = "langchain-google-genai", specifier = ">=4.2.0" }, { name = "langchain-openai", specifier = ">=0.3.35" }, { name = "langchain-xai", specifier = ">=0.2.5" }, - { name = "og-x402", extras = ["evm"], specifier = ">=0.0.1.dev8" }, + { name = "og-x402", extras = ["evm"], specifier = ">=0.0.1.dev9" }, { name = "openai", specifier = ">=2.15.0" }, { name = "psutil", specifier = ">=7.2.1" }, { name = "pydantic", specifier = ">=2.12.5" }, From 7d3ec36da1bd6e9580677368d3316be5ac5fc1ac Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Sun, 12 Apr 2026 11:21:21 +0530 Subject: [PATCH 06/11] token addr update --- tee_gateway/definitions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tee_gateway/definitions.py b/tee_gateway/definitions.py index 4337e87..7ff3111 100644 --- a/tee_gateway/definitions.py +++ b/tee_gateway/definitions.py @@ -51,7 +51,7 @@ BASE_TESTNET_OPG_ADDRESS: str = "0x240b09731D96979f50B2C649C9CE10FcF9C7987F" # OpenGradient token (OPG) on Base Mainnet -BASE_MAINNET_OPG_ADDRESS: str = "0x5feCcD17C393CaF1001D18164236A37E731FCb9d" +BASE_MAINNET_OPG_ADDRESS: str = "0xFbC2051AE2265686a469421b2C5A2D5462FbF5eB" # --------------------------------------------------------------------------- # Token decimal places From 793cc931d6b6b4ec918fe07fe640cd9f658bf1a2 Mon Sep 17 00:00:00 2001 From: kylexqian Date: Sun, 12 Apr 2026 11:53:54 -0700 Subject: [PATCH 07/11] Remove unused USDC var and lint --- tee_gateway/__main__.py | 10 +++++++--- tee_gateway/definitions.py | 1 - tests/test_pricing.py | 2 +- uv.lock | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index c92c4e7..ea43a7e 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -27,8 +27,12 @@ from x402.http.types import RouteConfig from x402.mechanisms.evm.exact import ExactEvmServerScheme from x402.mechanisms.evm.upto import UptoEvmServerScheme -from x402.extensions.eip2612_gas_sponsoring import declare_eip2612_gas_sponsoring_extension -from x402.extensions.erc20_approval_gas_sponsoring import declare_erc20_approval_gas_sponsoring_extension +from x402.extensions.eip2612_gas_sponsoring import ( + declare_eip2612_gas_sponsoring_extension, +) +from x402.extensions.erc20_approval_gas_sponsoring import ( + declare_erc20_approval_gas_sponsoring_extension, +) from x402.schemas import AssetAmount from x402.server import x402ResourceServerSync from x402.session import SessionStore @@ -186,7 +190,7 @@ def _shutdown_heartbeat(): }, ), network=BASE_MAINNET_NETWORK, - ), + ), ], extensions={ **declare_eip2612_gas_sponsoring_extension(), diff --git a/tee_gateway/definitions.py b/tee_gateway/definitions.py index aac907c..6517185 100644 --- a/tee_gateway/definitions.py +++ b/tee_gateway/definitions.py @@ -53,7 +53,6 @@ # Maps lowercase contract address → number of decimals for unit conversion. ASSET_DECIMALS_BY_ADDRESS: dict[str, int] = { - USDC_ADDRESS.lower(): 6, # USDC / OUSDC standard: 6 decimals BASE_TESTNET_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) BASE_MAINNET_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) } diff --git a/tests/test_pricing.py b/tests/test_pricing.py index 3629ebd..088a849 100644 --- a/tests/test_pricing.py +++ b/tests/test_pricing.py @@ -11,7 +11,7 @@ import unittest from decimal import Decimal -from tee_gateway.definitions import BASE_TESTNET_OPG_ADDRESS, USDC_ADDRESS +from tee_gateway.definitions import BASE_TESTNET_OPG_ADDRESS from tee_gateway.model_registry import ( _MODEL_LOOKUP, get_model_config, diff --git a/uv.lock b/uv.lock index 8dad936..bfb2691 100644 --- a/uv.lock +++ b/uv.lock @@ -1891,7 +1891,7 @@ requires-dist = [ { name = "langchain-google-genai", specifier = ">=4.2.1" }, { name = "langchain-openai", specifier = ">=1.1.12" }, { name = "langchain-xai", specifier = ">=1.2.2" }, - { name = "og-x402", extras = ["evm"], specifier = "==0.0.1.dev9" }, + { name = "og-x402", extras = ["evm"], specifier = ">=0.0.1.dev9" }, { name = "openai", specifier = ">=2.15.0" }, { name = "psutil", specifier = ">=7.2.1" }, { name = "pydantic", specifier = ">=2.12.5" }, From fa2c5457acfa749eeecf7a84712245b965e932aa Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Tue, 14 Apr 2026 15:58:53 +0530 Subject: [PATCH 08/11] extension change --- tee_gateway/__main__.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index ea43a7e..935f077 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -27,9 +27,6 @@ from x402.http.types import RouteConfig from x402.mechanisms.evm.exact import ExactEvmServerScheme from x402.mechanisms.evm.upto import UptoEvmServerScheme -from x402.extensions.eip2612_gas_sponsoring import ( - declare_eip2612_gas_sponsoring_extension, -) from x402.extensions.erc20_approval_gas_sponsoring import ( declare_erc20_approval_gas_sponsoring_extension, ) @@ -155,7 +152,6 @@ def _shutdown_heartbeat(): ), ], extensions={ - **declare_eip2612_gas_sponsoring_extension(), **declare_erc20_approval_gas_sponsoring_extension(), }, mime_type="application/json", @@ -193,7 +189,6 @@ def _shutdown_heartbeat(): ), ], extensions={ - **declare_eip2612_gas_sponsoring_extension(), **declare_erc20_approval_gas_sponsoring_extension(), }, mime_type="application/json", From baf01e90028146b567b4316713872c35ef8a607c Mon Sep 17 00:00:00 2001 From: Aniket Dixit Date: Fri, 17 Apr 2026 14:36:33 +0530 Subject: [PATCH 09/11] mainnet changes --- tee_gateway/__main__.py | 32 -------------------------------- tee_gateway/definitions.py | 6 ------ tests/test_pricing.py | 4 ++-- 3 files changed, 2 insertions(+), 40 deletions(-) diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index 935f077..1ba44c2 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -38,9 +38,7 @@ from .util import dynamic_session_cost_calculator from .definitions import ( - BASE_TESTNET_NETWORK, EVM_PAYMENT_ADDRESS, - BASE_TESTNET_OPG_ADDRESS, BASE_MAINNET_NETWORK, BASE_MAINNET_OPG_ADDRESS, CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, @@ -112,30 +110,14 @@ def _shutdown_heartbeat(): server = x402ResourceServerSync(facilitator) store = SessionStore() -server.register(BASE_TESTNET_NETWORK, ExactEvmServerScheme()) server.register(BASE_MAINNET_NETWORK, ExactEvmServerScheme()) # Upto scheme registrations (permit2-based, variable settlement) -server.register(BASE_TESTNET_NETWORK, UptoEvmServerScheme()) server.register(BASE_MAINNET_NETWORK, UptoEvmServerScheme()) routes = { "POST /v1/chat/completions": RouteConfig( accepts=[ - PaymentOption( - scheme="upto", - pay_to=EVM_PAYMENT_ADDRESS, - price=AssetAmount( - amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, - asset=BASE_TESTNET_OPG_ADDRESS, - extra={ - "name": "OpenGradient", - "version": "1", - "assetTransferMethod": "permit2", - }, - ), - network=BASE_TESTNET_NETWORK, - ), PaymentOption( scheme="upto", pay_to=EVM_PAYMENT_ADDRESS, @@ -159,20 +141,6 @@ def _shutdown_heartbeat(): ), "POST /v1/completions": RouteConfig( accepts=[ - PaymentOption( - scheme="upto", - pay_to=EVM_PAYMENT_ADDRESS, - price=AssetAmount( - amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, - asset=BASE_TESTNET_OPG_ADDRESS, - extra={ - "name": "OpenGradient", - "version": "1", - "assetTransferMethod": "permit2", - }, - ), - network=BASE_TESTNET_NETWORK, - ), PaymentOption( scheme="upto", pay_to=EVM_PAYMENT_ADDRESS, diff --git a/tee_gateway/definitions.py b/tee_gateway/definitions.py index 6517185..ca316bd 100644 --- a/tee_gateway/definitions.py +++ b/tee_gateway/definitions.py @@ -19,8 +19,6 @@ # Network IDs (EIP-155 chain identifiers) # --------------------------------------------------------------------------- -# Base Testnet — where OPG payments are accepted -BASE_TESTNET_NETWORK: str = "eip155:84532" # Base Mainnet — where OPG payments are accepted BASE_MAINNET_NETWORK: str = "eip155:8453" @@ -41,9 +39,6 @@ # ERC-20 token contract addresses # --------------------------------------------------------------------------- -# OpenGradient token (OPG) on Base Testnet -BASE_TESTNET_OPG_ADDRESS: str = "0x240b09731D96979f50B2C649C9CE10FcF9C7987F" - # OpenGradient token (OPG) on Base Mainnet BASE_MAINNET_OPG_ADDRESS: str = "0xFbC2051AE2265686a469421b2C5A2D5462FbF5eB" @@ -53,7 +48,6 @@ # Maps lowercase contract address → number of decimals for unit conversion. ASSET_DECIMALS_BY_ADDRESS: dict[str, int] = { - BASE_TESTNET_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) BASE_MAINNET_OPG_ADDRESS.lower(): 18, # OPG: 18 decimals (ERC-20 standard) } diff --git a/tests/test_pricing.py b/tests/test_pricing.py index 088a849..d1b5f25 100644 --- a/tests/test_pricing.py +++ b/tests/test_pricing.py @@ -11,7 +11,7 @@ import unittest from decimal import Decimal -from tee_gateway.definitions import BASE_TESTNET_OPG_ADDRESS +from tee_gateway.definitions import BASE_MAINNET_OPG_ADDRESS from tee_gateway.model_registry import ( _MODEL_LOOKUP, get_model_config, @@ -26,7 +26,7 @@ def _opg_requirements() -> dict: """Fake PaymentRequirements dict for OPG (18 decimals).""" - return {"asset": BASE_TESTNET_OPG_ADDRESS, "amount": "50000000000000000"} + return {"asset": BASE_MAINNET_OPG_ADDRESS, "amount": "50000000000000000"} def _ctx(model: str, input_tokens: int, output_tokens: int, requirements=None) -> dict: From 151191a2ebf8212b06baf769aedec4beb8e51356 Mon Sep 17 00:00:00 2001 From: kylexqian Date: Mon, 20 Apr 2026 17:24:27 -0700 Subject: [PATCH 10/11] Fix lint --- tee_gateway/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index 1ba44c2..c9e8f28 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -473,7 +473,7 @@ def _strict_resolve_session_request_cost( return self._coerce_non_negative_int(dynamic_cost) -_payment_mw._resolve_session_request_cost = _types.MethodType( # type: ignore[method-assign] +_payment_mw._resolve_session_request_cost = _types.MethodType( # type: ignore[method-assign, attr-defined] _strict_resolve_session_request_cost, _payment_mw ) From e8f76e2111d9e1da167248362e6747a7c7b3424e Mon Sep 17 00:00:00 2001 From: kylexqian Date: Mon, 20 Apr 2026 18:34:50 -0700 Subject: [PATCH 11/11] fix: use COMPLETIONS_OPG_SESSION_MAX_SPEND for /v1/completions route Co-Authored-By: Claude Sonnet 4.6 --- tee_gateway/__main__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tee_gateway/__main__.py b/tee_gateway/__main__.py index c9e8f28..fd36b24 100644 --- a/tee_gateway/__main__.py +++ b/tee_gateway/__main__.py @@ -42,6 +42,7 @@ BASE_MAINNET_NETWORK, BASE_MAINNET_OPG_ADDRESS, CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, + COMPLETIONS_OPG_SESSION_MAX_SPEND, FACILITATOR_URL, ) @@ -145,7 +146,7 @@ def _shutdown_heartbeat(): scheme="upto", pay_to=EVM_PAYMENT_ADDRESS, price=AssetAmount( - amount=CHAT_COMPLETIONS_OPG_SESSION_MAX_SPEND, + amount=COMPLETIONS_OPG_SESSION_MAX_SPEND, asset=BASE_MAINNET_OPG_ADDRESS, extra={ "name": "OpenGradient",