@settlemint/sdk-eas 2.5.5-mainee49fe3a → 2.5.5-pr8504cfe3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +92 -579
  2. package/package.json +3 -3
package/README.md CHANGED
@@ -28,8 +28,6 @@
28
28
 
29
29
  - [About](#about)
30
30
  - [Examples](#examples)
31
- - [Complete workflow](#complete-workflow)
32
- - [Demo portal issue](#demo-portal-issue)
33
31
  - [Simple eas workflow](#simple-eas-workflow)
34
32
  - [API Reference](#api-reference)
35
33
  - [Functions](#functions)
@@ -61,480 +59,6 @@
61
59
  The SettleMint EAS SDK provides a lightweight wrapper for the Ethereum Attestation Service (EAS), enabling developers to easily create, manage, and verify attestations within their applications. It simplifies the process of working with EAS by handling contract interactions, schema management, and The Graph integration, while ensuring proper integration with the SettleMint platform. This allows developers to quickly implement document verification, identity attestation, and other EAS-based features without manual setup.
62
60
  ## Examples
63
61
 
64
- ### Complete workflow
65
-
66
- ```ts
67
- /**
68
- * Complete EAS Workflow Example
69
- *
70
- * This script demonstrates the complete EAS workflow:
71
- * 1. Deploy EAS contracts
72
- * 2. Register a schema
73
- * 3. Create attestations
74
- * 4. Extract UIDs from transaction events
75
- * 5. Query schema and attestation data
76
- * 6. Validate attestations
77
- */
78
-
79
- import { waitForTransactionReceipt } from "@settlemint/sdk-portal";
80
- import type { Address, Hex } from "viem";
81
- import { encodeAbiParameters, parseAbiParameters } from "viem";
82
- import { ZERO_ADDRESS, ZERO_BYTES32, createEASClient } from "../eas.js";
83
-
84
- async function completeWorkflow() {
85
- console.log("šŸš€ Complete EAS Workflow");
86
- console.log("========================");
87
- console.log("Demonstrating full EAS functionality with real data\n");
88
-
89
- if (
90
- !process.env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT ||
91
- !process.env.SETTLEMINT_ACCESS_TOKEN ||
92
- !process.env.SETTLEMINT_DEPLOYER_ADDRESS
93
- ) {
94
- console.error("āŒ Missing required environment variables");
95
- process.exit(1);
96
- }
97
-
98
- const deployerAddress = process.env.SETTLEMINT_DEPLOYER_ADDRESS as Address;
99
-
100
- // Initialize client
101
- const client = createEASClient({
102
- instance: process.env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT,
103
- accessToken: process.env.SETTLEMINT_ACCESS_TOKEN,
104
- debug: true,
105
- });
106
-
107
- console.log("šŸ—ļø Step 1: Deploy EAS Contracts");
108
- const deployment = await client.deploy(deployerAddress);
109
- console.log("āœ… Contracts deployed successfully:");
110
- console.log(` EAS Address: ${deployment.easAddress}`);
111
- console.log(` Schema Registry: ${deployment.schemaRegistryAddress}`);
112
- console.log();
113
-
114
- console.log("šŸ“ Step 2: Register Schema");
115
- const schemaRegistration = await client.registerSchema(
116
- {
117
- fields: [
118
- { name: "userAddress", type: "address" },
119
- { name: "score", type: "uint256" },
120
- { name: "category", type: "string" },
121
- { name: "verified", type: "bool" },
122
- ],
123
- resolver: ZERO_ADDRESS,
124
- revocable: true,
125
- },
126
- deployerAddress,
127
- );
128
-
129
- // Extract real schema UID from transaction
130
- const schemaReceipt = await waitForTransactionReceipt(schemaRegistration.hash, {
131
- portalGraphqlEndpoint: process.env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT!,
132
- accessToken: process.env.SETTLEMINT_ACCESS_TOKEN!,
133
- timeout: 60000,
134
- });
135
-
136
- let realSchemaUID: Hex | null = null;
137
- if (schemaReceipt.receipt?.events) {
138
- const events = Array.isArray(schemaReceipt.receipt.events)
139
- ? schemaReceipt.receipt.events
140
- : Object.values(schemaReceipt.receipt.events);
141
-
142
- for (const event of events) {
143
- if (
144
- typeof event === "object" &&
145
- event &&
146
- "args" in event &&
147
- event.args &&
148
- typeof event.args === "object" &&
149
- "uid" in event.args
150
- ) {
151
- realSchemaUID = (event.args as { uid: string }).uid as Hex;
152
- break;
153
- }
154
- }
155
- }
156
-
157
- console.log("āœ… Schema registered successfully:");
158
- console.log(` Transaction Hash: ${schemaRegistration.hash}`);
159
- console.log(` Extracted Schema UID: ${realSchemaUID}`);
160
- console.log();
161
-
162
- console.log("šŸŽÆ Step 3: Create Attestation");
163
- const testData = encodeAbiParameters(
164
- parseAbiParameters("address userAddress, uint256 score, string category, bool verified"),
165
- [deployerAddress, BigInt(95), "developer", true],
166
- );
167
-
168
- const attestation = await client.attest(
169
- {
170
- schema: realSchemaUID!,
171
- data: {
172
- recipient: deployerAddress,
173
- expirationTime: BigInt(0),
174
- revocable: true,
175
- refUID: ZERO_BYTES32,
176
- data: testData,
177
- value: BigInt(0),
178
- },
179
- },
180
- deployerAddress,
181
- );
182
-
183
- // Extract real attestation UID from transaction
184
- const attestationReceipt = await waitForTransactionReceipt(attestation.hash, {
185
- portalGraphqlEndpoint: process.env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT!,
186
- accessToken: process.env.SETTLEMINT_ACCESS_TOKEN!,
187
- timeout: 60000,
188
- });
189
-
190
- let realAttestationUID: Hex | null = null;
191
- if (attestationReceipt.receipt?.events) {
192
- const events = Array.isArray(attestationReceipt.receipt.events)
193
- ? attestationReceipt.receipt.events
194
- : Object.values(attestationReceipt.receipt.events);
195
-
196
- for (const event of events) {
197
- if (
198
- typeof event === "object" &&
199
- event &&
200
- "args" in event &&
201
- event.args &&
202
- typeof event.args === "object" &&
203
- "uid" in event.args
204
- ) {
205
- realAttestationUID = (event.args as { uid: string }).uid as Hex;
206
- break;
207
- }
208
- }
209
- }
210
-
211
- console.log("āœ… Attestation created successfully:");
212
- console.log(` Transaction Hash: ${attestation.hash}`);
213
- console.log(` Extracted Attestation UID: ${realAttestationUID}`);
214
- console.log();
215
-
216
- console.log("šŸ” Step 4: Validate Data Existence");
217
-
218
- // Test schema retrieval
219
- console.log("šŸ“– Testing Schema Retrieval:");
220
- try {
221
- const schema = await client.getSchema(realSchemaUID!);
222
- console.log(` Schema Query: ${schema.uid ? "āœ… SUCCESS" : "āš ļø No data returned"}`);
223
- console.log(" Implementation: āœ… Query executes successfully");
224
- } catch (error) {
225
- console.log(` āŒ Schema query failed: ${error}`);
226
- }
227
-
228
- // Test attestation retrieval
229
- console.log("šŸ“‹ Testing Attestation Retrieval:");
230
- try {
231
- const attestationData = await client.getAttestation(realAttestationUID!);
232
- console.log(` Attestation Query: ${attestationData.uid ? "āœ… SUCCESS" : "āš ļø No data returned"}`);
233
- console.log(" Implementation: āœ… Query executes successfully");
234
- } catch (error) {
235
- console.log(` āŒ Attestation query failed: ${error}`);
236
- }
237
-
238
- // Test validation
239
- console.log("āœ”ļø Testing Attestation Validation:");
240
- try {
241
- const isValid = await client.isValidAttestation(realAttestationUID!);
242
- console.log(` Validation Result: ${isValid ? "āœ… VALID" : "āŒ INVALID"}`);
243
- console.log(" Implementation: āœ… Working - proves attestation exists");
244
- } catch (error) {
245
- console.log(` āŒ Validation failed: ${error}`);
246
- }
247
- console.log();
248
-
249
- console.log("šŸŽ‰ EAS Implementation Status Report");
250
- console.log("===================================");
251
- console.log("āœ… Contract Deployment: Working");
252
- console.log("āœ… Schema Registration: Working");
253
- console.log("āœ… Attestation Creation: Working");
254
- console.log("āœ… UID Extraction: Working");
255
- console.log("āœ… Attestation Validation: Working");
256
- console.log("āš ļø Schema Queries: Implemented (Portal returns null)");
257
- console.log("āš ļø Attestation Queries: Implemented (Portal returns null)");
258
- console.log();
259
-
260
- console.log("šŸ“Š Real Data Summary:");
261
- console.log(`šŸ—ļø EAS Contract: ${deployment.easAddress}`);
262
- console.log(`šŸ“ Schema Registry: ${deployment.schemaRegistryAddress}`);
263
- console.log(`šŸ”‘ Schema UID: ${realSchemaUID}`);
264
- console.log(`šŸŽÆ Attestation UID: ${realAttestationUID}`);
265
- console.log();
266
-
267
- console.log("šŸ“‹ Key Insights:");
268
- console.log("• All write operations work correctly");
269
- console.log("• All read method implementations are correct");
270
- console.log("• Portal contract state queries return null (not an SDK issue)");
271
- console.log("• Attestation validation proves data exists on-chain");
272
- console.log("• UID extraction from transaction events works reliably");
273
- console.log();
274
-
275
- console.log("šŸ”§ For Production Use:");
276
- console.log("• Use transaction receipts to extract UIDs");
277
- console.log("• Consider The Graph subgraph for bulk queries");
278
- console.log("• Validation methods can confirm attestation existence");
279
- }
280
-
281
- if (typeof require !== "undefined" && require.main === module) {
282
- completeWorkflow().catch(console.error);
283
- }
284
-
285
- export { completeWorkflow };
286
-
287
- ```
288
- ### Demo portal issue
289
-
290
- ```ts
291
- /**
292
- * Demo script to show Portal vs Besu RPC comparison
293
- * Run this to demonstrate the issue with Portal GraphQL queries
294
- */
295
-
296
- import { createPortalClient } from "@settlemint/sdk-portal";
297
- import { loadEnv } from "@settlemint/sdk-utils/environment";
298
- import { createLogger, requestLogger } from "@settlemint/sdk-utils/logging";
299
- import { type Address, createPublicClient, type Hex, http } from "viem";
300
- import type { introspection } from "../portal/portal-env.js";
301
-
302
- // Test data from our deployment
303
- const EAS_ADDRESS = "0x8da4813fe48efdb7fc7dd1bfee40fe20f01e53d5" as Address;
304
- const SCHEMA_REGISTRY_ADDRESS = "0xe4aa2d08b2884d3673807f44f3248921808fd609" as Address;
305
- const SCHEMA_UID = "0x08b2e2e97720789130096fe5442c7fb4e4e9e2b13b94da335f2d8fcb367de509" as Hex;
306
- const ATTESTATION_UID = "0x525cdc37347b0472e4535513b0e555d482330ea7f3530bcad0053776779b8ae7" as Hex;
307
-
308
- async function runDemo() {
309
- console.log("Portal vs Besu RPC Comparison");
310
- console.log("=============================\n");
311
-
312
- // Load environment variables using SDK utilities
313
- const env = await loadEnv(true, false);
314
- const logger = createLogger();
315
-
316
- if (!env.SETTLEMINT_ACCESS_TOKEN) {
317
- console.error("āŒ Please set SETTLEMINT_ACCESS_TOKEN environment variable");
318
- return;
319
- }
320
-
321
- if (!env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT) {
322
- console.error("āŒ Please set SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT environment variable");
323
- return;
324
- }
325
-
326
- // Use environment variables for RPC endpoint
327
- const rpcUrl = env.SETTLEMINT_BLOCKCHAIN_NODE_JSON_RPC_ENDPOINT || env.SETTLEMINT_BLOCKCHAIN_NODE_OR_LOAD_BALANCER_JSON_RPC_ENDPOINT;
328
- if (!rpcUrl) {
329
- console.error("āŒ Please set SETTLEMINT_BLOCKCHAIN_NODE_JSON_RPC_ENDPOINT or SETTLEMINT_BLOCKCHAIN_NODE_OR_LOAD_BALANCER_JSON_RPC_ENDPOINT environment variable");
330
- return;
331
- }
332
-
333
- // Create type-safe portal client using SDK
334
- const { client: portalClient, graphql: portalGraphql } = createPortalClient<{
335
- introspection: introspection;
336
- disableMasking: true;
337
- scalars: {
338
- JSON: unknown;
339
- };
340
- }>(
341
- {
342
- instance: env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT,
343
- accessToken: env.SETTLEMINT_ACCESS_TOKEN,
344
- },
345
- {
346
- fetch: requestLogger(logger, "portal", fetch) as typeof fetch,
347
- },
348
- );
349
-
350
- const besuClient = createPublicClient({
351
- transport: http(rpcUrl, {
352
- fetchOptions: {
353
- headers: { "x-auth-token": env.SETTLEMINT_ACCESS_TOKEN },
354
- },
355
- }),
356
- });
357
-
358
- console.log("Configuration:");
359
- console.log(`Portal: ${env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT}`);
360
- console.log(`Besu RPC: ${rpcUrl}`);
361
- console.log(`Schema UID: ${SCHEMA_UID}`);
362
- console.log(`Attestation UID: ${ATTESTATION_UID}\n`);
363
-
364
- // Test 1: isAttestationValid
365
- console.log("TEST 1: isAttestationValid()");
366
- console.log("============================\n");
367
-
368
- try {
369
- // Portal call with type-safe GraphQL
370
- console.log("Portal GraphQL query:");
371
- const validationQuery = portalGraphql(`
372
- query IsAttestationValid($address: String!, $uid: String!) {
373
- EAS(address: $address) {
374
- isAttestationValid(uid: $uid)
375
- }
376
- }
377
- `);
378
- console.log("Query with variables:", {
379
- address: EAS_ADDRESS,
380
- uid: ATTESTATION_UID,
381
- });
382
-
383
- const portalValidResult = await portalClient.request(validationQuery, {
384
- address: EAS_ADDRESS,
385
- uid: ATTESTATION_UID,
386
- });
387
- console.log("\nPortal raw response:");
388
- console.log(JSON.stringify(portalValidResult, null, 2));
389
-
390
- // Besu call
391
- console.log("\n\nBesu RPC call:");
392
- console.log(`client.readContract({
393
- address: "${EAS_ADDRESS}",
394
- abi: EAS_ABI,
395
- functionName: "isAttestationValid",
396
- args: ["${ATTESTATION_UID}"]
397
- })`);
398
-
399
- const besuValidResult = await besuClient.readContract({
400
- address: EAS_ADDRESS,
401
- abi: [
402
- {
403
- inputs: [{ name: "uid", type: "bytes32" }],
404
- name: "isAttestationValid",
405
- outputs: [{ name: "", type: "bool" }],
406
- stateMutability: "view",
407
- type: "function",
408
- },
409
- ],
410
- functionName: "isAttestationValid",
411
- args: [ATTESTATION_UID],
412
- });
413
-
414
- console.log("\nBesu raw response:", besuValidResult);
415
- } catch (error) {
416
- console.error("Error in validation test:", error);
417
- }
418
-
419
- // Test 2: getSchema
420
- console.log("\n\nTEST 2: getSchema()");
421
- console.log("==================\n");
422
-
423
- try {
424
- // Portal call with type-safe GraphQL
425
- console.log("Portal GraphQL query:");
426
- const schemaQuery = portalGraphql(`
427
- query GetSchema($address: String!, $uid: String!) {
428
- EASSchemaRegistry(address: $address) {
429
- getSchema(uid: $uid) {
430
- uid
431
- resolver
432
- revocable
433
- schema
434
- }
435
- }
436
- }
437
- `);
438
- console.log("Query with variables:", {
439
- address: SCHEMA_REGISTRY_ADDRESS,
440
- uid: SCHEMA_UID,
441
- });
442
-
443
- const portalSchemaResult = await portalClient.request(schemaQuery, {
444
- address: SCHEMA_REGISTRY_ADDRESS,
445
- uid: SCHEMA_UID,
446
- });
447
- console.log("\nPortal raw response:");
448
- console.log(JSON.stringify(portalSchemaResult, null, 2));
449
-
450
- // Besu call
451
- console.log("\n\nBesu RPC call:");
452
- console.log(`client.call({
453
- to: "${SCHEMA_REGISTRY_ADDRESS}",
454
- data: "0xa2ea7c6e${SCHEMA_UID.slice(2)}"
455
- // getSchema(bytes32) function selector + schema UID
456
- })`);
457
-
458
- const besuSchemaResult = await besuClient.call({
459
- to: SCHEMA_REGISTRY_ADDRESS,
460
- data: `0xa2ea7c6e${SCHEMA_UID.slice(2)}` as Hex,
461
- });
462
-
463
- console.log("\nBesu raw response:");
464
- console.log("- Data length:", besuSchemaResult.data?.length || 0, "bytes");
465
- console.log("- Raw data (first 200 chars):", besuSchemaResult.data?.slice(0, 200) || "No data");
466
- } catch (error) {
467
- console.error("Error in schema test:", error);
468
- }
469
-
470
- // Test 3: getAttestation
471
- console.log("\n\nTEST 3: getAttestation()");
472
- console.log("========================\n");
473
-
474
- try {
475
- // Portal call with type-safe GraphQL
476
- console.log("Portal GraphQL query:");
477
- const attestationQuery = portalGraphql(`
478
- query GetAttestation($address: String!, $uid: String!) {
479
- EAS(address: $address) {
480
- getAttestation(uid: $uid) {
481
- uid
482
- schema
483
- attester
484
- recipient
485
- time
486
- expirationTime
487
- revocable
488
- refUID
489
- data
490
- revocationTime
491
- }
492
- }
493
- }
494
- `);
495
- console.log("Query with variables:", {
496
- address: EAS_ADDRESS,
497
- uid: ATTESTATION_UID,
498
- });
499
-
500
- const portalAttestationResult = await portalClient.request(attestationQuery, {
501
- address: EAS_ADDRESS,
502
- uid: ATTESTATION_UID,
503
- });
504
- console.log("\nPortal raw response:");
505
- console.log(JSON.stringify(portalAttestationResult, null, 2));
506
-
507
- // Besu call
508
- console.log("\n\nBesu RPC call:");
509
- console.log(`client.call({
510
- to: "${EAS_ADDRESS}",
511
- data: "0xa3112a64${ATTESTATION_UID.slice(2)}"
512
- // getAttestation(bytes32) function selector + attestation UID
513
- })`);
514
-
515
- const besuAttestationResult = await besuClient.call({
516
- to: EAS_ADDRESS,
517
- data: `0xa3112a64${ATTESTATION_UID.slice(2)}` as Hex,
518
- });
519
-
520
- console.log("\nBesu raw response:");
521
- console.log("- Data length:", besuAttestationResult.data?.length || 0, "bytes");
522
- console.log("- Raw data (first 200 chars):", besuAttestationResult.data?.slice(0, 200) || "No data");
523
- } catch (error) {
524
- console.error("Error in attestation test:", error);
525
- }
526
-
527
- console.log("\n\nComparison complete");
528
- }
529
-
530
- // Run the demo
531
- if (require.main === module) {
532
- runDemo().catch(console.error);
533
- }
534
-
535
- export { runDemo };
536
-
537
- ```
538
62
  ### Simple eas workflow
539
63
 
540
64
  ```ts
@@ -550,7 +74,7 @@ export { runDemo };
550
74
 
551
75
  import type { Address, Hex } from "viem";
552
76
  import { decodeAbiParameters, encodeAbiParameters, parseAbiParameters } from "viem";
553
- import { ZERO_ADDRESS, ZERO_BYTES32, createEASClient } from "../eas.js"; // Replace this path with "@settlemint/sdk-eas"
77
+ import { ZERO_ADDRESS, ZERO_BYTES32, createEASClient } from "@settlemint/sdk-eas";
554
78
 
555
79
  const CONFIG = {
556
80
  instance: process.env.SETTLEMINT_PORTAL_GRAPHQL_ENDPOINT,
@@ -599,8 +123,7 @@ async function runEASWorkflow() {
599
123
  console.log("šŸš€ Simple EAS SDK Workflow");
600
124
  console.log("===========================\n");
601
125
 
602
- let deployedAddresses: { easAddress: Address; schemaRegistryAddress: Address };
603
- let schemaResult: { hash: Hex } | undefined;
126
+ let _deployedAddresses: { easAddress: Address; schemaRegistryAddress: Address };
604
127
 
605
128
  // Step 1: Initialize EAS Client
606
129
  console.log("šŸ“‹ Step 1: Initialize EAS Client");
@@ -622,7 +145,7 @@ async function runEASWorkflow() {
622
145
  console.log(` EAS: ${deployment.easAddress}`);
623
146
  console.log(` Schema Registry: ${deployment.schemaRegistryAddress}\n`);
624
147
 
625
- deployedAddresses = {
148
+ _deployedAddresses = {
626
149
  easAddress: deployment.easAddress,
627
150
  schemaRegistryAddress: deployment.schemaRegistryAddress,
628
151
  };
@@ -640,7 +163,7 @@ async function runEASWorkflow() {
640
163
  // Step 3: Register Schema
641
164
  console.log("šŸ“ Step 3: Register Schema");
642
165
  try {
643
- schemaResult = await client.registerSchema(
166
+ const schemaResult = await client.registerSchema(
644
167
  {
645
168
  fields: [
646
169
  { name: "user", type: "address", description: "User's wallet address" },
@@ -713,55 +236,68 @@ async function runEASWorkflow() {
713
236
 
714
237
  // Step 5: Retrieve Schema
715
238
  console.log("šŸ“– Step 5: Retrieve Schema");
716
- if (!schemaResult) {
717
- console.log("āš ļø No schema registered, skipping retrieval test\n");
718
- } else {
719
- try {
720
- const schema = await client.getSchema(schemaResult.hash);
721
- console.log("āœ… Schema retrieved successfully");
722
- console.log(` UID: ${schema.uid}`);
723
- console.log(` Resolver: ${schema.resolver}`);
724
- console.log(` Revocable: ${schema.revocable}`);
725
- console.log(` Schema: ${schema.schema}\n`);
726
- } catch (error) {
727
- console.log("āš ļø Schema retrieval failed:");
728
- console.log(` ${error}\n`);
729
- }
730
- }
731
-
732
- // Step 6: Check Attestation Validity
733
- console.log("šŸ” Step 6: Check Attestation Validity");
734
239
  try {
735
- // We'll create an example attestation UID to check
736
- const exampleAttestationUID = "0xabcd567890123456789012345678901234567890123456789012345678901234" as Hex;
737
- const isValid = await client.isValidAttestation(exampleAttestationUID);
738
- console.log("āœ… Attestation validity checked");
739
- console.log(` UID: ${exampleAttestationUID}`);
740
- console.log(` Is Valid: ${isValid}\n`);
240
+ const schema = await client.getSchema(schemaResult.hash);
241
+ console.log("āœ… Schema retrieved successfully");
242
+ console.log(` UID: ${schema.uid}`);
243
+ console.log(` Resolver: ${schema.resolver}`);
244
+ console.log(` Revocable: ${schema.revocable}`);
245
+ console.log(` Schema: ${schema.schema}\n`);
741
246
  } catch (error) {
742
- console.log("āš ļø Attestation validity check failed:");
247
+ console.log("āš ļø Schema retrieval failed:");
743
248
  console.log(` ${error}\n`);
744
249
  }
745
250
 
746
- // Step 7: Get Timestamp for Data
747
- console.log("ā° Step 7: Get Timestamp for Data");
748
- try {
749
- // Data must be padded to 32 bytes (64 hex chars) for bytes32
750
- const sampleData = "0x1234567890abcdef000000000000000000000000000000000000000000000000" as Hex;
751
- const timestamp = await client.getTimestamp(sampleData);
752
- console.log("āœ… Timestamp retrieved successfully");
753
- console.log(` Data: ${sampleData}`);
754
- console.log(` Timestamp: ${timestamp} (${new Date(Number(timestamp) * 1000).toISOString()})\n`);
755
- } catch (error) {
756
- console.log("āš ļø Timestamp retrieval failed:");
757
- console.log(` ${error}\n`);
758
- }
759
-
760
- // Note: Bulk query operations require The Graph integration
761
- console.log("šŸ“ Note about Bulk Operations:");
762
- console.log(" • getSchemas() and getAttestations() require The Graph subgraph integration");
763
- console.log(" • Individual lookups (getSchema, getAttestation) are fully functional via Portal");
764
- console.log(" • Consider implementing The Graph integration for bulk data operations\n");
251
+ // // Step 6: Retrieve All Schemas
252
+ // console.log("šŸ“š Step 6: Retrieve All Schemas");
253
+ // try {
254
+ // const schemas = await client.getSchemas({ limit: 10 });
255
+ // console.log("āœ… Schemas retrieved successfully");
256
+ // console.log(` Found ${schemas.length} schemas`);
257
+ // schemas.forEach((schema, index) => {
258
+ // console.log(` ${index + 1}. ${schema.uid} - ${schema.schema}`);
259
+ // });
260
+ // console.log();
261
+ // } catch (error) {
262
+ // console.log("āš ļø Schemas retrieval failed (Portal access required)");
263
+ // console.log(" Would retrieve paginated schemas\n");
264
+ // }
265
+
266
+ // // Step 7: Retrieve Attestations
267
+ // console.log("šŸ“‹ Step 7: Retrieve Attestations");
268
+ // try {
269
+ // const attestation1 = await client.getAttestation(
270
+ // "0xabcd567890123456789012345678901234567890123456789012345678901234",
271
+ // );
272
+ // console.log("āœ… Attestation retrieved successfully");
273
+ // console.log(` UID: ${attestation1.uid}`);
274
+ // console.log(` Attester: ${attestation1.attester}`);
275
+ // console.log(` Recipient: ${attestation1.recipient}`);
276
+ // console.log(` Schema: ${attestation1.schema}\n`);
277
+ // } catch (error) {
278
+ // console.log("āš ļø Attestation retrieval failed (Portal access required)");
279
+ // console.log(
280
+ // " Would retrieve attestations: 0xabcd567890123456789012345678901234567890123456789012345678901234, 0xefgh567890123456789012345678901234567890123456789012345678901234\n",
281
+ // );
282
+ // }
283
+
284
+ // // Step 8: Retrieve All Attestations
285
+ // console.log("šŸ“‹ Step 8: Retrieve All Attestations");
286
+ // try {
287
+ // const attestations = await client.getAttestations({
288
+ // limit: 10,
289
+ // schema: "0x1234567890123456789012345678901234567890123456789012345678901234",
290
+ // });
291
+ // console.log("āœ… Attestations retrieved successfully");
292
+ // console.log(` Found ${attestations.length} attestations`);
293
+ // attestations.forEach((attestation, index) => {
294
+ // console.log(` ${index + 1}. ${attestation.uid} by ${attestation.attester}`);
295
+ // });
296
+ // console.log();
297
+ // } catch (error) {
298
+ // console.log("āš ļø Attestations retrieval failed (Portal access required)");
299
+ // console.log(" Would retrieve paginated attestations\n");
300
+ // }
765
301
 
766
302
  // Final Summary
767
303
  console.log("šŸŽ‰ Workflow Complete!");
@@ -770,38 +306,21 @@ async function runEASWorkflow() {
770
306
  console.log("āœ… Contract deployment ready");
771
307
  console.log("āœ… Schema registration ready");
772
308
  console.log("āœ… Attestation creation ready");
773
- console.log("āœ… Individual schema retrieval implemented");
774
- console.log("āœ… Individual attestation retrieval implemented");
775
- console.log("āœ… Attestation validation implemented");
776
- console.log("āœ… Data timestamp retrieval implemented");
777
-
778
- console.log("\nšŸ’” Production ready!");
779
- console.log("- Core EAS operations fully implemented");
780
- console.log("- Portal GraphQL integration for all individual queries");
781
- console.log("- Comprehensive error handling with specific error messages");
782
- console.log("- Type-safe TypeScript API with full type inference");
783
- console.log("- No hardcoded values - fully configurable");
784
-
785
- console.log("\nšŸ”‘ Fully Implemented Features:");
786
- console.log("- āœ… Contract deployment (EAS + Schema Registry)");
787
- console.log("- āœ… Schema registration with field validation");
788
- console.log("- āœ… Single and multi-attestation creation");
789
- console.log("- āœ… Attestation revocation");
790
- console.log("- āœ… Schema lookup by UID");
791
- console.log("- āœ… Attestation lookup by UID");
792
- console.log("- āœ… Attestation validity checking");
793
- console.log("- āœ… Data timestamp queries");
794
-
795
- console.log("\n🚧 Future Enhancements (requiring The Graph):");
796
- console.log("- ā³ Bulk schema listings (getSchemas)");
797
- console.log("- ā³ Bulk attestation listings (getAttestations)");
798
- console.log("- ā³ Advanced filtering and pagination");
799
-
800
- console.log("\nšŸ”‘ To use with real Portal:");
801
- console.log("- Obtain valid EAS Portal access token");
802
- console.log("- Provide deployer and transaction sender addresses");
803
- console.log("- Deploy or configure contract addresses");
804
- console.log("- Start creating and querying attestations!");
309
+ console.log("āœ… Schema retrieval ready");
310
+ console.log("āœ… Attestation retrieval ready");
311
+
312
+ console.log("\nšŸ’” Ready for production!");
313
+ console.log("- All EAS operations implemented");
314
+ console.log("- Portal GraphQL integration");
315
+ console.log("- Comprehensive error handling");
316
+ console.log("- Type-safe TypeScript API");
317
+ console.log("- Fully configurable");
318
+
319
+ console.log("\nšŸ”‘ To use with Portal:");
320
+ console.log("- Set valid Portal access token");
321
+ console.log("- Configure deployer and sender addresses");
322
+ console.log("- Deploy or set contract addresses");
323
+ console.log("- Start creating attestations!");
805
324
  }
806
325
 
807
326
  export const DigitalNotarySchemaHelpers = {
@@ -946,7 +465,7 @@ export { runEASWorkflow, type UserReputationSchema };
946
465
 
947
466
  > **createEASClient**(`options`): [`EASClient`](#easclient)
948
467
 
949
- Defined in: [sdk/eas/src/eas.ts:716](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L716)
468
+ Defined in: [sdk/eas/src/eas.ts:632](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L632)
950
469
 
951
470
  Create an EAS client instance
952
471
 
@@ -1127,7 +646,7 @@ console.log("EAS Contract:", deployment.easAddress);
1127
646
 
1128
647
  > **getAttestation**(`uid`): `Promise`\<[`AttestationInfo`](#attestationinfo)\>
1129
648
 
1130
- Defined in: [sdk/eas/src/eas.ts:549](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L549)
649
+ Defined in: [sdk/eas/src/eas.ts:528](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L528)
1131
650
 
1132
651
  Get an attestation by UID
1133
652
 
@@ -1145,7 +664,7 @@ Get an attestation by UID
1145
664
 
1146
665
  > **getAttestations**(`_options?`): `Promise`\<[`AttestationInfo`](#attestationinfo)[]\>
1147
666
 
1148
- Defined in: [sdk/eas/src/eas.ts:589](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L589)
667
+ Defined in: [sdk/eas/src/eas.ts:539](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L539)
1149
668
 
1150
669
  Get attestations with pagination and filtering
1151
670
 
@@ -1167,7 +686,7 @@ Consider using getAttestation() for individual attestation lookups.
1167
686
 
1168
687
  > **getContractAddresses**(): `object`
1169
688
 
1170
- Defined in: [sdk/eas/src/eas.ts:662](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L662)
689
+ Defined in: [sdk/eas/src/eas.ts:578](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L578)
1171
690
 
1172
691
  Get current contract addresses
1173
692
 
@@ -1177,14 +696,14 @@ Get current contract addresses
1177
696
 
1178
697
  | Name | Type | Defined in |
1179
698
  | ------ | ------ | ------ |
1180
- | `easAddress?` | `` `0x${string}` `` | [sdk/eas/src/eas.ts:662](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L662) |
1181
- | `schemaRegistryAddress?` | `` `0x${string}` `` | [sdk/eas/src/eas.ts:662](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L662) |
699
+ | `easAddress?` | `` `0x${string}` `` | [sdk/eas/src/eas.ts:578](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L578) |
700
+ | `schemaRegistryAddress?` | `` `0x${string}` `` | [sdk/eas/src/eas.ts:578](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L578) |
1182
701
 
1183
702
  ###### getOptions()
1184
703
 
1185
704
  > **getOptions**(): `object`
1186
705
 
1187
- Defined in: [sdk/eas/src/eas.ts:648](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L648)
706
+ Defined in: [sdk/eas/src/eas.ts:564](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L564)
1188
707
 
1189
708
  Get client configuration
1190
709
 
@@ -1202,7 +721,7 @@ Get client configuration
1202
721
 
1203
722
  > **getPortalClient**(): `GraphQLClient`
1204
723
 
1205
- Defined in: [sdk/eas/src/eas.ts:655](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L655)
724
+ Defined in: [sdk/eas/src/eas.ts:571](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L571)
1206
725
 
1207
726
  Get the Portal client instance for advanced operations
1208
727
 
@@ -1214,7 +733,7 @@ Get the Portal client instance for advanced operations
1214
733
 
1215
734
  > **getSchema**(`uid`): `Promise`\<[`SchemaData`](#schemadata)\>
1216
735
 
1217
- Defined in: [sdk/eas/src/eas.ts:506](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L506)
736
+ Defined in: [sdk/eas/src/eas.ts:508](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L508)
1218
737
 
1219
738
  Get a schema by UID
1220
739
 
@@ -1232,7 +751,7 @@ Get a schema by UID
1232
751
 
1233
752
  > **getSchemas**(`_options?`): `Promise`\<[`SchemaData`](#schemadata)[]\>
1234
753
 
1235
- Defined in: [sdk/eas/src/eas.ts:540](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L540)
754
+ Defined in: [sdk/eas/src/eas.ts:519](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L519)
1236
755
 
1237
756
  Get all schemas with pagination
1238
757
 
@@ -1252,29 +771,23 @@ Consider using getSchema() for individual schema lookups.
1252
771
 
1253
772
  ###### getTimestamp()
1254
773
 
1255
- > **getTimestamp**(`data`): `Promise`\<`bigint`\>
774
+ > **getTimestamp**(): `Promise`\<`bigint`\>
1256
775
 
1257
- Defined in: [sdk/eas/src/eas.ts:623](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L623)
776
+ Defined in: [sdk/eas/src/eas.ts:557](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L557)
1258
777
 
1259
778
  Get the timestamp for specific data
1260
779
 
1261
- ###### Parameters
1262
-
1263
- | Parameter | Type | Description |
1264
- | ------ | ------ | ------ |
1265
- | `data` | `` `0x${string}` `` | The data to get timestamp for |
780
+ The data parameter must be a bytes32 value (64 hex characters with 0x prefix)
1266
781
 
1267
782
  ###### Returns
1268
783
 
1269
784
  `Promise`\<`bigint`\>
1270
785
 
1271
- The timestamp when the data was timestamped
1272
-
1273
786
  ###### isValidAttestation()
1274
787
 
1275
- > **isValidAttestation**(`uid`): `Promise`\<`boolean`\>
788
+ > **isValidAttestation**(`_uid`): `Promise`\<`boolean`\>
1276
789
 
1277
- Defined in: [sdk/eas/src/eas.ts:598](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L598)
790
+ Defined in: [sdk/eas/src/eas.ts:548](https://github.com/settlemint/sdk/blob/v2.5.5/sdk/eas/src/eas.ts#L548)
1278
791
 
1279
792
  Check if an attestation is valid
1280
793
 
@@ -1282,7 +795,7 @@ Check if an attestation is valid
1282
795
 
1283
796
  | Parameter | Type |
1284
797
  | ------ | ------ |
1285
- | `uid` | `` `0x${string}` `` |
798
+ | `_uid` | `` `0x${string}` `` |
1286
799
 
1287
800
  ###### Returns
1288
801
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@settlemint/sdk-eas",
3
3
  "description": "Ethereum Attestation Service (EAS) integration for SettleMint SDK",
4
- "version": "2.5.5-mainee49fe3a",
4
+ "version": "2.5.5-pr8504cfe3",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "license": "FSL-1.1-MIT",
@@ -52,8 +52,8 @@
52
52
  },
53
53
  "devDependencies": {},
54
54
  "dependencies": {
55
- "@settlemint/sdk-portal": "2.5.5-mainee49fe3a",
56
- "@settlemint/sdk-utils": "2.5.5-mainee49fe3a",
55
+ "@settlemint/sdk-portal": "2.5.5-pr8504cfe3",
56
+ "@settlemint/sdk-utils": "2.5.5-pr8504cfe3",
57
57
  "gql.tada": "^1",
58
58
  "viem": "^2",
59
59
  "zod": "^4"