Decentralized Verifiable Machine Learning
And nobody can prove how they decided.

No Solidity. No Rust. Smart contracts in the language you already know.
scikit-learn, TensorFlow, PyTorch, and XGBoost — deterministic on-chain via panda.ml.
Deploy once, message across Ethereum, Solana, Panda L2, and Panda Hub.
RISC Zero, Halo2, and SP1 proof backends with rollup architecture from day one.
@contract decoratorclass State for storage@call mutates · @query readsself.emit() for indexable eventsfrom panda import contract, constructor
from panda import call, query, event
@contract
class Counter:
class State:
count: int = 0
@constructor
def deploy(self, ctx, start: int = 0):
self.state.count = start
@call
def increment(self, ctx):
self.state.count += 1
self.emit(event.CountChanged(
new_count=self.state.count
))ctx you've been waiting forOne object. Everything you need to build trust-minimised logic.
@contract
class PRC20Token:
class State:
token: dict = {}
mint_authority: str = ""
freeze_authority: str = ""
frozen: dict = {}
@call
def transfer(self, ctx, to: str, value: int):
# transfer logic with frozen-account checks
self.emit(event.Transfer(_from=ctx.sender,
_to=to, _value=value))
@query
def balance_of(self, owner: str) -> int:
return self._t().balance_of(owner)
The full scientific Python stack — scikit-learn, TensorFlow, PyTorch, XGBoost — running deterministically inside smart contracts.
Model weights serialize to contract state. Loaded fresh for every prediction with cryptographic proof of every computation.
Six-layer determinism enforcement ensures every predict() is identical across every validator, every time.
@contract
class FraudDetector:
class State:
model: dict = {}
is_trained: bool = False
@call
def train(self, ctx, features: list, labels: list):
model = LogisticRegression()
model.fit(features, labels)
self.state.model = save_model(model)
self.state.is_trained = True
@query
def predict(self, features: list) -> list:
model = load_model(self.state.model)
return model.predict_proba(features)Training data, weights, and predictions — all on-chain. All verifiable.
Two patterns: fire-and-forget, or async/await.
@receiver(chains=["ethereum"])
def on_tokens_locked(self, ctx, amount: int, sender: str):
self.state.balances[sender] += amount
@receiver() # any chain
def on_any_message(self, ctx, data: str):
self.emit(event.MessageReceived(payload=data))
async def bridge(self, ctx, to: str, value: int):
result = await Chain.ethereum().call(
contract="0xBridge", method="release", to=to, value=value)
return result@receiver methods cannot be invoked via @call — cross-chain context is required.

Browser IDE with Python syntax highlighting. Write, deploy, and interact — all in one tab.
TypeScript & Python SDKs for programmatic deploy, call, and query.
Full local test harness — simulate cross-chain messages, replay async calls, assert state changes.
Real-time event stream. Every self.emit() indexed, filterable, and queryable via API.
AI is eating software every decision.
Verifiability is the only path to trust at scale.
Pandachain is built for that future.

Open the playground. Deploy your first contract in 60 seconds.