Skip to content

Commit 2196f8a

Browse files
author
Ubuntu
committed
feat: add Helixa AgentDNA action provider — onchain identity for AI agents
Adds HelixaActionProvider with 8 actions for the Helixa AgentDNA protocol (ERC-8004 compliant identity NFTs for AI agents on Base): - register_agent: Mint an onchain identity NFT - get_agent: Look up agent by token ID - get_agent_by_address: Look up agent by wallet address - mutate_agent: Record version changes - add_trait: Add personality traits and skills - resolve_name: Resolve .agent names to addresses - check_name: Check .agent name availability - get_helixa_stats: Protocol statistics Contract: 0x665971e7bf8ec90c3066162c5b396604b3cd7711 (Base mainnet) Website: https://helixa.xyz Free mint for first 100 agents, tiered pricing after. Early adopters earn 2x points toward future token allocation.
1 parent e44e0e4 commit 2196f8a

File tree

5 files changed

+703
-0
lines changed

5 files changed

+703
-0
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
/**
2+
* Helixa AgentDNA contract on Base mainnet (Chain ID 8453).
3+
* ERC-8004 compliant identity NFT for AI agents.
4+
*
5+
* IMPORTANT: This contract does NOT implement ERC721Enumerable.
6+
* totalSupply() and paused() will REVERT. Use totalAgents() instead.
7+
* balanceOf() and ownerOf() work fine (standard ERC721).
8+
*/
9+
export const AGENTDNA_CONTRACT = "0x665971e7bf8ec90c3066162c5b396604b3cd7711";
10+
11+
/**
12+
* Helixa AgentNames contract on Base mainnet.
13+
* .agent naming registry for AI agents.
14+
*/
15+
export const AGENTNAMES_CONTRACT = "0xDE8c422D2076CbAE0cA8f5dA9027A03D48928F2d";
16+
17+
/**
18+
* Max uint256 — pass as parentTokenId when minting without a parent.
19+
*/
20+
export const NO_PARENT =
21+
"115792089237316195423570985008687907853269984665640564039457584007913129639935";
22+
23+
export const AGENTDNA_ABI = [
24+
{
25+
inputs: [],
26+
name: "totalAgents",
27+
outputs: [{ type: "uint256" }],
28+
stateMutability: "view",
29+
type: "function",
30+
},
31+
{
32+
inputs: [{ name: "tokenId", type: "uint256" }],
33+
name: "getAgent",
34+
outputs: [
35+
{
36+
components: [
37+
{ name: "agentAddress", type: "address" },
38+
{ name: "name", type: "string" },
39+
{ name: "framework", type: "string" },
40+
{ name: "mintedAt", type: "uint256" },
41+
{ name: "verified", type: "bool" },
42+
{ name: "soulbound", type: "bool" },
43+
{ name: "generation", type: "uint256" },
44+
{ name: "parentDNA", type: "uint256" },
45+
{ name: "currentVersion", type: "string" },
46+
{ name: "mutationCount", type: "uint256" },
47+
],
48+
type: "tuple",
49+
},
50+
],
51+
stateMutability: "view",
52+
type: "function",
53+
},
54+
{
55+
inputs: [{ name: "agentAddress", type: "address" }],
56+
name: "addressToTokenId",
57+
outputs: [{ type: "uint256" }],
58+
stateMutability: "view",
59+
type: "function",
60+
},
61+
{
62+
inputs: [{ name: "tokenId", type: "uint256" }],
63+
name: "getPoints",
64+
outputs: [{ type: "uint256" }],
65+
stateMutability: "view",
66+
type: "function",
67+
},
68+
{
69+
inputs: [],
70+
name: "mintPrice",
71+
outputs: [{ type: "uint256" }],
72+
stateMutability: "view",
73+
type: "function",
74+
},
75+
{
76+
inputs: [
77+
{ name: "agentAddress", type: "address" },
78+
{ name: "name", type: "string" },
79+
{ name: "framework", type: "string" },
80+
{ name: "tokenURI_", type: "string" },
81+
{ name: "soulbound", type: "bool" },
82+
{ name: "parentTokenId", type: "uint256" },
83+
],
84+
name: "mint",
85+
outputs: [{ type: "uint256" }],
86+
stateMutability: "payable",
87+
type: "function",
88+
},
89+
{
90+
inputs: [
91+
{ name: "tokenId", type: "uint256" },
92+
{ name: "newVersion", type: "string" },
93+
{ name: "reason", type: "string" },
94+
],
95+
name: "mutate",
96+
outputs: [],
97+
stateMutability: "payable",
98+
type: "function",
99+
},
100+
{
101+
inputs: [
102+
{ name: "tokenId", type: "uint256" },
103+
{ name: "traitType", type: "string" },
104+
{ name: "traitValue", type: "string" },
105+
],
106+
name: "addTrait",
107+
outputs: [],
108+
stateMutability: "payable",
109+
type: "function",
110+
},
111+
] as const;
112+
113+
export const AGENTNAMES_ABI = [
114+
{
115+
inputs: [{ name: "name", type: "string" }],
116+
name: "resolve",
117+
outputs: [{ type: "address" }],
118+
stateMutability: "view",
119+
type: "function",
120+
},
121+
{
122+
inputs: [{ name: "name", type: "string" }],
123+
name: "available",
124+
outputs: [{ type: "bool" }],
125+
stateMutability: "view",
126+
type: "function",
127+
},
128+
{
129+
inputs: [{ name: "name", type: "string" }],
130+
name: "register",
131+
outputs: [],
132+
stateMutability: "nonpayable",
133+
type: "function",
134+
},
135+
] as const;

0 commit comments

Comments
 (0)