@resurrect-protocol/contracts 0.4.0-dev.32.1 → 0.4.0-dev.33.1
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 +12 -10
- package/abi/{ResurrectRegistryV1.json → ResurrectBeaconV1.json} +10 -2
- package/deployments/ethereum-mainnet-explorer.json +114 -126
- package/deployments/ethereum-mainnet.json +30 -17
- package/package.json +7 -7
- package/src/ResurrectBeaconV1.sol +39 -0
- package/src/ResurrectRegistryV1.sol +0 -34
package/README.md
CHANGED
|
@@ -6,18 +6,20 @@ Canonical Resurrect Solidity sources, ABIs, and Ethereum mainnet deployment reco
|
|
|
6
6
|
npm install @resurrect-protocol/contracts
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Beacon
|
|
10
10
|
|
|
11
11
|
```js
|
|
12
|
-
import
|
|
12
|
+
import beaconAbi from '@resurrect-protocol/contracts/abi/ResurrectBeaconV1.json' with { type: 'json' }
|
|
13
13
|
import ethereumMainnet from '@resurrect-protocol/contracts/deployments/ethereum-mainnet.json' with { type: 'json' }
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Solidity tools can import `@resurrect-protocol/contracts/src/
|
|
16
|
+
Solidity tools can import `@resurrect-protocol/contracts/src/ResurrectBeaconV1.sol`. The permissionless beacon exposes exactly `VERSION`, `MAX_TTL`, `MAX_RECORD_BYTES`, and `announce`. It has no owner, administrator, allowlist, pause, upgrade, withdrawal, or peer-storage path. Despite the name, it is a rendezvous beacon rather than an upgradeable proxy beacon.
|
|
17
17
|
|
|
18
|
-
The
|
|
18
|
+
The canonical deployment is [`0x136c191B5e6541532E42Ecd7C719C29D7ecdf468`](https://etherscan.io/address/0x136c191B5e6541532E42Ecd7C719C29D7ecdf468#code) on Ethereum mainnet, chain ID `1`, receipt block `25943058`. Its deployment JSON includes the transaction, deployer, compiler settings, bytecode hashes, Etherscan and Sourcify links, and audit metadata.
|
|
19
19
|
|
|
20
|
-
Applications may use the
|
|
20
|
+
Applications may use the canonical deployment or deploy the exact source elsewhere, but must pin the chosen chain, address, deployment block, namespace, and constants. A shared stateless beacon does not create a shared peer list. RPC providers remain caller-selected, and an event remains an untrusted discovery hint until the signed record, sequence, expiry, endpoints, and application handshake are verified.
|
|
21
|
+
|
|
22
|
+
OneDollarAudit job [#904](https://www.onedollaraudit.com/audit/904) reviewed the exact canonical address and produced an [immutable IPFS report](https://bafkreid22gqqrzwo6b6scxqnmcmiinru3xzigz74xkere2573r6ivulzjq.ipfs.community.bgipfs.com/) with 0 Critical, 0 High, 0 Medium, 2 Low, and 1 Informational finding.
|
|
21
23
|
|
|
22
24
|
## Immutable explorer
|
|
23
25
|
|
|
@@ -28,16 +30,16 @@ import explorerMainnet from '@resurrect-protocol/contracts/deployments/ethereum-
|
|
|
28
30
|
|
|
29
31
|
Solidity tools can import `@resurrect-protocol/contracts/src/ResurrectOnchainSite.sol`. The contract implements ERC-5219 and the ERC-6944 `5219` resolve mode, reconstructing immutable resources from bytecode-storage contracts. It has no owner, mutable storage, or upgrade path.
|
|
30
32
|
|
|
31
|
-
The source-verified production router is `
|
|
33
|
+
The source-verified production router is `0x14765f12a7f068EDf42dF4920fd5170ADBa73306` on Ethereum mainnet at block `25943864`. Its deployment JSON records the 24 data contracts, all 25 transaction hashes and blocks, every resource hash and payload length, the router runtime and manifest hashes, compiler settings, Etherscan and Sourcify verification, deployment cost, gateway URLs, and runtime verification results. The embedded explorer uses the canonical `ResurrectBeaconV1` at `0x136c191B5e6541532E42Ecd7C719C29D7ecdf468`.
|
|
32
34
|
|
|
33
35
|
Open it through:
|
|
34
36
|
|
|
35
|
-
- `web3://
|
|
36
|
-
- `https://
|
|
37
|
-
- `https://
|
|
37
|
+
- `web3://0x14765f12a7f068EDf42dF4920fd5170ADBa73306:1/`;
|
|
38
|
+
- `https://0x14765f12a7f068edf42df4920fd5170adba73306.w3eth.io/`; or
|
|
39
|
+
- `https://0x14765f12a7f068edf42df4920fd5170adba73306.1.w3link.io/`.
|
|
38
40
|
|
|
39
41
|
Consumers should independently compare deployed code and resources with the pinned source and build artifact before relying on them.
|
|
40
42
|
|
|
41
43
|
## License
|
|
42
44
|
|
|
43
|
-
`
|
|
45
|
+
`ResurrectBeaconV1.sol` is CC0-1.0. `ResurrectOnchainSite.sol` is available under MIT or Apache-2.0 at your option. Deployment metadata and dependency licenses remain their own.
|
|
@@ -43,6 +43,14 @@
|
|
|
43
43
|
],
|
|
44
44
|
"anonymous": false
|
|
45
45
|
},
|
|
46
|
-
{
|
|
47
|
-
|
|
46
|
+
{
|
|
47
|
+
"type": "error",
|
|
48
|
+
"name": "InvalidTTL",
|
|
49
|
+
"inputs": [{ "name": "supplied", "type": "uint32", "internalType": "uint32" }]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "error",
|
|
53
|
+
"name": "RecordTooLarge",
|
|
54
|
+
"inputs": [{ "name": "supplied", "type": "uint256", "internalType": "uint256" }]
|
|
55
|
+
}
|
|
48
56
|
]
|
|
@@ -4,23 +4,28 @@
|
|
|
4
4
|
"application": "Resurrect Explorer",
|
|
5
5
|
"network": "ethereum-mainnet",
|
|
6
6
|
"chainId": 1,
|
|
7
|
-
"address": "
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
"address": "0x14765f12a7f068EDf42dF4920fd5170ADBa73306",
|
|
8
|
+
"canonicalBeacon": {
|
|
9
|
+
"contract": "ResurrectBeaconV1",
|
|
10
|
+
"address": "0x136c191B5e6541532E42Ecd7C719C29D7ecdf468",
|
|
11
|
+
"deploymentBlock": 25943058
|
|
12
|
+
},
|
|
13
|
+
"deploymentBlock": 25943864,
|
|
14
|
+
"firstDeploymentBlock": 25943834,
|
|
15
|
+
"firstDeploymentTimestamp": "2026-09-10T01:54:47Z",
|
|
16
|
+
"deploymentTimestamp": "2026-09-10T02:00:47Z",
|
|
17
|
+
"transactionHash": "0x4a128735f12908e0979982b3b3e92d575a5bdd6b19f280eaaf6a6fb8c40e05b0",
|
|
18
|
+
"deployer": "0x6E4a6b178Fea5FA7cE3051615C49F26b177E74F0",
|
|
13
19
|
"immutable": true,
|
|
14
20
|
"resolveMode": "5219",
|
|
15
|
-
"manifestHash": "
|
|
21
|
+
"manifestHash": "0x36f8d8a77af7849aa040a86d4f7663ab5a185b9d72e2ab500c9db85785ddd026",
|
|
16
22
|
"manifestEncoding": "keccak256(abi.encode(string[6] paths, string[6] contentTypes, bytes32[] resourceHashes))",
|
|
17
|
-
"runtimeBytecodeHash": "
|
|
23
|
+
"runtimeBytecodeHash": "0x7d6198765aea906764d581185b310fa9c2a41670c5a6b674233b442c11ea9ecd",
|
|
18
24
|
"source": {
|
|
19
25
|
"repository": "https://github.com/cazala/resurrect",
|
|
20
|
-
"commit": "5f167abf8a4d5cac38b8f56dd22f9ab236cd4c62",
|
|
21
26
|
"contractPath": "contracts/src/ResurrectOnchainSite.sol",
|
|
22
27
|
"deploymentScriptPath": "contracts/script/DeployResurrectExplorer.s.sol",
|
|
23
|
-
"
|
|
28
|
+
"explorerArtifactPath": "apps/explorer/dist"
|
|
24
29
|
},
|
|
25
30
|
"compiler": {
|
|
26
31
|
"language": "Solidity",
|
|
@@ -34,19 +39,19 @@
|
|
|
34
39
|
"scheme": "immutable-contract-runtime-bytecode",
|
|
35
40
|
"sentinelBytes": 1,
|
|
36
41
|
"maxPayloadBytesPerChunk": 24000,
|
|
37
|
-
"resourceBytes":
|
|
38
|
-
"chunkContracts":
|
|
39
|
-
"transactions":
|
|
42
|
+
"resourceBytes": 467179,
|
|
43
|
+
"chunkContracts": 24,
|
|
44
|
+
"transactions": 25
|
|
40
45
|
},
|
|
41
46
|
"deploymentCost": {
|
|
42
|
-
"gasUsed":
|
|
43
|
-
"weiPaid": "
|
|
44
|
-
"ethPaid": "0.
|
|
47
|
+
"gasUsed": 104317581,
|
|
48
|
+
"weiPaid": "7086418126710057",
|
|
49
|
+
"ethPaid": "0.007086418126710057"
|
|
45
50
|
},
|
|
46
51
|
"gateways": {
|
|
47
|
-
"web3": "web3://
|
|
48
|
-
"w3eth": "https://
|
|
49
|
-
"w3link": "https://
|
|
52
|
+
"web3": "web3://0x14765f12a7f068EDf42dF4920fd5170ADBa73306:1/",
|
|
53
|
+
"w3eth": "https://0x14765f12a7f068edf42df4920fd5170adba73306.w3eth.io/",
|
|
54
|
+
"w3link": "https://0x14765f12a7f068edf42df4920fd5170adba73306.1.w3link.io/"
|
|
50
55
|
},
|
|
51
56
|
"ens": {
|
|
52
57
|
"name": "resurrect.cazala.eth",
|
|
@@ -56,7 +61,7 @@
|
|
|
56
61
|
"sourceCode": {
|
|
57
62
|
"etherscan": {
|
|
58
63
|
"status": "pass",
|
|
59
|
-
"url": "https://etherscan.io/address/
|
|
64
|
+
"url": "https://etherscan.io/address/0x14765f12a7f068EDf42dF4920fd5170ADBa73306#code",
|
|
60
65
|
"contractName": "ResurrectOnchainSite",
|
|
61
66
|
"compilerVersion": "v0.8.24+commit.e11b9ed9",
|
|
62
67
|
"optimizer": true,
|
|
@@ -65,19 +70,21 @@
|
|
|
65
70
|
},
|
|
66
71
|
"sourcify": {
|
|
67
72
|
"status": "pass",
|
|
68
|
-
"url": "https://repo.sourcify.dev/1/
|
|
69
|
-
"apiUrl": "https://sourcify.dev/server/v2/contract/1/
|
|
73
|
+
"url": "https://repo.sourcify.dev/1/0x14765f12a7f068EDf42dF4920fd5170ADBa73306",
|
|
74
|
+
"apiUrl": "https://sourcify.dev/server/v2/contract/1/0x14765f12a7f068EDf42dF4920fd5170ADBa73306?fields=all",
|
|
75
|
+
"jobUrl": "https://sourcify.dev/server/verify-ui/jobs/e869b535-a13a-42a0-8d38-9c68a5d2b301",
|
|
70
76
|
"match": "match",
|
|
71
77
|
"creationMatch": "match",
|
|
72
78
|
"runtimeMatch": "match",
|
|
73
|
-
"matchId": "
|
|
74
|
-
"verifiedAt": "2026-09-
|
|
79
|
+
"matchId": "48334992",
|
|
80
|
+
"verifiedAt": "2026-09-10T02:03:21Z"
|
|
75
81
|
}
|
|
76
82
|
},
|
|
77
83
|
"ethereumRpc": {
|
|
78
84
|
"status": "pass",
|
|
79
85
|
"resolveMode": true,
|
|
80
86
|
"manifestHash": true,
|
|
87
|
+
"canonicalBeaconEmbedded": true,
|
|
81
88
|
"allResourceBodiesByteForByte": true,
|
|
82
89
|
"resourceMetadata": true,
|
|
83
90
|
"notFoundResponse": true
|
|
@@ -85,79 +92,60 @@
|
|
|
85
92
|
"w3eth": {
|
|
86
93
|
"status": "pass",
|
|
87
94
|
"allAssetsByteForByte": true,
|
|
88
|
-
"
|
|
95
|
+
"rootDocumentServed": true
|
|
89
96
|
},
|
|
90
97
|
"w3link": {
|
|
91
98
|
"status": "pass",
|
|
92
99
|
"allAssetsByteForByte": true,
|
|
93
|
-
"
|
|
94
|
-
},
|
|
95
|
-
"browser": {
|
|
96
|
-
"status": "pass",
|
|
97
|
-
"gateway": "w3eth",
|
|
98
|
-
"registryScan": true,
|
|
99
|
-
"signedPeerRecord": true,
|
|
100
|
-
"noisePeerIdentity": true,
|
|
101
|
-
"identify": true,
|
|
102
|
-
"ping": true,
|
|
103
|
-
"peerId": "12D3KooWRFAprLu4b2RQzq9PWJ2sTYSYuCYA9yDJNEF5kFPYh7B6",
|
|
104
|
-
"endpoint": "/dns4/resurrect-ws.caza.la/tcp/443/wss",
|
|
105
|
-
"observedPingMilliseconds": 306,
|
|
106
|
-
"observedConnectMilliseconds": 1950
|
|
100
|
+
"rootDocumentServed": true
|
|
107
101
|
}
|
|
108
102
|
},
|
|
109
103
|
"resources": [
|
|
110
104
|
{
|
|
111
105
|
"path": "index.html",
|
|
112
106
|
"contentType": "text/html; charset=utf-8",
|
|
113
|
-
"bytes":
|
|
114
|
-
"keccak256": "
|
|
107
|
+
"bytes": 846,
|
|
108
|
+
"keccak256": "0xa041546d52f4a94300f04fb1ced3e058f843f2cd9edf54cab9370b7c4dff37a3",
|
|
115
109
|
"chunks": [
|
|
116
110
|
{
|
|
117
|
-
"address": "
|
|
118
|
-
"transactionHash": "
|
|
119
|
-
"block":
|
|
120
|
-
"payloadBytes":
|
|
111
|
+
"address": "0x85D83Ac987CD03A516e43e524d2Ed2F9af2EC4D3",
|
|
112
|
+
"transactionHash": "0x0fa25ef1cf1c0b73dab2db9293053766a74ab8f08288632773315a59547b61c0",
|
|
113
|
+
"block": 25943834,
|
|
114
|
+
"payloadBytes": 846
|
|
121
115
|
}
|
|
122
116
|
]
|
|
123
117
|
},
|
|
124
118
|
{
|
|
125
119
|
"path": "index.css",
|
|
126
120
|
"contentType": "text/css; charset=utf-8",
|
|
127
|
-
"bytes":
|
|
128
|
-
"keccak256": "
|
|
121
|
+
"bytes": 6573,
|
|
122
|
+
"keccak256": "0x1783b9d52010f4d0f016b802b7f73142142bc1395605bf57525f896d3174c544",
|
|
129
123
|
"chunks": [
|
|
130
124
|
{
|
|
131
|
-
"address": "
|
|
132
|
-
"transactionHash": "
|
|
133
|
-
"block":
|
|
134
|
-
"payloadBytes":
|
|
125
|
+
"address": "0xE04834b7ad6F2C6D01D29D10061c7468663723B4",
|
|
126
|
+
"transactionHash": "0x1d56306dd1c2590b0066a1f05cbd3216f3a9a3c745d41dd0667039e9032d9621",
|
|
127
|
+
"block": 25943836,
|
|
128
|
+
"payloadBytes": 6573
|
|
135
129
|
}
|
|
136
130
|
]
|
|
137
131
|
},
|
|
138
132
|
{
|
|
139
133
|
"path": "app.js",
|
|
140
134
|
"contentType": "text/javascript; charset=utf-8",
|
|
141
|
-
"bytes":
|
|
142
|
-
"keccak256": "
|
|
135
|
+
"bytes": 35241,
|
|
136
|
+
"keccak256": "0x7add949f94f202fae190835642abec74bdeb4421b39ac7660934315be257f887",
|
|
143
137
|
"chunks": [
|
|
144
138
|
{
|
|
145
|
-
"address": "
|
|
146
|
-
"transactionHash": "
|
|
147
|
-
"block":
|
|
148
|
-
"payloadBytes": 24000
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"address": "0xc6495227365ec56cac967b280e42e062883b630c",
|
|
152
|
-
"transactionHash": "0x59cc4c60ba42133b715aabe49908d3dc3e2ffe9d7b230500583209992c10b1d5",
|
|
153
|
-
"block": 25936588,
|
|
139
|
+
"address": "0x17Ca0269c87921A01F7Bc43fAE4CD8A64e321Fa1",
|
|
140
|
+
"transactionHash": "0x237ab2650a68328de72a2be7dc8025f3641daac852975c68f4dbda43a8aa32e7",
|
|
141
|
+
"block": 25943837,
|
|
154
142
|
"payloadBytes": 24000
|
|
155
143
|
},
|
|
156
144
|
{
|
|
157
|
-
"address": "
|
|
158
|
-
"transactionHash": "
|
|
159
|
-
"block":
|
|
160
|
-
"payloadBytes":
|
|
145
|
+
"address": "0x79FC47FA71ff18A95156b05b52b83fa3853e29Ae",
|
|
146
|
+
"transactionHash": "0x639bb81fb01a411f8a72e462da4138be25ac37e548024e7e5497a0e4a77005a1",
|
|
147
|
+
"block": 25943839,
|
|
148
|
+
"payloadBytes": 11241
|
|
161
149
|
}
|
|
162
150
|
]
|
|
163
151
|
},
|
|
@@ -168,9 +156,9 @@
|
|
|
168
156
|
"keccak256": "0x7de63044a95dcac21b8884ab40985883e687488e6e2abfd5770266e2c537cfb2",
|
|
169
157
|
"chunks": [
|
|
170
158
|
{
|
|
171
|
-
"address": "
|
|
172
|
-
"transactionHash": "
|
|
173
|
-
"block":
|
|
159
|
+
"address": "0xC87924d955f41640De7e838383E3fFcB4f9f59f1",
|
|
160
|
+
"transactionHash": "0x559607532f4931140c941dedc8c5b8299e7592dcc711c16c0d2e68140b98a0da",
|
|
161
|
+
"block": 25943840,
|
|
174
162
|
"payloadBytes": 716
|
|
175
163
|
}
|
|
176
164
|
]
|
|
@@ -182,39 +170,39 @@
|
|
|
182
170
|
"keccak256": "0xe69fcbeb747bf15edf524ec758d6340157a4460ac14ff0a7fcf77b84e1eb2529",
|
|
183
171
|
"chunks": [
|
|
184
172
|
{
|
|
185
|
-
"address": "
|
|
186
|
-
"transactionHash": "
|
|
187
|
-
"block":
|
|
173
|
+
"address": "0x08cc5cF593d2AE209E1016D635D347687F5e4201",
|
|
174
|
+
"transactionHash": "0xdcfe31f4a8323cbacee59f5113e21cde61a483d17c3e9c738a72c7b8ae73a9c7",
|
|
175
|
+
"block": 25943841,
|
|
188
176
|
"payloadBytes": 24000
|
|
189
177
|
},
|
|
190
178
|
{
|
|
191
|
-
"address": "
|
|
192
|
-
"transactionHash": "
|
|
193
|
-
"block":
|
|
179
|
+
"address": "0x2073DE6FEE2422589CC0660BAbab8E57c7B862A6",
|
|
180
|
+
"transactionHash": "0x7ad83d7ba1c5bdfca931f0746481bdef542f61ce0441d5eb3da643b25fc48f71",
|
|
181
|
+
"block": 25943842,
|
|
194
182
|
"payloadBytes": 24000
|
|
195
183
|
},
|
|
196
184
|
{
|
|
197
|
-
"address": "
|
|
198
|
-
"transactionHash": "
|
|
199
|
-
"block":
|
|
185
|
+
"address": "0xf40Fa2695B29E464470197450A26a49ca0616ACC",
|
|
186
|
+
"transactionHash": "0x8f7e507bb4200328f767a8bbe1df226edacd689299acd3cbda71b689c8610231",
|
|
187
|
+
"block": 25943845,
|
|
200
188
|
"payloadBytes": 24000
|
|
201
189
|
},
|
|
202
190
|
{
|
|
203
|
-
"address": "
|
|
204
|
-
"transactionHash": "
|
|
205
|
-
"block":
|
|
191
|
+
"address": "0x262Cecf0f23b8e36b1A1dbD6dc11BAa8909A3F74",
|
|
192
|
+
"transactionHash": "0x1e81082808835ad4d96710a1aa1a061d03858e921806fe2e0535f600d3f753a1",
|
|
193
|
+
"block": 25943846,
|
|
206
194
|
"payloadBytes": 24000
|
|
207
195
|
},
|
|
208
196
|
{
|
|
209
|
-
"address": "
|
|
210
|
-
"transactionHash": "
|
|
211
|
-
"block":
|
|
197
|
+
"address": "0x78C083C8a9b70Dd1e0e4b040EC8c2C563aD5e013",
|
|
198
|
+
"transactionHash": "0x23fdc4a1ba66708098fb351a8f354f2f300e47430a1f4c2be387a5d194824e3d",
|
|
199
|
+
"block": 25943847,
|
|
212
200
|
"payloadBytes": 24000
|
|
213
201
|
},
|
|
214
202
|
{
|
|
215
|
-
"address": "
|
|
216
|
-
"transactionHash": "
|
|
217
|
-
"block":
|
|
203
|
+
"address": "0x941DfA169654A59Dfbf63CFEe6E4E9a96fA64b11",
|
|
204
|
+
"transactionHash": "0xed4d4ecc202a606f49991f37ca35479dc751b210e748f5667406a3e735bf02d4",
|
|
205
|
+
"block": 25943848,
|
|
218
206
|
"payloadBytes": 12713
|
|
219
207
|
}
|
|
220
208
|
]
|
|
@@ -226,81 +214,81 @@
|
|
|
226
214
|
"keccak256": "0xd52f2b97fec863c83fdffce1ad05e338e95a762e81cab8bacd99437c421ada7a",
|
|
227
215
|
"chunks": [
|
|
228
216
|
{
|
|
229
|
-
"address": "
|
|
230
|
-
"transactionHash": "
|
|
231
|
-
"block":
|
|
217
|
+
"address": "0x5BADF212c1Fe55e6b3bfBcB491B121C465093a10",
|
|
218
|
+
"transactionHash": "0xc6643cc41e982b3f42f8aa78e523bb0b9ebaf36cd9c4399862269ab04fd7e26c",
|
|
219
|
+
"block": 25943849,
|
|
232
220
|
"payloadBytes": 24000
|
|
233
221
|
},
|
|
234
222
|
{
|
|
235
|
-
"address": "
|
|
236
|
-
"transactionHash": "
|
|
237
|
-
"block":
|
|
223
|
+
"address": "0xb1EF58696779Ae67Af58EFfF5ab0ac4fE506F846",
|
|
224
|
+
"transactionHash": "0x34ee601ecca1b9ee12adece40636c82572677ab9a6efebc01aa02e9e48241cf4",
|
|
225
|
+
"block": 25943850,
|
|
238
226
|
"payloadBytes": 24000
|
|
239
227
|
},
|
|
240
228
|
{
|
|
241
|
-
"address": "
|
|
242
|
-
"transactionHash": "
|
|
243
|
-
"block":
|
|
229
|
+
"address": "0xCFc6c16826Da7c50A6598F2D0a6082875C1ae372",
|
|
230
|
+
"transactionHash": "0x0488161ae996d825498545ae6ac21e986ad1814f9fb2251f3b45c1bf777c4c16",
|
|
231
|
+
"block": 25943851,
|
|
244
232
|
"payloadBytes": 24000
|
|
245
233
|
},
|
|
246
234
|
{
|
|
247
|
-
"address": "
|
|
248
|
-
"transactionHash": "
|
|
249
|
-
"block":
|
|
235
|
+
"address": "0xeAD2faDAc40662431Ce527226e5125AEa5613679",
|
|
236
|
+
"transactionHash": "0xdc6de04a68b92e398a2f206086676f1933a4e2c6bd8bc77e7c98bf31f4224be5",
|
|
237
|
+
"block": 25943852,
|
|
250
238
|
"payloadBytes": 24000
|
|
251
239
|
},
|
|
252
240
|
{
|
|
253
|
-
"address": "
|
|
254
|
-
"transactionHash": "
|
|
255
|
-
"block":
|
|
241
|
+
"address": "0xa1Cd9225dc37a258eD42F122e6A654365244429b",
|
|
242
|
+
"transactionHash": "0x30efae542312c85314c435ab05ff0aba99b1f4892618826dc00248057ea13b22",
|
|
243
|
+
"block": 25943853,
|
|
256
244
|
"payloadBytes": 24000
|
|
257
245
|
},
|
|
258
246
|
{
|
|
259
|
-
"address": "
|
|
260
|
-
"transactionHash": "
|
|
261
|
-
"block":
|
|
247
|
+
"address": "0xA05FEd13f2558AeAF8E9236De9712c389312F392",
|
|
248
|
+
"transactionHash": "0x05560e9a1a4a5b0ea3bf5f0770a6d100fbd0adcb6bd8938d14406edd145add45",
|
|
249
|
+
"block": 25943854,
|
|
262
250
|
"payloadBytes": 24000
|
|
263
251
|
},
|
|
264
252
|
{
|
|
265
|
-
"address": "
|
|
266
|
-
"transactionHash": "
|
|
267
|
-
"block":
|
|
253
|
+
"address": "0x31cBAAb7694C0398493211B81946437083FEb760",
|
|
254
|
+
"transactionHash": "0xf416d4b05554bf0ef1e96d29b70b37a9c8babf5e4f42849062a3e441b29c3203",
|
|
255
|
+
"block": 25943855,
|
|
268
256
|
"payloadBytes": 24000
|
|
269
257
|
},
|
|
270
258
|
{
|
|
271
|
-
"address": "
|
|
272
|
-
"transactionHash": "
|
|
273
|
-
"block":
|
|
259
|
+
"address": "0xa1Fb4Ae5988Cb9739A0Cf3b4fc7e6BF3E045ec04",
|
|
260
|
+
"transactionHash": "0x8978f08f465d954751266c0dc284bfd888b5ff4a9756d6c7fd2288ac86268378",
|
|
261
|
+
"block": 25943856,
|
|
274
262
|
"payloadBytes": 24000
|
|
275
263
|
},
|
|
276
264
|
{
|
|
277
|
-
"address": "
|
|
278
|
-
"transactionHash": "
|
|
279
|
-
"block":
|
|
265
|
+
"address": "0x9E986048bf8B7C296d19cd8dF02CB0bfe8f73Ea4",
|
|
266
|
+
"transactionHash": "0xe1d9ddada722beb7a2148e2d558ff333773c5a4b878725baa00590bcd0b8ab76",
|
|
267
|
+
"block": 25943857,
|
|
280
268
|
"payloadBytes": 24000
|
|
281
269
|
},
|
|
282
270
|
{
|
|
283
|
-
"address": "
|
|
284
|
-
"transactionHash": "
|
|
285
|
-
"block":
|
|
271
|
+
"address": "0xf568f232CB6154d9dD9B0c5fc47046e691266135",
|
|
272
|
+
"transactionHash": "0x3295e512fa016f8d4306421e7928be87f9c85f70ba9084fac441b5ce44127113",
|
|
273
|
+
"block": 25943859,
|
|
286
274
|
"payloadBytes": 24000
|
|
287
275
|
},
|
|
288
276
|
{
|
|
289
|
-
"address": "
|
|
290
|
-
"transactionHash": "
|
|
291
|
-
"block":
|
|
277
|
+
"address": "0x27EE558daf98316D0D375Cc2c60906Cb71f57dE5",
|
|
278
|
+
"transactionHash": "0x7944f1dbfaf3022659b5ea1669f883df7f714edf36a690dbfe9da255959133dd",
|
|
279
|
+
"block": 25943860,
|
|
292
280
|
"payloadBytes": 24000
|
|
293
281
|
},
|
|
294
282
|
{
|
|
295
|
-
"address": "
|
|
296
|
-
"transactionHash": "
|
|
297
|
-
"block":
|
|
283
|
+
"address": "0x9feD0e9da21FC0f1b79543E7b87042E457bDb545",
|
|
284
|
+
"transactionHash": "0x3637bb2e4bae51c619c5adc3c41249cde81cff2e108a1fa4fbce851b24474ac3",
|
|
285
|
+
"block": 25943861,
|
|
298
286
|
"payloadBytes": 24000
|
|
299
287
|
},
|
|
300
288
|
{
|
|
301
|
-
"address": "
|
|
302
|
-
"transactionHash": "
|
|
303
|
-
"block":
|
|
289
|
+
"address": "0x26172ac10e736ada96e690baAeccBa1b04D47cC6",
|
|
290
|
+
"transactionHash": "0x80ca114d2f552195ce9e3ef1591616ff5cae5a8c26bb894680d7fb1612defe0b",
|
|
291
|
+
"block": 25943863,
|
|
304
292
|
"payloadBytes": 3090
|
|
305
293
|
}
|
|
306
294
|
]
|
|
@@ -1,40 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"contract": "
|
|
3
|
+
"contract": "ResurrectBeaconV1",
|
|
4
4
|
"network": "ethereum-mainnet",
|
|
5
5
|
"chainId": 1,
|
|
6
|
-
"address": "
|
|
7
|
-
"deploymentBlock":
|
|
8
|
-
"deploymentTimestamp": "2026-09-
|
|
9
|
-
"transactionHash": "
|
|
10
|
-
"deployer": "
|
|
11
|
-
"
|
|
6
|
+
"address": "0x136c191B5e6541532E42Ecd7C719C29D7ecdf468",
|
|
7
|
+
"deploymentBlock": 25943058,
|
|
8
|
+
"deploymentTimestamp": "2026-09-09T23:19:35Z",
|
|
9
|
+
"transactionHash": "0x8e7c2ddf815d44166d436fabd886a05bac6eab25ba5abf6faf9e93e3e179b8d6",
|
|
10
|
+
"deployer": "0x6E4a6b178Fea5FA7cE3051615C49F26b177E74F0",
|
|
11
|
+
"creationBytecodeHash": "0x449675c0d8b1c3ba38a1cd0c633ee043a9f328c14535ea04ff6d9e51845efa3a",
|
|
12
|
+
"runtimeBytecodeHash": "0x20999e7bf54d855e3bfedebfd7053d41f0c873ecde3b9d70a71ee6dcd086bce7",
|
|
12
13
|
"source": {
|
|
13
14
|
"repository": "https://github.com/cazala/resurrect",
|
|
14
|
-
"
|
|
15
|
-
"commit": "3298158d0e86959a05434495eb28335808e7964a",
|
|
16
|
-
"path": "contracts/src/ResurrectRegistryV1.sol"
|
|
15
|
+
"path": "contracts/src/ResurrectBeaconV1.sol"
|
|
17
16
|
},
|
|
18
17
|
"compiler": {
|
|
19
18
|
"language": "Solidity",
|
|
20
|
-
"version": "0.8.24",
|
|
19
|
+
"version": "0.8.24+commit.e11b9ed9",
|
|
21
20
|
"optimizer": true,
|
|
22
21
|
"optimizerRuns": 20000,
|
|
23
22
|
"bytecodeHash": "none",
|
|
24
|
-
"cborMetadata": false
|
|
23
|
+
"cborMetadata": false,
|
|
24
|
+
"evmVersion": "cancun"
|
|
25
25
|
},
|
|
26
26
|
"verification": {
|
|
27
27
|
"provider": "Sourcify",
|
|
28
28
|
"status": "match",
|
|
29
|
-
"verifiedAt": "2026-09-
|
|
30
|
-
"
|
|
31
|
-
"
|
|
29
|
+
"verifiedAt": "2026-09-09T23:24:46Z",
|
|
30
|
+
"creationMatch": "match",
|
|
31
|
+
"runtimeMatch": "match",
|
|
32
|
+
"url": "https://repo.sourcify.dev/1/0x136c191B5e6541532E42Ecd7C719C29D7ecdf468",
|
|
33
|
+
"apiUrl": "https://sourcify.dev/server/v2/contract/1/0x136c191B5e6541532E42Ecd7C719C29D7ecdf468"
|
|
32
34
|
},
|
|
33
35
|
"explorers": {
|
|
34
36
|
"etherscan": {
|
|
35
37
|
"status": "verified",
|
|
36
|
-
"
|
|
37
|
-
"url": "https://etherscan.io/address/0x6F33c332e8251dcd307D85A27fCcAbd85d578910#code"
|
|
38
|
+
"url": "https://etherscan.io/address/0x136c191B5e6541532E42Ecd7C719C29D7ecdf468#code"
|
|
38
39
|
}
|
|
40
|
+
},
|
|
41
|
+
"audit": {
|
|
42
|
+
"provider": "OneDollarAudit",
|
|
43
|
+
"jobId": 904,
|
|
44
|
+
"completedAt": "2026-09-10T00:24:09Z",
|
|
45
|
+
"critical": 0,
|
|
46
|
+
"high": 0,
|
|
47
|
+
"medium": 0,
|
|
48
|
+
"low": 2,
|
|
49
|
+
"informational": 1,
|
|
50
|
+
"jobUrl": "https://www.onedollaraudit.com/audit/904",
|
|
51
|
+
"reportUrl": "https://bafkreid22gqqrzwo6b6scxqnmcmiinru3xzigz74xkere2573r6ivulzjq.ipfs.community.bgipfs.com/"
|
|
39
52
|
}
|
|
40
53
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resurrect-protocol/contracts",
|
|
3
|
-
"version": "0.4.0-dev.
|
|
3
|
+
"version": "0.4.0-dev.33.1",
|
|
4
4
|
"description": "Canonical immutable Solidity contracts, ABIs, and Ethereum deployments for Resurrect",
|
|
5
5
|
"license": "CC0-1.0 AND (MIT OR Apache-2.0)",
|
|
6
6
|
"repository": {
|
|
@@ -16,17 +16,17 @@
|
|
|
16
16
|
"README.md"
|
|
17
17
|
],
|
|
18
18
|
"exports": {
|
|
19
|
-
"./abi/
|
|
19
|
+
"./abi/ResurrectBeaconV1.json": "./abi/ResurrectBeaconV1.json",
|
|
20
20
|
"./abi/ResurrectOnchainSite.json": "./abi/ResurrectOnchainSite.json",
|
|
21
21
|
"./deployments/ethereum-mainnet-explorer.json": "./deployments/ethereum-mainnet-explorer.json",
|
|
22
22
|
"./deployments/ethereum-mainnet.json": "./deployments/ethereum-mainnet.json",
|
|
23
|
-
"./src/
|
|
24
|
-
"./src/
|
|
23
|
+
"./src/ResurrectBeaconV1.sol": "./src/ResurrectBeaconV1.sol",
|
|
24
|
+
"./src/ResurrectOnchainSite.sol": "./src/ResurrectOnchainSite.sol"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
|
-
"build": "node -e \"const fs=require('node:fs'); for (const file of ['abi/
|
|
28
|
-
"check": "node -e \"const fs=require('node:fs'); for (const file of ['abi/
|
|
29
|
-
"test": "node -e \"const fs=require('node:fs'); for (const file of ['abi/
|
|
27
|
+
"build": "node -e \"const fs=require('node:fs'); for (const file of ['abi/ResurrectBeaconV1.json','abi/ResurrectOnchainSite.json','deployments/ethereum-mainnet.json','deployments/ethereum-mainnet-explorer.json']) JSON.parse(fs.readFileSync(file))\"",
|
|
28
|
+
"check": "node -e \"const fs=require('node:fs'); for (const file of ['abi/ResurrectBeaconV1.json','abi/ResurrectOnchainSite.json','deployments/ethereum-mainnet.json','deployments/ethereum-mainnet-explorer.json']) JSON.parse(fs.readFileSync(file))\"",
|
|
29
|
+
"test": "node -e \"const fs=require('node:fs'); for (const file of ['abi/ResurrectBeaconV1.json','abi/ResurrectOnchainSite.json','deployments/ethereum-mainnet.json','deployments/ethereum-mainnet-explorer.json']) JSON.parse(fs.readFileSync(file))\""
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// SPDX-License-Identifier: CC0-1.0
|
|
2
|
+
pragma solidity 0.8.24;
|
|
3
|
+
|
|
4
|
+
/// @title Resurrect rendezvous beacon v1
|
|
5
|
+
/// @notice Permissionless, immutable, log-only transport for caller-supplied peer-record bytes.
|
|
6
|
+
/// @dev The contract does not verify signatures or bind namespace, recordType, ttl, peerRecord, or
|
|
7
|
+
/// msg.sender to one another. Consumers must perform those trust checks off-chain. This is not an
|
|
8
|
+
/// upgradeable proxy beacon and deliberately has no owner, storage, upgrade, pause, or withdrawal
|
|
9
|
+
/// path.
|
|
10
|
+
contract ResurrectBeaconV1 {
|
|
11
|
+
uint32 public constant VERSION = 1;
|
|
12
|
+
uint32 public constant MAX_TTL = 90 days;
|
|
13
|
+
uint32 public constant MAX_RECORD_BYTES = 4096;
|
|
14
|
+
|
|
15
|
+
error InvalidTTL(uint32 supplied);
|
|
16
|
+
error RecordTooLarge(uint256 supplied);
|
|
17
|
+
|
|
18
|
+
event PeerAnnounced(
|
|
19
|
+
bytes32 indexed namespace, uint32 indexed recordType, uint64 validUntil, bytes peerRecord
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
/// @notice Publishes a bounded-lifetime record for an application namespace.
|
|
23
|
+
/// @param namespace Application/network isolation identifier.
|
|
24
|
+
/// @param recordType Resurrect peer-record codec identifier.
|
|
25
|
+
/// @param ttl Lifetime in seconds, bounded by `MAX_TTL`.
|
|
26
|
+
/// @param peerRecord Raw peer-record bytes; this contract does not authenticate them.
|
|
27
|
+
function announce(bytes32 namespace, uint32 recordType, uint32 ttl, bytes calldata peerRecord)
|
|
28
|
+
external
|
|
29
|
+
{
|
|
30
|
+
if (ttl == 0 || ttl > MAX_TTL) revert InvalidTTL(ttl);
|
|
31
|
+
|
|
32
|
+
uint256 recordLength = peerRecord.length;
|
|
33
|
+
if (recordLength == 0 || recordLength > MAX_RECORD_BYTES) {
|
|
34
|
+
revert RecordTooLarge(recordLength);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
emit PeerAnnounced(namespace, recordType, uint64(block.timestamp) + uint64(ttl), peerRecord);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: CC0-1.0
|
|
2
|
-
pragma solidity 0.8.24;
|
|
3
|
-
|
|
4
|
-
/// @title Resurrect registry v1
|
|
5
|
-
/// @notice Permissionless, immutable, log-only rendezvous for signed peer records.
|
|
6
|
-
/// @dev This contract deliberately has no owner, storage, upgrade, pause, or withdrawal path.
|
|
7
|
-
contract ResurrectRegistryV1 {
|
|
8
|
-
uint32 public constant VERSION = 1;
|
|
9
|
-
uint32 public constant MAX_TTL = 90 days;
|
|
10
|
-
uint32 public constant MAX_RECORD_BYTES = 4096;
|
|
11
|
-
|
|
12
|
-
error InvalidTTL();
|
|
13
|
-
error RecordTooLarge();
|
|
14
|
-
|
|
15
|
-
event PeerAnnounced(
|
|
16
|
-
bytes32 indexed namespace, uint32 indexed recordType, uint64 validUntil, bytes peerRecord
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
/// @notice Publishes a bounded-lifetime, application-namespaced signed peer record.
|
|
20
|
-
/// @param namespace Application/network isolation identifier.
|
|
21
|
-
/// @param recordType Resurrect peer-record codec identifier.
|
|
22
|
-
/// @param ttl Lifetime in seconds, bounded by `MAX_TTL`.
|
|
23
|
-
/// @param peerRecord Raw self-authenticating peer-record bytes.
|
|
24
|
-
function announce(bytes32 namespace, uint32 recordType, uint32 ttl, bytes calldata peerRecord)
|
|
25
|
-
external
|
|
26
|
-
{
|
|
27
|
-
if (ttl == 0 || ttl > MAX_TTL) revert InvalidTTL();
|
|
28
|
-
if (peerRecord.length == 0 || peerRecord.length > MAX_RECORD_BYTES) {
|
|
29
|
-
revert RecordTooLarge();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
emit PeerAnnounced(namespace, recordType, uint64(block.timestamp) + uint64(ttl), peerRecord);
|
|
33
|
-
}
|
|
34
|
-
}
|