A cross-chain, event-driven security system that detects dangerous on-chain events and automatically issues low-latency freeze callbacks via the Reactive Network. It combines Solidity contracts (Hardhat) that run on multiple EVM testnets with a Vite + React TypeScript dashboard & workspace libraries that support deployment, an API server, and more
README
Reactive Sentinel 🛡️⛓️
An automated, cross-chain security state machine powered by Reactive Network. Reactive Sentinel monitors smart contract events on an origin chain (Ethereum Sepolia) in real-time and instantly triggers emergency mitigation callbacks on a destination chain (Base Sepolia) within seconds of an exploit or critical state change.
🏗️ Architecture Overview
Reactive Sentinel eliminates the latency of traditional centralized keepers by executing low-latency, decentralized event-driven reactions directly at the consensus level.
1. Origin Event: A state-changing event (e.g., a mock attack or deposit) is triggered on EthOriginVault.
2. Reactive Interception: The SentinelReactive contract deployed on the Reactive Lasna Testnet intercepts the log emission instantly via sub-graphless event subcription.
3. Cross-Chain Callback: The reactive engine computes the state mutation and dispatches an automated, authorized callback down to BaseOriginVault to lock states or alter permissions.
📍 Deployed Contract Addresses
The architecture is fully compiled, optimized, and deployed across the following testnet layers:
| Contract | Network | Live Explorer Address |
|---|---|---|
| EthOriginVault | Ethereum Sepolia | 0xB51aAaC9604250987978... |
| BaseOriginVault | Base Sepolia | 0x71A80Ff1868B05753d83... |
| SentinelReactive | Reactive Lasna | 0x2F51F0dB9e7F3966CA0F... |
💻 Tech Stack
- Smart Contracts: Solidity (Hardhat compilation pipeline)
- Reactive Layer: Reactive Network (Lasna Testnet)
- Frontend: Vite + React + TypeScript + TailwindCSS
- Package Management: PNPM Workspaces
🧪 How It Works (Simulation & Testing)
You can test the end-to-end automated reaction flow using the interactive frontend dashboard or directly via block explorers:
1. Trigger the Event
Connect your Web3 wallet (MetaMask / Phantom) to the Ethereum Sepolia Testnet and call the deposit() or simulated trigger function on the EthOriginVault contract.
2. Observe the Reactive Pipeline
Open the Reactive Omni Explorer (lasna-omni.reactscan.net) and paste the SentinelReactive address. You will observe the reactive transaction capturing the origin event emit.
3. Verify Cross-Chain State Sync
Check the transaction history of BaseOriginVault on Base Sepolia Etherscan. Within blocks, an automated callback transaction origin from the Reactive Network will be executed, proving fully autonomous cross-chain synchronization.
257 files
every file readable free; the clone is the same bytes, packaged and agent-payable
artifacts/197
- artifacts/api-server/.replit-artifact/artifact.toml784 B
- artifacts/api-server/.tsbuildinfo49 KB
- artifacts/api-server/build.mjs3 KB
- artifacts/api-server/dist/index.mjs1.4 MB
- artifacts/api-server/dist/index.mjs.map2.1 MB
- artifacts/api-server/dist/pino-file.mjs142 KB
- artifacts/api-server/dist/pino-file.mjs.map229 KB
- artifacts/api-server/dist/pino-pretty.mjs115 KB
- artifacts/api-server/dist/pino-pretty.mjs.map204 KB
- artifacts/api-server/dist/pino-worker.mjs153 KB
- artifacts/api-server/dist/pino-worker.mjs.map257 KB
- artifacts/api-server/dist/thread-stream-worker.mjs7 KB
- artifacts/api-server/dist/thread-stream-worker.mjs.map12 KB
- artifacts/api-server/package.json880 B
- artifacts/api-server/src/app.ts656 B
- artifacts/api-server/src/index.ts511 B
- artifacts/api-server/src/lib/.gitkeep0 B
- artifacts/api-server/src/lib/logger.ts421 B
- artifacts/api-server/src/middlewares/.gitkeep0 B
- artifacts/api-server/src/routes/health.ts288 B
- artifacts/api-server/src/routes/index.ts171 B
- artifacts/api-server/tsconfig.json335 B
- artifacts/mockup-sandbox/.replit-artifact/artifact.toml327 B
- artifacts/mockup-sandbox/.tsbuildinfo216 KB
- artifacts/mockup-sandbox/components.json426 B
- artifacts/mockup-sandbox/index.html4 KB
- artifacts/mockup-sandbox/mockupPreviewPlugin.ts5 KB
- artifacts/mockup-sandbox/package.json2 KB
- artifacts/mockup-sandbox/src/.generated/mockup-components.ts171 B
- artifacts/mockup-sandbox/src/App.tsx4 KB
- artifacts/mockup-sandbox/src/components/ui/accordion.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/alert-dialog.tsx4 KB
- artifacts/mockup-sandbox/src/components/ui/alert.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/aspect-ratio.tsx140 B
- artifacts/mockup-sandbox/src/components/ui/avatar.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/badge.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/breadcrumb.tsx3 KB
- artifacts/mockup-sandbox/src/components/ui/button-group.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/button.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/calendar.tsx7 KB
- artifacts/mockup-sandbox/src/components/ui/card.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/carousel.tsx6 KB
- artifacts/mockup-sandbox/src/components/ui/chart.tsx10 KB
- artifacts/mockup-sandbox/src/components/ui/checkbox.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/collapsible.tsx329 B
- artifacts/mockup-sandbox/src/components/ui/command.tsx5 KB
- artifacts/mockup-sandbox/src/components/ui/context-menu.tsx7 KB
- artifacts/mockup-sandbox/src/components/ui/dialog.tsx4 KB
- artifacts/mockup-sandbox/src/components/ui/drawer.tsx3 KB
- artifacts/mockup-sandbox/src/components/ui/dropdown-menu.tsx7 KB
- artifacts/mockup-sandbox/src/components/ui/empty.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/field.tsx6 KB
- artifacts/mockup-sandbox/src/components/ui/form.tsx4 KB
- artifacts/mockup-sandbox/src/components/ui/hover-card.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/input-group.tsx5 KB
- artifacts/mockup-sandbox/src/components/ui/input-otp.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/input.tsx768 B
- artifacts/mockup-sandbox/src/components/ui/item.tsx4 KB
- artifacts/mockup-sandbox/src/components/ui/kbd.tsx862 B
- artifacts/mockup-sandbox/src/components/ui/label.tsx724 B
- artifacts/mockup-sandbox/src/components/ui/menubar.tsx8 KB
- artifacts/mockup-sandbox/src/components/ui/navigation-menu.tsx5 KB
- artifacts/mockup-sandbox/src/components/ui/pagination.tsx3 KB
- artifacts/mockup-sandbox/src/components/ui/popover.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/progress.tsx792 B
- artifacts/mockup-sandbox/src/components/ui/radio-group.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/resizable.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/scroll-area.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/select.tsx6 KB
- artifacts/mockup-sandbox/src/components/ui/separator.tsx756 B
- artifacts/mockup-sandbox/src/components/ui/sheet.tsx4 KB
- artifacts/mockup-sandbox/src/components/ui/sidebar.tsx21 KB
- artifacts/mockup-sandbox/src/components/ui/skeleton.tsx266 B
- artifacts/mockup-sandbox/src/components/ui/slider.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/sonner.tsx894 B
- artifacts/mockup-sandbox/src/components/ui/spinner.tsx331 B
- artifacts/mockup-sandbox/src/components/ui/switch.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/table.tsx3 KB
- artifacts/mockup-sandbox/src/components/ui/tabs.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/textarea.tsx649 B
- artifacts/mockup-sandbox/src/components/ui/toast.tsx5 KB
- artifacts/mockup-sandbox/src/components/ui/toaster.tsx772 B
- artifacts/mockup-sandbox/src/components/ui/toggle-group.tsx2 KB
- artifacts/mockup-sandbox/src/components/ui/toggle.tsx1 KB
- artifacts/mockup-sandbox/src/components/ui/tooltip.tsx1 KB
- artifacts/mockup-sandbox/src/hooks/use-mobile.tsx565 B
- artifacts/mockup-sandbox/src/hooks/use-toast.ts4 KB
- artifacts/mockup-sandbox/src/index.css6 KB
- artifacts/mockup-sandbox/src/lib/utils.ts166 B
- artifacts/mockup-sandbox/src/main.tsx157 B
- artifacts/mockup-sandbox/tsconfig.json513 B
- artifacts/mockup-sandbox/vite.config.ts2 KB
- artifacts/reactive-sentinel/.replit-artifact/artifact.toml617 B
- artifacts/reactive-sentinel/README.md5 KB
- artifacts/reactive-sentinel/artifacts-hardhat/build-info/a524dbb822e22d6a097ae368750f07ae.json91 KB
- artifacts/reactive-sentinel/artifacts-hardhat/build-info/b2b4a17e25d82b1d38f962f41c6db18a.json157 KB
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/IReactiveProxy.sol/IReactiveProxy.dbg.json105 B
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/IReactiveProxy.sol/IReactiveProxy.json850 B
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/OriginVault.sol/OriginVault.dbg.json105 B
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/OriginVault.sol/OriginVault.json6 KB
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/SentinelReactiveContract.sol/IReactiveProxy.dbg.json105 B
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/SentinelReactiveContract.sol/IReactiveProxy.json860 B
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/SentinelReactiveContract.sol/SentinelReactiveContract.dbg.json105 B
- artifacts/reactive-sentinel/artifacts-hardhat/contracts/SentinelReactiveContract.sol/SentinelReactiveContract.json7 KB
- artifacts/reactive-sentinel/cache/solidity-files-cache.json3 KB
- artifacts/reactive-sentinel/components.json434 B
- artifacts/reactive-sentinel/contracts/IReactiveProxy.sol236 B
- artifacts/reactive-sentinel/contracts/OriginVault.sol1 KB
- artifacts/reactive-sentinel/contracts/SentinelReactiveContract.sol2 KB
- artifacts/reactive-sentinel/hardhat.config.ts1 KB
- artifacts/reactive-sentinel/index.html51 KB
- artifacts/reactive-sentinel/package.json4 KB
- artifacts/reactive-sentinel/public/favicon.svg163 B
- artifacts/reactive-sentinel/public/index.html51 KB
- artifacts/reactive-sentinel/public/opengraph.jpg54 KB
- artifacts/reactive-sentinel/public/robots.txt23 B
- artifacts/reactive-sentinel/scripts/debugger.ts949 B
- artifacts/reactive-sentinel/scripts/deploy.ts2 KB
- artifacts/reactive-sentinel/src/App.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/accordion.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/alert-dialog.tsx4 KB
- artifacts/reactive-sentinel/src/components/ui/alert.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/aspect-ratio.tsx140 B
- artifacts/reactive-sentinel/src/components/ui/avatar.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/badge.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/breadcrumb.tsx3 KB
- artifacts/reactive-sentinel/src/components/ui/button-group.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/button.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/calendar.tsx7 KB
- artifacts/reactive-sentinel/src/components/ui/card.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/carousel.tsx6 KB
- artifacts/reactive-sentinel/src/components/ui/chart.tsx11 KB
- artifacts/reactive-sentinel/src/components/ui/checkbox.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/collapsible.tsx329 B
- artifacts/reactive-sentinel/src/components/ui/command.tsx5 KB
- artifacts/reactive-sentinel/src/components/ui/context-menu.tsx7 KB
- artifacts/reactive-sentinel/src/components/ui/dialog.tsx4 KB
- artifacts/reactive-sentinel/src/components/ui/drawer.tsx3 KB
- artifacts/reactive-sentinel/src/components/ui/dropdown-menu.tsx7 KB
- artifacts/reactive-sentinel/src/components/ui/empty.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/field.tsx6 KB
- artifacts/reactive-sentinel/src/components/ui/form.tsx4 KB
- artifacts/reactive-sentinel/src/components/ui/hover-card.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/input-group.tsx5 KB
- artifacts/reactive-sentinel/src/components/ui/input-otp.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/input.tsx768 B
- artifacts/reactive-sentinel/src/components/ui/item.tsx4 KB
- artifacts/reactive-sentinel/src/components/ui/kbd.tsx862 B
- artifacts/reactive-sentinel/src/components/ui/label.tsx724 B
- artifacts/reactive-sentinel/src/components/ui/menubar.tsx8 KB
- artifacts/reactive-sentinel/src/components/ui/navigation-menu.tsx5 KB
- artifacts/reactive-sentinel/src/components/ui/pagination.tsx3 KB
- artifacts/reactive-sentinel/src/components/ui/popover.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/progress.tsx792 B
- artifacts/reactive-sentinel/src/components/ui/radio-group.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/resizable.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/scroll-area.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/select.tsx6 KB
- artifacts/reactive-sentinel/src/components/ui/separator.tsx756 B
- artifacts/reactive-sentinel/src/components/ui/sheet.tsx4 KB
- artifacts/reactive-sentinel/src/components/ui/sidebar.tsx21 KB
- artifacts/reactive-sentinel/src/components/ui/skeleton.tsx266 B
- artifacts/reactive-sentinel/src/components/ui/slider.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/sonner.tsx894 B
- artifacts/reactive-sentinel/src/components/ui/spinner.tsx331 B
- artifacts/reactive-sentinel/src/components/ui/switch.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/table.tsx3 KB
- artifacts/reactive-sentinel/src/components/ui/tabs.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/textarea.tsx649 B
- artifacts/reactive-sentinel/src/components/ui/toast.tsx5 KB
- artifacts/reactive-sentinel/src/components/ui/toaster.tsx772 B
- artifacts/reactive-sentinel/src/components/ui/toggle-group.tsx2 KB
- artifacts/reactive-sentinel/src/components/ui/toggle.tsx1 KB
- artifacts/reactive-sentinel/src/components/ui/tooltip.tsx1 KB
- artifacts/reactive-sentinel/src/hooks/use-mobile.tsx565 B
- artifacts/reactive-sentinel/src/hooks/use-toast.ts4 KB
- artifacts/reactive-sentinel/src/index.css14 KB
- artifacts/reactive-sentinel/src/lib/utils.ts166 B
- artifacts/reactive-sentinel/src/main.tsx157 B
- artifacts/reactive-sentinel/src/pages/not-found.tsx711 B
- artifacts/reactive-sentinel/tsconfig.hardhat.json431 B
- artifacts/reactive-sentinel/tsconfig.json584 B
- artifacts/reactive-sentinel/typechain-types/IReactiveProxy.ts3 KB
- artifacts/reactive-sentinel/typechain-types/OriginVault.ts6 KB
- artifacts/reactive-sentinel/typechain-types/SentinelReactiveContract.sol/IReactiveProxy.ts3 KB
- artifacts/reactive-sentinel/typechain-types/SentinelReactiveContract.sol/SentinelReactiveContract.ts5 KB
- artifacts/reactive-sentinel/typechain-types/SentinelReactiveContract.sol/index.ts222 B
- artifacts/reactive-sentinel/typechain-types/common.ts4 KB
- artifacts/reactive-sentinel/typechain-types/factories/IReactiveProxy__factory.ts1 KB
- artifacts/reactive-sentinel/typechain-types/factories/OriginVault__factory.ts5 KB
- artifacts/reactive-sentinel/typechain-types/factories/SentinelReactiveContract.sol/IReactiveProxy__factory.ts1 KB
- artifacts/reactive-sentinel/typechain-types/factories/SentinelReactiveContract.sol/SentinelReactiveContract__factory.ts7 KB
- artifacts/reactive-sentinel/typechain-types/factories/SentinelReactiveContract.sol/index.ts248 B
- artifacts/reactive-sentinel/typechain-types/factories/index.ts301 B
- artifacts/reactive-sentinel/typechain-types/hardhat.d.ts4 KB
- artifacts/reactive-sentinel/typechain-types/index.ts752 B
- artifacts/reactive-sentinel/vite.config.mts2 KB
lib/43
- lib/api-client-react/dist/custom-fetch.d.ts2 KB
- lib/api-client-react/dist/custom-fetch.d.ts.map2 KB
- lib/api-client-react/dist/generated/api.d.ts2 KB
- lib/api-client-react/dist/generated/api.d.ts.map2 KB
- lib/api-client-react/dist/generated/api.schemas.d.ts221 B
- lib/api-client-react/dist/generated/api.schemas.d.ts.map195 B
- lib/api-client-react/dist/index.d.ts229 B
- lib/api-client-react/dist/index.d.ts.map246 B
- lib/api-client-react/package.json265 B
- lib/api-client-react/src/custom-fetch.ts11 KB
- lib/api-client-react/src/generated/api.schemas.ts178 B
- lib/api-client-react/src/generated/api.ts2 KB
- lib/api-client-react/src/index.ts194 B
- lib/api-client-react/tsconfig.json251 B
- lib/api-client-react/tsconfig.tsbuildinfo15 KB
- lib/api-spec/openapi.yaml778 B
- lib/api-spec/orval.config.ts2 KB
- lib/api-spec/package.json227 B
- lib/api-zod/dist/generated/api.d.ts416 B
- lib/api-zod/dist/generated/api.d.ts.map213 B
- lib/api-zod/dist/generated/types/healthStatus.d.ts222 B
- lib/api-zod/dist/generated/types/healthStatus.d.ts.map206 B
- lib/api-zod/dist/generated/types/index.d.ts193 B
- lib/api-zod/dist/generated/types/index.d.ts.map162 B
- lib/api-zod/dist/index.d.ts103 B
- lib/api-zod/dist/index.d.ts.map148 B
- lib/api-zod/package.json189 B
- lib/api-zod/src/generated/api.ts296 B
- lib/api-zod/src/generated/types/healthStatus.ts179 B
- lib/api-zod/src/generated/types/index.ts159 B
- lib/api-zod/src/index.ts68 B
- lib/api-zod/tsconfig.json221 B
- lib/api-zod/tsconfig.tsbuildinfo16 KB
- lib/db/dist/index.d.ts273 B
- lib/db/dist/index.d.ts.map225 B
- lib/db/dist/schema/index.d.ts46 B
- lib/db/dist/schema/index.d.ts.map134 B
- lib/db/drizzle.config.ts352 B
- lib/db/package.json578 B
- lib/db/src/index.ts416 B
- lib/db/src/schema/index.ts743 B
- lib/db/tsconfig.json244 B
- lib/db/tsconfig.tsbuildinfo126 KB
scripts/5
- .gitignore40 B
- .npmrc56 B
- .replit492 B
- .replitignore201 B
- LICENCE1 KB
- README.md3 KB
- package.json585 B
- pnpm-lock.yaml339 KB
- pnpm-workspace.yaml6 KB
- replit.md5 KB
- tsconfig.base.json692 B
- tsconfig.json236 B