Skip to content

LUKSOAgent/universal-trust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

247 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Universal Trust

License: MIT LUKSO Mainnet Frontend CI Audited

Hackathon Track: Synthesis 2026 โ€” Agents that Trust

Live: universal-trust.vercel.app ยท Contracts deployed on LUKSO mainnet ยท 80/80 Foundry tests ยท 97/97 SDK tests ยท 0 critical/0 high in security audit


โšก 30-Second Pitch

AI agents are trading your tokens, managing portfolios, and executing contracts โ€” autonomously. How do you know any of them are legitimate?

Universal Trust is an on-chain identity and peer-endorsement registry for AI agents on LUKSO. One smart contract call answers the question that no platform can today:

trust.verify('0xAgentAddress') โ†’ { registered, trustScore, isUniversalProfile, endorsements }

No API keys. No centralized authority. No middleman. Just on-chain cryptographic proof โ€” live on LUKSO mainnet right now.


๐Ÿ† For Hackathon Judges

Everything you need, under 5 minutes:

๐ŸŒ Live app universal-trust.vercel.app
โšก 2-minute demo node demo/demo.js โ€” no wallet, no setup
๐Ÿ” Verified contracts AgentIdentityRegistry on LUKSO Explorer
๐Ÿ“Š Trust graph API curl https://universal-trust.vercel.app/api/trust-graph
๐Ÿ” Security audit 0 critical ยท 0 high ยท AUDIT.md

Key innovations (unique on LUKSO):

  1. verify(address) in one call โ€” returns trust summary to any contract, wallet, or agent with a single RPC call. No backend required.
  2. Trust scores written to Universal Profiles as ERC725Y keys โ€” scores are composable with the entire LUKSO ecosystem, not siloed in a backend.
  3. ERC-8004 compliant agent identity registry โ€” LUKSO is the first chain with an ERC-8004 singleton. LUKSO Agent is agent ID #1.
  4. Cross-chain reputation signal โ€” $LUKSO token holders on Base get an automatic reputation boost via linkBaseAddress. Skin-in-the-game as a Sybil-resistance mechanism.
  5. Inactivity decay โ€” agents automatically lose reputation when dormant. Trust must be maintained, not just earned once.
  6. Built by an AI agent, for AI agents โ€” LUKSO Agent conceived, coded, audited, and deployed this entire project end-to-end.

Deployed contract addresses (LUKSO mainnet):

Contract Address
AgentIdentityRegistry (proxy) 0x16505FeC789F4553Ea88d812711A0E913D926ADD
AgentSkillsRegistry 0x64B3AeCE25B73ecF3b9d53dA84948a9dE987F4F6
ERC-8004 Identity Registry 0xe30B7514744D324e8bD93157E4c82230d6e6e8f3

Why Universal Trust?

The Problem:

AI agents are everywhere. They trade tokens, manage portfolios, write code, execute contracts, and interact with other agents โ€” often autonomously.

The critical gap: there's still no trustless way to verify if an agent is legitimate.

  • An agent requests a $50k token swap from your wallet. Is it registered? Peer-endorsed? Or a drain attack?
  • Two AI systems want to collaborate on a task. How do they verify each other before sharing data or execution rights?
  • A DeFi protocol wants to allow agent access. How does it screen out bad actors without a centralized allowlist?

Today, agent trust is centralized: API keys, platform accounts, corporate-controlled registries. If the platform goes down or revokes access, the agent's identity disappears.

The Solution: On-Chain, Permissionless Identity

Agent A wants to trade on behalf of a user:
  โ†’ User checks: trust.verify('0xAgentA...')
  โ†’ Returns: registered=true, trustScore=280, isUniversalProfile=true
  โ†’ User knows: this agent has been endorsed by 18 peers with 280 reputation points
  โ†’ Decision: approve the trade โœ“

Rogue bot tries to impersonate a trusted agent:
  โ†’ trust.verify('0xFakeBot...')
  โ†’ Returns: registered=false, trustScore=0
  โ†’ Decision: reject immediately โœ—

Real use cases enabled today:

  • Agent-gated DeFi: Only allow agents with trustScore โ‰ฅ 200 to call your vault
  • Collaboration networks: Two agents verify each other before sharing sensitive data
  • Reputation staking: Agents risk their on-chain reputation when making claims
  • Wallet access control: LSP6 KeyManager + trust score = fine-grained agent permissions

๐ŸŽฏ Key Features

  • Self-registration: Any address can register โ€” no allowlist, no admin approval
  • Peer endorsements: Agents vouch for each other, building social trust on-chain
  • Weighted trust scores: Endorsements from high-rep agents count more (V2)
  • One-call verification: verify(address) returns complete trust summary
  • Universal Profiles: Native ERC165 detection for LUKSO UP agents
  • Cross-chain signals: Link Base EOA for $LUKSO token holder reputation boost
  • Inactivity decay: Agents automatically lose 1 rep/day after 30 days of inactivity
  • Skills registry: Immutable on-chain record of agent capabilities
  • Permissionless endorsement removal: Revoke an endorsement you gave
  • LSP26 social scoring: Follower count โ†’ reputation signals

๐Ÿ“ Architecture

  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚                    Your Application                      โ”‚
  โ”‚         (DeFi protocol, wallet, AI orchestrator)         โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚  npm install @universal-trust/sdk
                    โ”‚  trust.verify(agentAddress)
                    โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚              @universal-trust/sdk (TypeScript)           โ”‚
  โ”‚   verify() ยท getProfile() ยท endorse() ยท register()      โ”‚
  โ”‚   verifyBatch() ยท getTrustScore() ยท getSkills()         โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚  web3.js ยท RPC calls
                     โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚                     LUKSO Mainnet (Chain 42)                      โ”‚
  โ”‚                                                                    โ”‚
  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
  โ”‚  โ”‚   AgentIdentityRegistry     โ”‚  โ”‚   AgentSkillsRegistry    โ”‚  โ”‚
  โ”‚  โ”‚   0x16505FeC789F4553...     โ”‚  โ”‚   0x64B3AeCE25B73...     โ”‚  โ”‚
  โ”‚  โ”‚                             โ”‚  โ”‚                           โ”‚  โ”‚
  โ”‚  โ”‚  register()                 โ”‚  โ”‚  publishSkill()          โ”‚  โ”‚
  โ”‚  โ”‚  verify()  โ†โ”€โ”€ one call    โ”‚  โ”‚  getSkill()              โ”‚  โ”‚
  โ”‚  โ”‚  endorse()                  โ”‚  โ”‚  getAllSkills()           โ”‚  โ”‚
  โ”‚  โ”‚  getTrustScore()            โ”‚  โ”‚  hasSkill()              โ”‚  โ”‚
  โ”‚  โ”‚  getAgent()                 โ”‚  โ”‚                           โ”‚  โ”‚
  โ”‚  โ”‚  getEndorsers()             โ”‚  โ”‚  (skills registry        โ”‚  โ”‚
  โ”‚  โ”‚                             โ”‚  โ”‚   linked immutably       โ”‚  โ”‚
  โ”‚  โ”‚  ERC165 UP detection โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”ค   at deploy time)        โ”‚  โ”‚
  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
  โ”‚                โ”‚                                                   โ”‚
  โ”‚                โ”‚ reads identity from                               โ”‚
  โ”‚                โ–ผ                                                   โ”‚
  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                  โ”‚
  โ”‚  โ”‚   Universal Profiles        โ”‚                                  โ”‚
  โ”‚  โ”‚   (LSP0 + LSP3 + LSP6)     โ”‚                                  โ”‚
  โ”‚  โ”‚   native LUKSO identity     โ”‚                                  โ”‚
  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                  โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“Š Trust Score Formula

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                                   โ”‚
โ”‚   trustScore = reputation + (endorsementCount ร— 10)              โ”‚
โ”‚                                                                   โ”‚
โ”‚   weightedTrustScore = reputation                                 โ”‚
โ”‚     + ฮฃ clamp(endorserReputation / 10, 10, 50) per endorser      โ”‚
โ”‚     (capped at 10,000)                                            โ”‚
โ”‚                                                                   โ”‚
โ”‚   lsp26Score = registeredFollowersCount ร— 5  (API only)          โ”‚
โ”‚                                                                   โ”‚
โ”‚   reputation:     starts at 100, range 0โ€“10,000                  โ”‚
โ”‚   endorsements:   each UP endorsement adds +10 (flat)            โ”‚
โ”‚                   or up to +50 (weighted, based on endorser rep)  โ”‚
โ”‚   Endorsers MUST be Universal Profiles (EOAs are rejected)        โ”‚
โ”‚                                                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Example: An agent with reputation=200 endorsed by 8 peers has trustScore = 200 + 80 = 280.

V2 Weighted example: Same agent endorsed by 2 high-rep agents (rep=500) + 6 new agents (rep=100): weightedTrustScore = 200 + (2ร—50) + (6ร—10) = 200 + 100 + 60 = 360


๐Ÿš€ Live Demo โ€” Deployed on LUKSO Mainnet

Contract Address Explorer Link
AgentIdentityRegistry (proxy) 0x16505FeC789F4553Ea88d812711A0E913D926ADD View โœ“ Verified
AgentIdentityRegistry (impl) 0x794528C35903761CdA06A585dc5528B619f1C785 View
AgentSkillsRegistry 0x64B3AeCE25B73ecF3b9d53dA84948a9dE987F4F6 View โœ“ Verified
ERC-8004 Identity Registry 0xe30B7514744D324e8bD93157E4c82230d6e6e8f3 View

Try it now (no wallet needed):

npm install @universal-trust/sdk

node -e "
const { AgentTrust } = require('@universal-trust/sdk');
const t = new AgentTrust({});
t.getAgentCount().then(n => console.log('Registered agents:', n));
t.verify('0x293E96ebbf264ed7715cff2b67850517De70232a').then(v => console.log(v));
"

# Or via Trust Graph API (no SDK, no wallet):
curl https://universal-trust.vercel.app/api/trust-graph | jq '.nodes[] | {name, id, trustScore, weightedTrustScore, lsp26Score}'

๐Ÿ“‹ Registered Agents (Live on Mainnet)

Agent Address Type Trust Score
Deployer EOA 0xA1D8703e52d8992bFeFbd276Bf0957c125583Fc0 EOA 100
LUKSO UP Agent 0x293E96ebbf264ed7715cff2b67850517De70232a Universal Profile 110

Both agents are verified live on-chain. The UP agent has been endorsed once (trustScore = 100 + 10 = 110).


๐Ÿ”ง Tech Stack

Layer Stack
Blockchain LUKSO Mainnet (Chain ID 42)
Standards LSP0 (Universal Profile), LSP6 (KeyManager), LSP26 (Followers), ERC165, ERC-8004
Smart Contracts Solidity ^0.8.19, Foundry, UUPS Proxy (ERC1967)
SDK TypeScript, Web3.js v4, tsup (CJS + ESM + DTS)
Frontend React 19, Vite, Tailwind CSS, ethers.js v6
Indexer Envio GraphQL (LUKSO mainnet)
Hosting Vercel (frontend), LUKSO mainnet (contracts)

SDK Quick Start

npm install @universal-trust/sdk
import { AgentTrust } from '@universal-trust/sdk';

// Zero config โ€” defaults to LUKSO mainnet + deployed contracts
const trust = new AgentTrust({});

// Verify an agent in one call
const result = await trust.verify('0x293E96ebbf264ed7715cff2b67850517De70232a');
// {
//   registered: true,
//   active: true,
//   isUniversalProfile: true,
//   reputation: 100,
//   endorsements: 1,
//   trustScore: 110,
//   name: "LUKSO Agent"
// }

// Gate access by trust score
if (result.registered && result.trustScore >= 100) {
  // Safe to interact with this agent
}

Agent-to-Agent Verification Pattern

async function handleAgentRequest(callerAddress: string, request: any) {
  const trust = new AgentTrust({});
  const v = await trust.verify(callerAddress);

  if (!v.registered)       throw new Error('Unknown agent');
  if (!v.active)           throw new Error('Agent deactivated');
  if (v.trustScore < 100)  throw new Error('Insufficient trust');

  return processRequest(request);  // โœ“ Verified
}

Getting Started (Local Development)

Prerequisites

  • Node.js โ‰ฅ 18
  • Git

Clone & Install

git clone https://github.com/LUKSOAgent/universal-trust.git
cd universal-trust

# Install dependencies
npm install

# Frontend
cd frontend && npm install && npm run dev
# Runs on http://localhost:5173

# SDK
cd ../sdk && npm install && npm run build

# Run demo (agent-to-agent verification)
cd ../demo && node demo.js

Test Smart Contracts

cd contracts
npm install
forge test  # 80/80 passing

๐Ÿ” Security & Audits

Date Scope Auditor Status
2026-03-18 AgentIdentityRegistry, AgentSkillsRegistry Leo (AI Agent) โœ… Complete

Audit Summary:

  • 0 Critical ยท 0 High ยท 3 Medium ยท 2 Low ยท 4 Info
  • Methodology: Line-by-line manual review, OWASP SCS Top 10, LUKSO LSP Security Workshop, Solidity Audit Checklist 2026
  • Key Findings: No reentrancy risks, proper access control, safe arithmetic, acceptable array growth patterns
  • Full Report: See AUDIT.md

๐Ÿ“ Project Structure

universal-trust/
โ”œโ”€โ”€ demo/                               # Phase 3: Agent-to-agent trust demo
โ”‚   โ”œโ”€โ”€ demo.js                         # Orchestrator โ€” run with: node demo/demo.js
โ”‚   โ”œโ”€โ”€ agent-a.js                      # Requesting agent (fetches own trust score)
โ”‚   โ”œโ”€โ”€ agent-b.js                      # Responding agent (verifies caller on-chain)
โ”‚   โ”œโ”€โ”€ config.js                       # Contract address, ABI, RPC, threshold
โ”‚   โ””โ”€โ”€ README.md                       # Trust handshake explainer for judges
โ”œโ”€โ”€ contracts/
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ AgentIdentityRegistry.sol   # Core identity + trust contract
โ”‚   โ”‚   โ””โ”€โ”€ AgentSkillsRegistry.sol     # On-chain skill storage
โ”‚   โ”œโ”€โ”€ test/
โ”‚   โ”‚   โ””โ”€โ”€ AgentIdentityRegistry.t.sol # 80 Foundry tests (all passing)
โ”‚   โ”œโ”€โ”€ abi/                            # Extracted ABIs
โ”‚   โ””โ”€โ”€ foundry.toml
โ”œโ”€โ”€ sdk/                                # @universal-trust/sdk (npm)
โ”‚   โ”œโ”€โ”€ src/trust/AgentTrust.ts        # TypeScript SDK
โ”‚   โ”œโ”€โ”€ dist/                          # Built CJS + ESM + DTS
โ”‚   โ””โ”€โ”€ README.md                      # SDK-specific docs
โ”œโ”€โ”€ frontend/                           # React + Vite + Tailwind
โ”‚   โ”œโ”€โ”€ public/
โ”‚   โ”‚   โ”œโ”€โ”€ .well-known/agent-trust.json  # Machine-readable discovery
โ”‚   โ”‚   โ””โ”€โ”€ api/register.md               # Curl-fetchable registration guide
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ pages/                      # Directory, Profile, Register, Verify
โ”‚       โ”œโ”€โ”€ components/                 # TrustBadge, AgentCard, TrustScoreCard, etc.
โ”‚       โ”œโ”€โ”€ envio.js                    # Envio indexer integration (UP name resolution)
โ”‚       โ””โ”€โ”€ useContract.js
โ”œโ”€โ”€ scripts/
โ”‚   โ””โ”€โ”€ deploy-mainnet.js
โ”œโ”€โ”€ deployed-addresses.json
โ”œโ”€โ”€ CURL_SKILL.md                      # curl/cast registration guide for agents
โ”œโ”€โ”€ AUDIT.md                           # Security audit (0 critical, 0 high)
โ””โ”€โ”€ CONTRIBUTING.md

Smart Contract โ€” Key Functions

The AgentIdentityRegistry contract provides:

Function Description
register(name, description, metadataURI) Register as an agent
verify(address) Get complete trust summary (1 call)
verifyV2(address) V2: like verify() but also returns weightedTrustScore
endorse(address, reason) Endorse another agent (caller must be a Universal Profile)
removeEndorsement(address) Revoke a previously-given endorsement
getTrustScore(address) Flat trust score: reputation + endorsementsร—10
getWeightedTrustScore(address) V2: endorser-reputation-weighted trust score
getAgent(address) Get full agent identity data
getEndorsers(address) Get all agents who endorsed this one
isUniversalProfile(address) Check if address is a LUKSO UP
getAgentsByPage(offset, limit) Paginate the agent registry
linkBaseAddress(address) Link Base chain EOA (one-time; +50 rep via keeper if 50M tokens held)
clearBaseAddress(address) Owner-only: clear a linked Base address
getBaseAddress(address) Get the linked Base address for an agent
applyDecay(address) Apply inactivity decay (permissionless, anyone can call)
setDecayParams(rate, gracePeriod) Owner-only: configure decay rate and grace period
deactivate() / reactivate() Toggle agent active status

๐ŸŽฎ Phase 3 โ€” Agent-to-Agent Trust Demo

The real differentiator: two AI agents communicating over an on-chain trust handshake.

Agent B verifies Agent A's identity on LUKSO mainnet before responding. One smart contract call. No API keys. No centralized authority.

# Run from repo root โ€” no wallet needed
node demo/demo.js
[Agent A] Sending request to Agent B...
[Agent A] Identity: 0x293E...232a (trust score: 110)
[Agent B] Received request from 0x293E...232a
[Agent B] Verifying identity on-chain...
[Agent B] โœ“ Verified: LUKSO Agent (trust score: 110, 1 endorsements)
[Agent B] Trust threshold met (โ‰ฅ 100). Responding.
[Agent B] Response: "Hello! I trust you. Here's my data."
[Agent A] Received trusted response from Agent B.

[Agent B] Received request from 0xDeaD...beeF
[Agent B] Verifying identity on-chain...
[Agent B] โœ— Not registered. Rejecting request.

See demo/README.md for the full walkthrough and integration guide.


๐Ÿค– Machine-Readable Discovery

For automated agents, Universal Trust exposes discovery endpoints:

# Fetch registry metadata (contract addresses, trust formula, API docs)
curl -s https://universal-trust.vercel.app/.well-known/agent-trust.json | python3 -m json.tool

# Fetch curl-based registration instructions (no JS required)
curl -s https://universal-trust.vercel.app/api/register.md

See also CURL_SKILL.md โ€” a step-by-step guide for any AI agent to register itself using only curl + cast, no SDK install required.


๐Ÿ“ฑ Live Application

The React dashboard lets you:

  • Browse all registered agents with trust scores
  • Inspect full agent profiles (reputation, endorsements, skills, metadata)
  • Register your agent via browser wallet
  • Verify any address against the live registry
  • Visualize the trust graph (D3.js endorsement network)

Live at: universal-trust.vercel.app


๐ŸŒŸ Why LUKSO?

LUKSO was built from the ground up for digital identity. Universal Profiles aren't a bolted-on add-on โ€” they're the chain's core primitive. That makes LUKSO uniquely suited for an agent trust registry:

  1. Native identity layer: UPs (LSP0) have built-in metadata, permissions, and key management โ€” no custom identity contracts needed. Every agent is already a structured identity on LUKSO.
  2. Permissioned key management: LSP6 KeyManager lets agents delegate execution rights with fine-grained permissions โ€” the exact primitive needed for agent-gated DeFi.
  3. Social graph built in: LSP26 Followers is a first-class LUKSO standard. The Trust Graph API queries LSP26 to compute a social score from registered followers โ€” no third-party social indexer needed.
  4. Structured metadata standard: LSP3 Profile Metadata provides a schema for name, description, images, links โ€” all readable by any LUKSO-aware dApp, including Universal Trust.
  5. ERC-8004 singleton โ€” LUKSO is first: LUKSO is the first EVM-compatible chain to host an ERC-8004 Agent Identity Registry singleton. Universal Trust deployed it, and LUKSO Agent is registered as agent ID #1.
  6. ERC725Y composability: Trust scores are written back to UPs as ERC725Y keys. Any LUKSO dApp can read agent reputation without any Universal Trust dependency โ€” it's in the profile itself.
  7. EVM compatible: Works with all existing Ethereum tooling โ€” Foundry, ethers.js, Hardhat, MetaMask.

๐Ÿ“Š Test Results

Foundry (Solidity):     80/80 passing โœ“
SDK (TypeScript):       97/97 passing โœ“ (61 unit + 36 integration)
Security audit:         0 Critical, 0 High โœ“
Frontend e2e:           All major flows tested โœ“

๐ŸŽฏ Hackathon Context: Synthesis 2026

Track: Agents that Trust

Universal Trust demonstrates how AI agents can establish verifiable identity and peer-based trust without centralized gatekeepers. Built by an AI agent, for AI agents โ€” using LUKSO's Universal Profiles as the identity primitive and on-chain endorsement graphs as social proof.

Proof of Work

Metric Result
Foundry tests 80/80 passing
SDK tests 97/97 passing (61 unit + 36 integration)
Security audit 0 critical, 0 high (3 medium, 2 low)
Contracts Live & verified on LUKSO mainnet
Frontend Deployed and functional on Vercel
ERC-8004 Compliant identity registry โ€” LUKSO is the first chain with a singleton
Phase 3 Agent-to-agent trust handshake demo โ€” live, no wallet needed

Judge Checklist (all under 5 minutes)

  • โœ… 30 seconds: node demo/demo.js โ€” agent-to-agent trust demo, live on mainnet
  • โœ… 30 seconds: curl https://universal-trust.vercel.app/api/trust-graph | jq . โ€” see the live trust graph
  • โœ… 1 minute: universal-trust.vercel.app โ€” browse, verify, explore
  • โœ… 1 minute: Inspect verified contract โ€” fully verified source on LUKSO explorer
  • โœ… 2 minutes: Read AUDIT.md โ€” 0 critical, 0 high findings
  • โœ… 2 minutes: npm install @universal-trust/sdk and call trust.verify() yourself

๐Ÿ“„ License

MIT โ€” See LICENSE


Built by LUKSO Agent (AI) & JordyDutch (human operator) for the Synthesis Hackathon 2026.

An AI agent that built its own identity registry โ€” and registered itself as agent #1.

Last updated: 2026-03-22 (Hackathon submission)

About

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors