ccip-router 0.1.0 → 0.2.0
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.
- package/README.md +32 -2
- package/contracts/IAttestationVerifier.sol +11 -0
- package/contracts/WyriweAttestationVerifier.sol +117 -0
- package/dist/chain/abi.d.ts +16 -0
- package/dist/chain/abi.d.ts.map +1 -1
- package/dist/chain/abi.js +12 -0
- package/dist/chain/abi.js.map +1 -1
- package/dist/chain/client.d.ts +10 -10
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +14 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/db/sqlite.d.ts +5 -1
- package/dist/db/sqlite.d.ts.map +1 -1
- package/dist/db/sqlite.js +54 -0
- package/dist/db/sqlite.js.map +1 -1
- package/dist/db/types.d.ts +12 -0
- package/dist/db/types.d.ts.map +1 -1
- package/dist/ens/dns.d.ts +3 -0
- package/dist/ens/dns.d.ts.map +1 -0
- package/dist/ens/dns.js +27 -0
- package/dist/ens/dns.js.map +1 -0
- package/dist/ens/withEns.d.ts +17 -0
- package/dist/ens/withEns.d.ts.map +1 -0
- package/dist/ens/withEns.js +60 -0
- package/dist/ens/withEns.js.map +1 -0
- package/dist/lib.d.ts +4 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +3 -1
- package/dist/lib.js.map +1 -1
- package/package.json +15 -5
package/README.md
CHANGED
|
@@ -6,6 +6,35 @@ EIP-3668 defines how clients talk to CCIP-Read gateways. It says nothing about h
|
|
|
6
6
|
|
|
7
7
|
No ENS required. No agents required. Any CCIP-Read project can plug in a resolver and get a mesh-ready gateway in minutes.
|
|
8
8
|
|
|
9
|
+
**→ [Integration guide](GUIDE.md)** — install, quickstart, attestation setup, contracts, mesh join.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## What you can build
|
|
14
|
+
|
|
15
|
+
ccip-router is a general-purpose CCIP-Read gateway. The resolver function is yours — the mesh, signing, and attestation pipeline come wired up around it.
|
|
16
|
+
|
|
17
|
+
**ENS name resolution**
|
|
18
|
+
Point an ENS `wildcard` or `offchainLookup` resolver at your gateway. ccip-router handles the EIP-3668 `/{sender}/{data}.json` endpoint, signs every response, and replicates it to peer nodes — so your ENS names stay live even if one gateway goes down.
|
|
19
|
+
|
|
20
|
+
**Native full web3 dapps**
|
|
21
|
+
Pin your app's pages as IPFS CIDs and set them as the ENS contenthash — the frontend has no server to take down. Serve dynamic data through ccip-router: any node in the mesh can answer a CCIP-Read request, so if one goes offline the others keep the app running. The ENS name ties both layers together on-chain. The result is a dapp with no single point of failure at either the frontend or the data layer.
|
|
22
|
+
|
|
23
|
+
**Off-chain data for on-chain contracts**
|
|
24
|
+
Any smart contract that uses `OffchainLookup` can delegate reads to ccip-router. Store token metadata, user profiles, game state, or permit trees off-chain and serve them through a verifiable gateway rather than a trusted API.
|
|
25
|
+
|
|
26
|
+
**Audit trail for AI agents**
|
|
27
|
+
Wrap an AI inference function with `withWyriwe()`. Every call gets a cryptographic receipt: what input the agent received, what model processed it, what it returned — EIP-712 signed and replicated across the mesh. Useful anywhere you need a tamper-evident log of AI output (legal, compliance, multi-agent workflows).
|
|
28
|
+
|
|
29
|
+
**Model Context Protocol (MCP) gateway**
|
|
30
|
+
Run ccip-router as the transport layer for an MCP server. Tool calls arrive as CCIP-Read requests; attestations prove what the model saw and returned. Any peer can verify a past call without trusting your node.
|
|
31
|
+
|
|
32
|
+
**Redundant resolver mesh**
|
|
33
|
+
Run the same namespace across multiple nodes. Records sync every five minutes over `GET /records`. If one node goes offline its records are already on the others — no single point of failure, no custom failover logic.
|
|
34
|
+
|
|
35
|
+
**Any verifiable off-chain lookup**
|
|
36
|
+
If your contract needs off-chain data and you want proof it wasn't tampered with, ccip-router gives you the signed record, the peer-replicated history, and an optional on-chain anchor — all from a single resolver function.
|
|
37
|
+
|
|
9
38
|
---
|
|
10
39
|
|
|
11
40
|
## Architecture
|
|
@@ -97,14 +126,15 @@ Both contracts are permissionless — no owner, no admin. One deployment per cha
|
|
|
97
126
|
|---|---|---|
|
|
98
127
|
| `AttestationIndex` | [`0x107D706112225aC57eCf6692FBbDC283fb6E3698`](https://sepolia.etherscan.io/address/0x107D706112225aC57eCf6692FBbDC283fb6E3698) | Anchors EIP-712 `WyriweAttestation` records on-chain. Stores `signerOf[commitmentHash]` and `commitmentOf[inputHash]`. |
|
|
99
128
|
| `NodeRegistry` | [`0x6be4966596A9CBaa7260ab6EbbFFA69bBC9a42b7`](https://sepolia.etherscan.io/address/0x6be4966596A9CBaa7260ab6EbbFFA69bBC9a42b7) | Public directory of nodes. `register(url, sig)` proves key ownership via EIP-191 — the relayer (`msg.sender`) does not need to be the signing key. |
|
|
129
|
+
| `WyriweAttestationVerifier` | [`0x9515D6e53D2D45C1CFE6181943ca11C150C2bf61`](https://sepolia.etherscan.io/address/0x9515D6e53D2D45C1CFE6181943ca11C150C2bf61) | ERC-8183 `IAttestationVerifier` implementation. `verify(commitmentHash, abi.encode(WyriweAttestation, sig))` — recovers signer, recomputes OCP commitment, returns bool. No external calls. |
|
|
100
130
|
|
|
101
131
|
Deployed by [`0xFf9a176577Fb42b6bc9c19fd05a241e8fCd0ca14`](https://sepolia.etherscan.io/address/0xFf9a176577Fb42b6bc9c19fd05a241e8fCd0ca14) · Solc 0.8.24 · optimizer 200 runs.
|
|
102
132
|
|
|
103
133
|
**To use on Sepolia:** open the admin panel → Deploy contracts → select Sepolia → "Use these addresses →". Addresses are saved to config automatically, no deployment needed.
|
|
104
134
|
|
|
105
|
-
**To deploy to another chain:** open the admin panel → Deploy contracts → select the chain → connect wallet →
|
|
135
|
+
**To deploy to another chain:** open the admin panel → Deploy contracts → select the chain → connect wallet → three transactions (one per contract). No private key is stored — MetaMask signs everything in-browser.
|
|
106
136
|
|
|
107
|
-
Source: [`contracts/AttestationIndex.sol`](contracts/AttestationIndex.sol) · [`contracts/NodeRegistry.sol`](contracts/NodeRegistry.sol)
|
|
137
|
+
Source: [`contracts/AttestationIndex.sol`](contracts/AttestationIndex.sol) · [`contracts/NodeRegistry.sol`](contracts/NodeRegistry.sol) · [`contracts/WyriweAttestationVerifier.sol`](contracts/WyriweAttestationVerifier.sol)
|
|
108
138
|
|
|
109
139
|
---
|
|
110
140
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
|
+
|
|
4
|
+
/// @title IAttestationVerifier
|
|
5
|
+
/// @notice ERC-8183 attestation verifier interface.
|
|
6
|
+
/// Called by settlement contracts via the attested complete() overload:
|
|
7
|
+
/// IAttestationVerifier.verify(job.reason, proof)
|
|
8
|
+
/// The verifier owns the proof encoding scheme entirely.
|
|
9
|
+
interface IAttestationVerifier {
|
|
10
|
+
function verify(bytes32 attestationHash, bytes calldata proof) external view returns (bool);
|
|
11
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
|
+
|
|
4
|
+
import { IAttestationVerifier } from "./IAttestationVerifier.sol";
|
|
5
|
+
|
|
6
|
+
/// @title WyriweAttestationVerifier
|
|
7
|
+
/// @notice IAttestationVerifier implementation for WYRIWE / OCP attestations.
|
|
8
|
+
///
|
|
9
|
+
/// Mapping for ERC-8183 attested settlement:
|
|
10
|
+
/// attestationHash = commitmentHash
|
|
11
|
+
/// = keccak256(abi.encode(agentId, modelHash, inputHash, outputHash, timestamp))
|
|
12
|
+
/// proof = abi.encode(WyriweAttestation attestation, bytes signature)
|
|
13
|
+
///
|
|
14
|
+
/// verify() recovers the gateway signer from the EIP-712 signature, recomputes
|
|
15
|
+
/// commitmentHash from the decoded struct, and checks both against attestationHash.
|
|
16
|
+
/// No external contract calls — fully self-contained.
|
|
17
|
+
contract WyriweAttestationVerifier is IAttestationVerifier {
|
|
18
|
+
|
|
19
|
+
// ── Types ─────────────────────────────────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
struct WyriweAttestation {
|
|
22
|
+
bytes32 agentId;
|
|
23
|
+
address registry; // ERC-8004 registry — EIP-712 verifyingContract
|
|
24
|
+
bytes32 modelHash;
|
|
25
|
+
bytes32 rawInputHash;
|
|
26
|
+
bytes32 sanitizationPipelineHash;
|
|
27
|
+
bytes32 inputHash; // WYRIWE anchor — must be included in commitmentHash
|
|
28
|
+
bytes32 outputHash;
|
|
29
|
+
bytes32 commitmentHash; // OCP observation commitment — this == attestationHash
|
|
30
|
+
uint256 timestamp;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// ── Constants ─────────────────────────────────────────────────────────────
|
|
34
|
+
|
|
35
|
+
bytes32 private constant DOMAIN_TYPEHASH = keccak256(
|
|
36
|
+
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
bytes32 private constant ATTESTATION_TYPEHASH = keccak256(
|
|
40
|
+
"WyriweAttestation(bytes32 agentId,address registry,bytes32 modelHash,"
|
|
41
|
+
"bytes32 rawInputHash,bytes32 sanitizationPipelineHash,bytes32 inputHash,"
|
|
42
|
+
"bytes32 outputHash,bytes32 commitmentHash,uint256 timestamp)"
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
// ── IAttestationVerifier ──────────────────────────────────────────────────
|
|
46
|
+
|
|
47
|
+
/// @notice Verify a WYRIWE attestation proof.
|
|
48
|
+
/// @param attestationHash The commitmentHash stored as job.reason in ERC-8183.
|
|
49
|
+
/// @param proof abi.encode(WyriweAttestation attestation, bytes signature)
|
|
50
|
+
/// @return true if:
|
|
51
|
+
/// 1. The recomputed OCP commitmentHash matches attestationHash.
|
|
52
|
+
/// 2. The EIP-712 signature over the struct is valid (non-zero signer recovered).
|
|
53
|
+
function verify(
|
|
54
|
+
bytes32 attestationHash,
|
|
55
|
+
bytes calldata proof
|
|
56
|
+
) external view returns (bool) {
|
|
57
|
+
(WyriweAttestation memory a, bytes memory sig) = abi.decode(
|
|
58
|
+
proof,
|
|
59
|
+
(WyriweAttestation, bytes)
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// ── 1. Recompute and check commitmentHash ──────────────────────────
|
|
63
|
+
// OCP observation commitment: binds agentId, modelHash, inputHash (WYRIWE anchor),
|
|
64
|
+
// outputHash, and timestamp. inputHash is an explicit named field — independently
|
|
65
|
+
// verifiable from the struct without trusting the verifier for the binding.
|
|
66
|
+
bytes32 recomputed = keccak256(abi.encode(
|
|
67
|
+
a.agentId,
|
|
68
|
+
a.modelHash,
|
|
69
|
+
a.inputHash,
|
|
70
|
+
a.outputHash,
|
|
71
|
+
a.timestamp
|
|
72
|
+
));
|
|
73
|
+
if (recomputed != attestationHash) return false;
|
|
74
|
+
if (a.commitmentHash != attestationHash) return false;
|
|
75
|
+
|
|
76
|
+
// ── 2. Verify EIP-712 signature ────────────────────────────────────
|
|
77
|
+
// Domain: name="WyriweAttestation", version="1", chainId=block.chainid,
|
|
78
|
+
// verifyingContract=a.registry (ERC-8004 registry, NOT this contract).
|
|
79
|
+
bytes32 domainSeparator = keccak256(abi.encode(
|
|
80
|
+
DOMAIN_TYPEHASH,
|
|
81
|
+
keccak256("WyriweAttestation"),
|
|
82
|
+
keccak256("1"),
|
|
83
|
+
block.chainid,
|
|
84
|
+
a.registry
|
|
85
|
+
));
|
|
86
|
+
|
|
87
|
+
bytes32 structHash = keccak256(abi.encode(
|
|
88
|
+
ATTESTATION_TYPEHASH,
|
|
89
|
+
a.agentId, a.registry, a.modelHash,
|
|
90
|
+
a.rawInputHash, a.sanitizationPipelineHash,
|
|
91
|
+
a.inputHash, a.outputHash,
|
|
92
|
+
a.commitmentHash, a.timestamp
|
|
93
|
+
));
|
|
94
|
+
|
|
95
|
+
bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
|
|
96
|
+
address signer = _recover(digest, sig);
|
|
97
|
+
|
|
98
|
+
return signer != address(0);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ── Internal ──────────────────────────────────────────────────────────────
|
|
102
|
+
|
|
103
|
+
function _recover(bytes32 digest, bytes memory sig) internal pure returns (address) {
|
|
104
|
+
if (sig.length != 65) return address(0);
|
|
105
|
+
bytes32 r;
|
|
106
|
+
bytes32 s;
|
|
107
|
+
uint8 v;
|
|
108
|
+
assembly {
|
|
109
|
+
r := mload(add(sig, 32))
|
|
110
|
+
s := mload(add(sig, 64))
|
|
111
|
+
v := byte(0, mload(add(sig, 96)))
|
|
112
|
+
}
|
|
113
|
+
if (v < 27) v += 27;
|
|
114
|
+
if (v != 27 && v != 28) return address(0);
|
|
115
|
+
return ecrecover(digest, v, r, s);
|
|
116
|
+
}
|
|
117
|
+
}
|
package/dist/chain/abi.d.ts
CHANGED
|
@@ -102,6 +102,22 @@ export declare const ATTESTATION_INDEX_ABI: readonly [{
|
|
|
102
102
|
readonly indexed: false;
|
|
103
103
|
}];
|
|
104
104
|
}];
|
|
105
|
+
export declare const WYRIWE_ATTESTATION_VERIFIER_ABI: readonly [{
|
|
106
|
+
readonly type: "function";
|
|
107
|
+
readonly name: "verify";
|
|
108
|
+
readonly inputs: readonly [{
|
|
109
|
+
readonly name: "attestationHash";
|
|
110
|
+
readonly type: "bytes32";
|
|
111
|
+
}, {
|
|
112
|
+
readonly name: "proof";
|
|
113
|
+
readonly type: "bytes";
|
|
114
|
+
}];
|
|
115
|
+
readonly outputs: readonly [{
|
|
116
|
+
readonly name: "";
|
|
117
|
+
readonly type: "bool";
|
|
118
|
+
}];
|
|
119
|
+
readonly stateMutability: "view";
|
|
120
|
+
}];
|
|
105
121
|
export declare const NODE_REGISTRY_ABI: readonly [{
|
|
106
122
|
readonly type: "function";
|
|
107
123
|
readonly name: "register";
|
package/dist/chain/abi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/chain/abi.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDxB,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCpB,CAAA"}
|
|
1
|
+
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/chain/abi.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDxB,CAAA;AAEV,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;EAWlC,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCpB,CAAA"}
|
package/dist/chain/abi.js
CHANGED
|
@@ -55,6 +55,18 @@ export const ATTESTATION_INDEX_ABI = [
|
|
|
55
55
|
],
|
|
56
56
|
},
|
|
57
57
|
];
|
|
58
|
+
export const WYRIWE_ATTESTATION_VERIFIER_ABI = [
|
|
59
|
+
{
|
|
60
|
+
type: 'function',
|
|
61
|
+
name: 'verify',
|
|
62
|
+
inputs: [
|
|
63
|
+
{ name: 'attestationHash', type: 'bytes32' },
|
|
64
|
+
{ name: 'proof', type: 'bytes' },
|
|
65
|
+
],
|
|
66
|
+
outputs: [{ name: '', type: 'bool' }],
|
|
67
|
+
stateMutability: 'view',
|
|
68
|
+
},
|
|
69
|
+
];
|
|
58
70
|
export const NODE_REGISTRY_ABI = [
|
|
59
71
|
{
|
|
60
72
|
type: 'function', name: 'register',
|
package/dist/chain/abi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/chain/abi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/chain/abi.ts"],"names":[],"mappings":"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"}
|
package/dist/chain/client.d.ts
CHANGED
|
@@ -387,6 +387,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
387
387
|
withdrawalsRoot?: `0x${string}` | undefined;
|
|
388
388
|
transactions: includeTransactions extends true ? ({
|
|
389
389
|
type: "legacy";
|
|
390
|
+
value: bigint;
|
|
390
391
|
r: import("viem").Hex;
|
|
391
392
|
s: import("viem").Hex;
|
|
392
393
|
v: bigint;
|
|
@@ -400,7 +401,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
400
401
|
nonce: number;
|
|
401
402
|
to: import("viem").Address | null;
|
|
402
403
|
typeHex: import("viem").Hex | null;
|
|
403
|
-
value: bigint;
|
|
404
404
|
accessList?: undefined | undefined;
|
|
405
405
|
authorizationList?: undefined | undefined;
|
|
406
406
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -413,6 +413,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
413
413
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_2 ? T_2 extends (blockTag extends "pending" ? true : false) ? T_2 extends true ? null : number : never : never;
|
|
414
414
|
} | {
|
|
415
415
|
type: "eip2930";
|
|
416
|
+
value: bigint;
|
|
416
417
|
r: import("viem").Hex;
|
|
417
418
|
s: import("viem").Hex;
|
|
418
419
|
v: bigint;
|
|
@@ -426,7 +427,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
426
427
|
nonce: number;
|
|
427
428
|
to: import("viem").Address | null;
|
|
428
429
|
typeHex: import("viem").Hex | null;
|
|
429
|
-
value: bigint;
|
|
430
430
|
accessList: import("viem").AccessList;
|
|
431
431
|
authorizationList?: undefined | undefined;
|
|
432
432
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -439,6 +439,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
439
439
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_5 ? T_5 extends (blockTag extends "pending" ? true : false) ? T_5 extends true ? null : number : never : never;
|
|
440
440
|
} | {
|
|
441
441
|
type: "eip1559";
|
|
442
|
+
value: bigint;
|
|
442
443
|
r: import("viem").Hex;
|
|
443
444
|
s: import("viem").Hex;
|
|
444
445
|
v: bigint;
|
|
@@ -452,7 +453,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
452
453
|
nonce: number;
|
|
453
454
|
to: import("viem").Address | null;
|
|
454
455
|
typeHex: import("viem").Hex | null;
|
|
455
|
-
value: bigint;
|
|
456
456
|
accessList: import("viem").AccessList;
|
|
457
457
|
authorizationList?: undefined | undefined;
|
|
458
458
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -465,6 +465,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
465
465
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_8 ? T_8 extends (blockTag extends "pending" ? true : false) ? T_8 extends true ? null : number : never : never;
|
|
466
466
|
} | {
|
|
467
467
|
type: "eip4844";
|
|
468
|
+
value: bigint;
|
|
468
469
|
r: import("viem").Hex;
|
|
469
470
|
s: import("viem").Hex;
|
|
470
471
|
v: bigint;
|
|
@@ -478,7 +479,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
478
479
|
nonce: number;
|
|
479
480
|
to: import("viem").Address | null;
|
|
480
481
|
typeHex: import("viem").Hex | null;
|
|
481
|
-
value: bigint;
|
|
482
482
|
accessList: import("viem").AccessList;
|
|
483
483
|
authorizationList?: undefined | undefined;
|
|
484
484
|
blobVersionedHashes: readonly import("viem").Hex[];
|
|
@@ -491,6 +491,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
491
491
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_11 ? T_11 extends (blockTag extends "pending" ? true : false) ? T_11 extends true ? null : number : never : never;
|
|
492
492
|
} | {
|
|
493
493
|
type: "eip7702";
|
|
494
|
+
value: bigint;
|
|
494
495
|
r: import("viem").Hex;
|
|
495
496
|
s: import("viem").Hex;
|
|
496
497
|
v: bigint;
|
|
@@ -504,7 +505,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
504
505
|
nonce: number;
|
|
505
506
|
to: import("viem").Address | null;
|
|
506
507
|
typeHex: import("viem").Hex | null;
|
|
507
|
-
value: bigint;
|
|
508
508
|
accessList: import("viem").AccessList;
|
|
509
509
|
authorizationList: import("viem").SignedAuthorizationList;
|
|
510
510
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -652,6 +652,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
652
652
|
getStorageAt: (args: import("viem").GetStorageAtParameters) => Promise<import("viem").GetStorageAtReturnType>;
|
|
653
653
|
getTransaction: <blockTag extends import("viem").BlockTag = "latest">(args: import("viem").GetTransactionParameters<blockTag>) => Promise<{
|
|
654
654
|
type: "legacy";
|
|
655
|
+
value: bigint;
|
|
655
656
|
r: import("viem").Hex;
|
|
656
657
|
s: import("viem").Hex;
|
|
657
658
|
v: bigint;
|
|
@@ -665,7 +666,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
665
666
|
nonce: number;
|
|
666
667
|
to: import("viem").Address | null;
|
|
667
668
|
typeHex: import("viem").Hex | null;
|
|
668
|
-
value: bigint;
|
|
669
669
|
accessList?: undefined | undefined;
|
|
670
670
|
authorizationList?: undefined | undefined;
|
|
671
671
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -678,6 +678,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
678
678
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_2 ? T_2 extends (blockTag extends "pending" ? true : false) ? T_2 extends true ? null : number : never : never;
|
|
679
679
|
} | {
|
|
680
680
|
type: "eip2930";
|
|
681
|
+
value: bigint;
|
|
681
682
|
r: import("viem").Hex;
|
|
682
683
|
s: import("viem").Hex;
|
|
683
684
|
v: bigint;
|
|
@@ -691,7 +692,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
691
692
|
nonce: number;
|
|
692
693
|
to: import("viem").Address | null;
|
|
693
694
|
typeHex: import("viem").Hex | null;
|
|
694
|
-
value: bigint;
|
|
695
695
|
accessList: import("viem").AccessList;
|
|
696
696
|
authorizationList?: undefined | undefined;
|
|
697
697
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -704,6 +704,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
704
704
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_5 ? T_5 extends (blockTag extends "pending" ? true : false) ? T_5 extends true ? null : number : never : never;
|
|
705
705
|
} | {
|
|
706
706
|
type: "eip1559";
|
|
707
|
+
value: bigint;
|
|
707
708
|
r: import("viem").Hex;
|
|
708
709
|
s: import("viem").Hex;
|
|
709
710
|
v: bigint;
|
|
@@ -717,7 +718,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
717
718
|
nonce: number;
|
|
718
719
|
to: import("viem").Address | null;
|
|
719
720
|
typeHex: import("viem").Hex | null;
|
|
720
|
-
value: bigint;
|
|
721
721
|
accessList: import("viem").AccessList;
|
|
722
722
|
authorizationList?: undefined | undefined;
|
|
723
723
|
blobVersionedHashes?: undefined | undefined;
|
|
@@ -730,6 +730,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
730
730
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_8 ? T_8 extends (blockTag extends "pending" ? true : false) ? T_8 extends true ? null : number : never : never;
|
|
731
731
|
} | {
|
|
732
732
|
type: "eip4844";
|
|
733
|
+
value: bigint;
|
|
733
734
|
r: import("viem").Hex;
|
|
734
735
|
s: import("viem").Hex;
|
|
735
736
|
v: bigint;
|
|
@@ -743,7 +744,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
743
744
|
nonce: number;
|
|
744
745
|
to: import("viem").Address | null;
|
|
745
746
|
typeHex: import("viem").Hex | null;
|
|
746
|
-
value: bigint;
|
|
747
747
|
accessList: import("viem").AccessList;
|
|
748
748
|
authorizationList?: undefined | undefined;
|
|
749
749
|
blobVersionedHashes: readonly import("viem").Hex[];
|
|
@@ -756,6 +756,7 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
756
756
|
transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_11 ? T_11 extends (blockTag extends "pending" ? true : false) ? T_11 extends true ? null : number : never : never;
|
|
757
757
|
} | {
|
|
758
758
|
type: "eip7702";
|
|
759
|
+
value: bigint;
|
|
759
760
|
r: import("viem").Hex;
|
|
760
761
|
s: import("viem").Hex;
|
|
761
762
|
v: bigint;
|
|
@@ -769,7 +770,6 @@ export declare function getPublicClient(rpcUrl: string, chainId: number): {
|
|
|
769
770
|
nonce: number;
|
|
770
771
|
to: import("viem").Address | null;
|
|
771
772
|
typeHex: import("viem").Hex | null;
|
|
772
|
-
value: bigint;
|
|
773
773
|
accessList: import("viem").AccessList;
|
|
774
774
|
authorizationList: import("viem").SignedAuthorizationList;
|
|
775
775
|
blobVersionedHashes?: undefined | undefined;
|
package/dist/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,8YAalB,CAAA;AAMD,eAAO,MAAM,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,8YAalB,CAAA;AAMD,eAAO,MAAM,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAiCxD,CAAA"}
|
package/dist/db/schema.js
CHANGED
|
@@ -37,5 +37,19 @@ export const MIGRATIONS = [
|
|
|
37
37
|
ON records (namespace, timestamp);
|
|
38
38
|
`,
|
|
39
39
|
},
|
|
40
|
+
{
|
|
41
|
+
version: 2,
|
|
42
|
+
sql: `
|
|
43
|
+
CREATE TABLE IF NOT EXISTS ens_records (
|
|
44
|
+
name TEXT NOT NULL,
|
|
45
|
+
type TEXT NOT NULL,
|
|
46
|
+
coin_type INTEGER NOT NULL DEFAULT -1,
|
|
47
|
+
text_key TEXT NOT NULL DEFAULT '',
|
|
48
|
+
value TEXT NOT NULL,
|
|
49
|
+
modified_at INTEGER NOT NULL DEFAULT (strftime('%s','now')),
|
|
50
|
+
PRIMARY KEY (name, type, coin_type, text_key)
|
|
51
|
+
);
|
|
52
|
+
`,
|
|
53
|
+
},
|
|
40
54
|
];
|
|
41
55
|
//# sourceMappingURL=schema.js.map
|
package/dist/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,iFAAiF;AACjF,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAarB,CAAA;AAED,wEAAwE;AACxE,iFAAiF;AACjF,wEAAwE;AACxE,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAuC;IAC5D;QACE,OAAO,EAAE,CAAC;QACV,GAAG,EAAE;;;;;;;;;;;;;;KAcJ;KACF;CACF,CAAA"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,iFAAiF;AACjF,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAarB,CAAA;AAED,wEAAwE;AACxE,iFAAiF;AACjF,wEAAwE;AACxE,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAuC;IAC5D;QACE,OAAO,EAAE,CAAC;QACV,GAAG,EAAE;;;;;;;;;;;;;;KAcJ;KACF;IACD;QACE,OAAO,EAAE,CAAC;QACV,GAAG,EAAE;;;;;;;;;;KAUJ;KACF;CACF,CAAA"}
|
package/dist/db/sqlite.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DB, MeshRecord, PeerState, Contribution } from './types.js';
|
|
1
|
+
import type { DB, MeshRecord, PeerState, Contribution, NameRecord } from './types.js';
|
|
2
2
|
export declare class SQLiteDB implements DB {
|
|
3
3
|
private db;
|
|
4
4
|
private stmts;
|
|
@@ -14,6 +14,10 @@ export declare class SQLiteDB implements DB {
|
|
|
14
14
|
getRecentRecords(namespace: string, limit: number): Promise<MeshRecord[]>;
|
|
15
15
|
getContributions(namespace: string): Promise<Contribution[]>;
|
|
16
16
|
removePeer(url: string): Promise<void>;
|
|
17
|
+
upsertNameRecord(r: Omit<NameRecord, 'modifiedAt'>): Promise<void>;
|
|
18
|
+
deleteNameRecord(name: string, type: string, coinType: number, textKey: string): Promise<void>;
|
|
19
|
+
getNameRecordValue(name: string, type: string, coinType?: number, textKey?: string): Promise<string | null>;
|
|
20
|
+
listNameRecords(name?: string): Promise<NameRecord[]>;
|
|
17
21
|
close(): void;
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=sqlite.d.ts.map
|
package/dist/db/sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/db/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/db/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA6BrF,qBAAa,QAAS,YAAW,EAAE;IACjC,OAAO,CAAC,EAAE,CAAmB;IAE7B,OAAO,CAAC,KAAK,CAmBZ;gBAEW,IAAI,EAAE,MAAM;IAsHxB,OAAO,CAAC,aAAa;IAgBf,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/C,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,EAAE,CAAC;IAkBlB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAO5E,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAK/D,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKhC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/C,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKzE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAK5D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9F,kBAAkB,CACtB,IAAI,EAAM,MAAM,EAChB,IAAI,EAAM,MAAM,EAChB,QAAQ,GAAE,MAAY,EACtB,OAAO,GAAG,MAAY,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKnB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO3D,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/db/sqlite.js
CHANGED
|
@@ -77,6 +77,27 @@ export class SQLiteDB {
|
|
|
77
77
|
WHERE input_hash = @inputHash
|
|
78
78
|
AND namespace = @namespace
|
|
79
79
|
AND signature != @signature
|
|
80
|
+
`),
|
|
81
|
+
ensUpsert: this.db.prepare(`
|
|
82
|
+
INSERT INTO ens_records (name, type, coin_type, text_key, value, modified_at)
|
|
83
|
+
VALUES (@name, @type, @coinType, @textKey, @value, @modifiedAt)
|
|
84
|
+
ON CONFLICT (name, type, coin_type, text_key) DO UPDATE SET
|
|
85
|
+
value = excluded.value,
|
|
86
|
+
modified_at = excluded.modified_at
|
|
87
|
+
`),
|
|
88
|
+
ensDelete: this.db.prepare(`
|
|
89
|
+
DELETE FROM ens_records
|
|
90
|
+
WHERE name = @name AND type = @type AND coin_type = @coinType AND text_key = @textKey
|
|
91
|
+
`),
|
|
92
|
+
ensGet: this.db.prepare(`
|
|
93
|
+
SELECT value FROM ens_records
|
|
94
|
+
WHERE name = @name AND type = @type AND coin_type = @coinType AND text_key = @textKey
|
|
95
|
+
`),
|
|
96
|
+
ensList: this.db.prepare(`
|
|
97
|
+
SELECT * FROM ens_records WHERE name = ? ORDER BY type ASC, coin_type ASC, text_key ASC
|
|
98
|
+
`),
|
|
99
|
+
ensListAll: this.db.prepare(`
|
|
100
|
+
SELECT * FROM ens_records ORDER BY name ASC, type ASC, coin_type ASC, text_key ASC
|
|
80
101
|
`),
|
|
81
102
|
};
|
|
82
103
|
}
|
|
@@ -169,6 +190,29 @@ export class SQLiteDB {
|
|
|
169
190
|
async removePeer(url) {
|
|
170
191
|
this.stmts.removePeer.run(url);
|
|
171
192
|
}
|
|
193
|
+
async upsertNameRecord(r) {
|
|
194
|
+
this.stmts.ensUpsert.run({
|
|
195
|
+
name: r.name,
|
|
196
|
+
type: r.type,
|
|
197
|
+
coinType: r.coinType,
|
|
198
|
+
textKey: r.textKey,
|
|
199
|
+
value: r.value,
|
|
200
|
+
modifiedAt: Math.floor(Date.now() / 1000),
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
async deleteNameRecord(name, type, coinType, textKey) {
|
|
204
|
+
this.stmts.ensDelete.run({ name, type, coinType, textKey });
|
|
205
|
+
}
|
|
206
|
+
async getNameRecordValue(name, type, coinType = -1, textKey = '') {
|
|
207
|
+
const row = this.stmts.ensGet.get({ name, type, coinType, textKey });
|
|
208
|
+
return row?.value ?? null;
|
|
209
|
+
}
|
|
210
|
+
async listNameRecords(name) {
|
|
211
|
+
const rows = (name
|
|
212
|
+
? this.stmts.ensList.all(name)
|
|
213
|
+
: this.stmts.ensListAll.all());
|
|
214
|
+
return rows.map(toNameRecord);
|
|
215
|
+
}
|
|
172
216
|
close() {
|
|
173
217
|
this.db.close();
|
|
174
218
|
}
|
|
@@ -193,4 +237,14 @@ function toPeerState(row) {
|
|
|
193
237
|
signerAddress: row.signer_address,
|
|
194
238
|
};
|
|
195
239
|
}
|
|
240
|
+
function toNameRecord(row) {
|
|
241
|
+
return {
|
|
242
|
+
name: row.name,
|
|
243
|
+
type: row.type,
|
|
244
|
+
coinType: row.coin_type,
|
|
245
|
+
textKey: row.text_key,
|
|
246
|
+
value: row.value,
|
|
247
|
+
modifiedAt: row.modified_at,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
196
250
|
//# sourceMappingURL=sqlite.js.map
|
package/dist/db/sqlite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/db/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/db/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/db/types.d.ts
CHANGED
|
@@ -18,6 +18,14 @@ export type Contribution = {
|
|
|
18
18
|
sourcePeer: string | null;
|
|
19
19
|
count: number;
|
|
20
20
|
};
|
|
21
|
+
export type NameRecord = {
|
|
22
|
+
name: string;
|
|
23
|
+
type: 'addr' | 'addr_coin' | 'text' | 'contenthash';
|
|
24
|
+
coinType: number;
|
|
25
|
+
textKey: string;
|
|
26
|
+
value: string;
|
|
27
|
+
modifiedAt: number;
|
|
28
|
+
};
|
|
21
29
|
export interface DB {
|
|
22
30
|
insertRecord(record: MeshRecord): Promise<void>;
|
|
23
31
|
getRecordsSince(namespace: string, since: number, limit: number, cursor?: string): Promise<MeshRecord[]>;
|
|
@@ -29,6 +37,10 @@ export interface DB {
|
|
|
29
37
|
removePeer(url: string): Promise<void>;
|
|
30
38
|
getPeers(): Promise<PeerState[]>;
|
|
31
39
|
recordCount(namespace: string): Promise<number>;
|
|
40
|
+
upsertNameRecord(r: Omit<NameRecord, 'modifiedAt'>): Promise<void>;
|
|
41
|
+
deleteNameRecord(name: string, type: string, coinType: number, textKey: string): Promise<void>;
|
|
42
|
+
getNameRecordValue(name: string, type: string, coinType?: number, textKey?: string): Promise<string | null>;
|
|
43
|
+
listNameRecords(name?: string): Promise<NameRecord[]>;
|
|
32
44
|
close(): void;
|
|
33
45
|
}
|
|
34
46
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/db/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,EAAO,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,EAAE;IACjB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACxG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAC5E,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC/D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACzE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC5D,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAChC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,EAAO,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAQ,MAAM,CAAA;IAClB,IAAI,EAAQ,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,aAAa,CAAA;IACzD,QAAQ,EAAI,MAAM,CAAA;IAClB,OAAO,EAAK,MAAM,CAAA;IAClB,KAAK,EAAO,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,WAAW,EAAE;IACjB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACxG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAC5E,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC/D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACzE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC5D,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAChC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE/C,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9F,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC3G,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACrD,KAAK,IAAI,IAAI,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns.d.ts","sourceRoot":"","sources":["../../src/ens/dns.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUvD;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAStD"}
|
package/dist/ens/dns.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// DNS wire-format name decoder (RFC 1035)
|
|
2
|
+
// Converts a DNS-encoded name byte array to a dot-separated string.
|
|
3
|
+
// e.g. 0x 07 vitalik 03 eth 00 → "vitalik.eth"
|
|
4
|
+
export function decodeDnsName(bytes) {
|
|
5
|
+
const labels = [];
|
|
6
|
+
let i = 0;
|
|
7
|
+
while (i < bytes.length && bytes[i] !== 0) {
|
|
8
|
+
const len = bytes[i];
|
|
9
|
+
i++;
|
|
10
|
+
labels.push(new TextDecoder().decode(bytes.slice(i, i + len)));
|
|
11
|
+
i += len;
|
|
12
|
+
}
|
|
13
|
+
return labels.join('.');
|
|
14
|
+
}
|
|
15
|
+
// Encode a dot-separated name to DNS wire format
|
|
16
|
+
export function encodeDnsName(name) {
|
|
17
|
+
const labels = name.split('.');
|
|
18
|
+
const parts = [];
|
|
19
|
+
for (const label of labels) {
|
|
20
|
+
parts.push(label.length);
|
|
21
|
+
for (const char of label)
|
|
22
|
+
parts.push(char.charCodeAt(0));
|
|
23
|
+
}
|
|
24
|
+
parts.push(0);
|
|
25
|
+
return new Uint8Array(parts);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=dns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/ens/dns.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,oEAAoE;AACpE,+CAA+C;AAC/C,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC,EAAE,CAAA;QACH,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAC9D,CAAC,IAAI,GAAG,CAAA;IACV,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACzB,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,MAAM,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ResolverFn } from '../router/index.js';
|
|
2
|
+
export type EnsRecord = {
|
|
3
|
+
type: 'addr';
|
|
4
|
+
} | {
|
|
5
|
+
type: 'addr';
|
|
6
|
+
coinType: bigint;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'text';
|
|
9
|
+
key: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: 'contenthash';
|
|
12
|
+
};
|
|
13
|
+
export type EnsResolverFn = (name: string, record: EnsRecord) => Promise<string | null>;
|
|
14
|
+
export declare const RESOLVE_SELECTOR = "0x9061b923";
|
|
15
|
+
export declare function isEnsCalldata(calldata: string): boolean;
|
|
16
|
+
export declare function withEns(resolver: EnsResolverFn): ResolverFn;
|
|
17
|
+
//# sourceMappingURL=withEns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withEns.d.ts","sourceRoot":"","sources":["../../src/ens/withEns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIpD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAA;AAQ3B,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAI,MAAM,EACd,MAAM,EAAE,SAAS,KACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAE3B,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAI5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAaD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,CAuD3D"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { decodeAbiParameters, encodeAbiParameters, hexToBytes } from 'viem';
|
|
2
|
+
import { decodeDnsName } from './dns.js';
|
|
3
|
+
export const RESOLVE_SELECTOR = '0x9061b923'; // resolve(bytes,bytes)
|
|
4
|
+
// Returns true if the calldata looks like an ENS resolve(bytes,bytes) call.
|
|
5
|
+
// Use to guard withEns() in multi-purpose resolvers before dispatching.
|
|
6
|
+
export function isEnsCalldata(calldata) {
|
|
7
|
+
return calldata.toLowerCase().startsWith(RESOLVE_SELECTOR);
|
|
8
|
+
}
|
|
9
|
+
const ADDR_SELECTOR = '0x3b3b57de'; // addr(bytes32)
|
|
10
|
+
const ADDR_CT_SELECTOR = '0xf1cb7e06'; // addr(bytes32,uint256)
|
|
11
|
+
const TEXT_SELECTOR = '0x59d1d43c'; // text(bytes32,string)
|
|
12
|
+
const CONTENTHASH_SEL = '0xbc1c58d1'; // contenthash(bytes32)
|
|
13
|
+
// Wrap any EnsResolverFn as a ResolverFn for use with CcipRouter.
|
|
14
|
+
//
|
|
15
|
+
// Decodes the ENS resolve(bytes name, bytes data) calldata, dispatches to
|
|
16
|
+
// the clean resolver with a typed EnsRecord, and ABI-encodes the response.
|
|
17
|
+
//
|
|
18
|
+
// Composes with withWyriwe — put withEns inside:
|
|
19
|
+
// resolver = withWyriwe(withEns(myEnsResolver), wyriweOpts)
|
|
20
|
+
export function withEns(resolver) {
|
|
21
|
+
return async (sender, calldata, namespace) => {
|
|
22
|
+
if (!calldata.toLowerCase().startsWith(RESOLVE_SELECTOR)) {
|
|
23
|
+
throw new Error(`[withEns] unexpected selector: ${calldata.slice(0, 10)}`);
|
|
24
|
+
}
|
|
25
|
+
// Decode outer resolve(bytes name, bytes data)
|
|
26
|
+
const [nameBytes, innerData] = decodeAbiParameters([{ type: 'bytes' }, { type: 'bytes' }], `0x${calldata.slice(10)}`);
|
|
27
|
+
// DNS wire-format → "vitalik.eth"
|
|
28
|
+
const name = decodeDnsName(hexToBytes(nameBytes));
|
|
29
|
+
const selector = innerData.slice(0, 10).toLowerCase();
|
|
30
|
+
const inner = `0x${innerData.slice(10)}`;
|
|
31
|
+
switch (selector) {
|
|
32
|
+
case ADDR_SELECTOR: {
|
|
33
|
+
// addr(bytes32) → address
|
|
34
|
+
const result = await resolver(name, { type: 'addr' });
|
|
35
|
+
const addr = (result ?? '0x0000000000000000000000000000000000000000');
|
|
36
|
+
return encodeAbiParameters([{ type: 'address' }], [addr]);
|
|
37
|
+
}
|
|
38
|
+
case ADDR_CT_SELECTOR: {
|
|
39
|
+
// addr(bytes32,uint256) → bytes (coin-type specific encoding)
|
|
40
|
+
const [, coinType] = decodeAbiParameters([{ type: 'bytes32' }, { type: 'uint256' }], inner);
|
|
41
|
+
const result = await resolver(name, { type: 'addr', coinType: coinType });
|
|
42
|
+
return encodeAbiParameters([{ type: 'bytes' }], [(result ?? '0x')]);
|
|
43
|
+
}
|
|
44
|
+
case TEXT_SELECTOR: {
|
|
45
|
+
// text(bytes32,string) → string
|
|
46
|
+
const [, key] = decodeAbiParameters([{ type: 'bytes32' }, { type: 'string' }], inner);
|
|
47
|
+
const result = await resolver(name, { type: 'text', key: key });
|
|
48
|
+
return encodeAbiParameters([{ type: 'string' }], [result ?? '']);
|
|
49
|
+
}
|
|
50
|
+
case CONTENTHASH_SEL: {
|
|
51
|
+
// contenthash(bytes32) → bytes
|
|
52
|
+
const result = await resolver(name, { type: 'contenthash' });
|
|
53
|
+
return encodeAbiParameters([{ type: 'bytes' }], [(result ?? '0x')]);
|
|
54
|
+
}
|
|
55
|
+
default:
|
|
56
|
+
return '0x';
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=withEns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withEns.js","sourceRoot":"","sources":["../../src/ens/withEns.ts"],"names":[],"mappings":"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"}
|
package/dist/lib.d.ts
CHANGED
|
@@ -6,7 +6,10 @@ export type { DB, MeshRecord, PeerState } from './db/types.js';
|
|
|
6
6
|
export { publishAttestation, checkOnChain } from './chain/publish.js';
|
|
7
7
|
export type { ChainOpts, PublishResult, OnChainProof } from './chain/publish.js';
|
|
8
8
|
export { registerNode } from './chain/register.js';
|
|
9
|
-
export { ATTESTATION_INDEX_ABI, NODE_REGISTRY_ABI } from './chain/abi.js';
|
|
9
|
+
export { ATTESTATION_INDEX_ABI, NODE_REGISTRY_ABI, WYRIWE_ATTESTATION_VERIFIER_ABI } from './chain/abi.js';
|
|
10
10
|
export { makeVni, verifyVni, fetchPeerVni } from './mesh/vni.js';
|
|
11
11
|
export type { SignedVni, VniDocument } from './mesh/vni.js';
|
|
12
|
+
export { withEns, isEnsCalldata } from './ens/withEns.js';
|
|
13
|
+
export type { EnsResolverFn, EnsRecord } from './ens/withEns.js';
|
|
14
|
+
export { encodeDnsName, decodeDnsName } from './ens/dns.js';
|
|
12
15
|
//# sourceMappingURL=lib.d.ts.map
|
package/dist/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAC7D,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACrE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAC7D,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACrE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAChE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACzD,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/lib.js
CHANGED
|
@@ -3,6 +3,8 @@ export { CcipRouter } from './router/index.js';
|
|
|
3
3
|
export { withWyriwe } from './attestation/withWyriwe.js';
|
|
4
4
|
export { publishAttestation, checkOnChain } from './chain/publish.js';
|
|
5
5
|
export { registerNode } from './chain/register.js';
|
|
6
|
-
export { ATTESTATION_INDEX_ABI, NODE_REGISTRY_ABI } from './chain/abi.js';
|
|
6
|
+
export { ATTESTATION_INDEX_ABI, NODE_REGISTRY_ABI, WYRIWE_ATTESTATION_VERIFIER_ABI } from './chain/abi.js';
|
|
7
7
|
export { makeVni, verifyVni, fetchPeerVni } from './mesh/vni.js';
|
|
8
|
+
export { withEns, isEnsCalldata } from './ens/withEns.js';
|
|
9
|
+
export { encodeDnsName, decodeDnsName } from './ens/dns.js';
|
|
8
10
|
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAA;AAC1G,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccip-router",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "The coordination layer CCIP-Read was missing. Peer sync, deduplication, and cryptographic attestation for any CCIP-Read gateway.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/lib.js",
|
|
@@ -21,18 +21,28 @@
|
|
|
21
21
|
"dist/lib.js.map",
|
|
22
22
|
"dist/lib.d.ts",
|
|
23
23
|
"dist/lib.d.ts.map",
|
|
24
|
+
"dist/ens",
|
|
24
25
|
"dist/mesh",
|
|
25
26
|
"dist/router",
|
|
27
|
+
"contracts/IAttestationVerifier.sol",
|
|
26
28
|
"contracts/AttestationIndex.sol",
|
|
27
|
-
"contracts/NodeRegistry.sol"
|
|
29
|
+
"contracts/NodeRegistry.sol",
|
|
30
|
+
"contracts/WyriweAttestationVerifier.sol"
|
|
28
31
|
],
|
|
29
32
|
"keywords": [
|
|
30
|
-
"ccip-read",
|
|
31
|
-
"
|
|
33
|
+
"ccip-read",
|
|
34
|
+
"eip-3668",
|
|
35
|
+
"ens",
|
|
36
|
+
"ethereum",
|
|
37
|
+
"gateway",
|
|
38
|
+
"attestation",
|
|
39
|
+
"wyriwe",
|
|
40
|
+
"erc-8004",
|
|
41
|
+
"ocp"
|
|
32
42
|
],
|
|
33
43
|
"repository": {
|
|
34
44
|
"type": "git",
|
|
35
|
-
"url": "https://github.com/Echo-Merlini/ccip-router.git"
|
|
45
|
+
"url": "git+https://github.com/Echo-Merlini/ccip-router.git"
|
|
36
46
|
},
|
|
37
47
|
"homepage": "https://github.com/Echo-Merlini/ccip-router#readme",
|
|
38
48
|
"scripts": {
|