Python SDK for the Invarians Oracle — cross-layer blockchain infrastructure attestations
Project description
invarians-py
Invarians makes invisible blockchain infrastructure failures observable — before they show up in gas fees.
L2 activity no longer shows up in L1 gas fees. Sequencer failures and bridge delays leave no economic trace. Fee monitors stay silent. Invarians detects them.
from invarians import InvariansClient
client = InvariansClient(api_key="inv_your_key_here")
ctx = client.get_execution_context(l1="ethereum", l2="arbitrum")
l2 = ctx.proof.l2_regime or ""
if ctx.proof.l1_regime.startswith("S2") or l2.startswith("S2"):
# Structural stress detected — L1, L2, or both
# Invisible to fee monitors
pause_agent_execution()
print(ctx.proof.pattern_key) # "S1D1×S1D2×BS1"
print(ctx.is_actionable()) # True
Install
pip install invarians[requests] # default
pip install invarians[httpx] # async-friendly
Requires Python 3.9+. Get an API key at invarians.com.
What you can do with it
1. Pause execution when infrastructure degrades
ctx = client.get_execution_context(l1="ethereum", l2="arbitrum")
if ctx.proof.l1_regime.startswith("S2"):
# Structural stress detected — hold until nominal
return {"action": "hold", "reason": ctx.proof.l1_regime}
2. Detect silent failures (S2D1)
S2D1 is the critical regime: structural stress with no demand signature. A fee monitor reports normal while Invarians detects degradation.
att = client.get_l1("ethereum")
if att.regime == "S2D1":
# Chain slowing — no gas spike, no price move
# Nothing shows on any fee monitor
alert_ops("S2D1 detected on Ethereum")
3. Certify execution conditions (PoEC)
Attach a signed attestation to every agent action for audit or dispute resolution.
ctx = client.get_execution_context(l1="ethereum", l2="arbitrum")
if ctx.is_actionable():
result = execute_trade(...)
audit_log.append({
"tx": result.hash,
"execution_context": ctx.proof.pattern_key, # "S1D1×S1D1×BS1"
"attestation": ctx.signature,
"issued_at": ctx.l1.issued_at,
})
4. Adjust routing on bridge stress
ctx = client.get_execution_context(l1="ethereum", l2="arbitrum")
if ctx.proof.bridge_state == "BS2":
# Bridge degraded — route via alternative path
use_fallback_bridge()
elif ctx.proof.l2_regime == "S1D2":
# L2 demand elevated — expect higher fees
# Note: l2_regime differentiation active from 25 Apr 2026
adjust_slippage_tolerance(factor=1.3)
5. Handle stale data gracefully
att = client.get_l1("ethereum")
match att.stale_action:
case "ok":
proceed()
case "caution":
proceed_with_reduced_size()
case "wait":
hold() # Data > 2h old — do not act
Regimes
| Code | Structure | Demand | What it means |
|---|---|---|---|
| S1D1 | nominal | nominal | Infrastructure within calibrated norms |
| S1D2 | nominal | elevated | Structurally sound, demand above baseline |
| S2D1 | stress | nominal | The only regime where the chain degrades silently — no gas spike, no price signal. Invisible to gas monitors. |
| S2D2 | stress | elevated | Structural stress and elevated demand simultaneously |
Signal quality
Every response carries explicit calibration metadata. The SDK never hides uncertainty.
att = client.get_l1("solana")
print(att.meta.m1_validated) # False — backtest not yet validated
print(att.meta.calibration_confidence) # "LOW"
print(att.meta.notes) # "π not calibrated. τ only."
print(att.is_actionable()) # False
Chain coverage
| Chain | Layer | Confidence | Ready |
|---|---|---|---|
| ethereum | L1 | MEDIUM | ✅ |
| polygon | L1 | MEDIUM | ✅ |
| arbitrum | L2 | LOW | ⏳ 25 Apr 2026 |
| base | L2 | LOW | ⏳ 25 Apr 2026 |
| optimism | L2 | LOW | ⏳ 25 Apr 2026 |
| solana | L1 | LOW | ⏳ July 2026 |
| avalanche | L1 | NONE | ⏳ July 2026 |
L2 calibration status —
l2_regimeis architecturally S1D1 on all active rollups (τ dormant on sequencer-based chains, π baselines converging). Full L2 + bridge signal calibration scheduled 25 April 2026. Implementation and testing are functional today.
Error handling
from invarians.exceptions import AuthError, RateLimitError, ServerError
try:
att = client.get_l1("ethereum")
except AuthError:
print("Invalid API key")
except RateLimitError:
print("Quota exceeded — free tier: 20 req/day")
except ServerError as e:
print(f"Oracle unavailable: {e}")
Verify an attestation
ctx = client.get_execution_context(l1="ethereum", l2="arbitrum")
valid = client.verify({"attestation": ctx.l1.__dict__, "signature": ctx.signature})
print(valid) # True
Documentation
API reference: invarians.com/developers.html
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file invarians-0.1.3.tar.gz.
File metadata
- Download URL: invarians-0.1.3.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
714448a8f5a404e39d79868c8d199c808d8022c8a035687af38417c5b1143b02
|
|
| MD5 |
1c65b14ba175707beb15c34e9a0df924
|
|
| BLAKE2b-256 |
d0832fab488f45adfa55c52d5dfa125843498aef3b7dbff581c66a22a546c0fb
|
File details
Details for the file invarians-0.1.3-py3-none-any.whl.
File metadata
- Download URL: invarians-0.1.3-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae2861498e253300730253f698c5aeb82f04bba5249c675e25599b83b0b6288d
|
|
| MD5 |
4fdb57ac210f91b92ad7f1162c4f53b1
|
|
| BLAKE2b-256 |
acd1001ae2d66d0ee289a8a78f002934b93da4bbbab42288be3e6e07321f8612
|