{"rewardSnapshot":null,"merkleRoot":null,"claims":null,"id":"902170a7-d7a3-4d73-a8bf-fefc1e07e76a","launchNumber":2436,"kind":"evm_contracts","status":"live","chainId":1,"sourceRepoUrl":"https://github.com/identity-md-launches/launch-2436-build-deploy-nightwatchskin-ethereum","sourceCommit":"785577355709b61d965a4937274d5d5600736c49","parkedReason":null,"artifactCount":1,"manifestHash":"3cd3ca0bf34db2d31af58dd8964082ed2bf5a69e7fa1b809eabd257bf16460cd","attestationHash":"5e027b70feb6231f3c36d9a06ca1847ab4822fc96f0f7e22c6eb4d3b74b9cb51","attestation":{"treeHash":"109d879f6e6b931c14ee808fd2b1996d12c56dd9","verifierVersion":"0.1.0+560ab6a2","verifierKey":"68249df1f422fa72f61ca7f0ddaf9b62043959c5c134498441d5e552a9921782","toolchain":{"solc":"0.8.26","forge":"forge Version: 1.8.3","viaIR":true,"optimizer":true,"evmVersion":"cancun","bytecodeHash":"none","optimizerRuns":200},"contracts":[{"name":"NightWatchSkin","path":"src/NightWatchSkin.sol","abiHash":"36a4843c68663dc5062eb04632631fcc354e980e76ba62c00f8f02e80a234a18","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"f839003e4bbbbfe9999dee68186626536e2dd845ebd25478ce6f1dba9ff9874a","creationCodeHash":"d8fa90b8fdaedb081b002e8906b7a3c70472a256420d83c2a51de0ffffce98c6","deployedCodeHash":"f33eb99cf36701d46d65654e1245755ff5628cefa0d0c60af3bcc5f6ef23b5fe","creationCodeBytes":6258,"deployedCodeBytes":6232}],"manifest":{"kind":"evm_contracts","notes":"NightWatchSkin (src/NightWatchSkin.sol) is the only application contract: an immutable, stateless SVG renderer that draws the identity layer of NIGHT WATCHERS over each Night Watcher's card. Its constructor takes no arguments and depends on no caller, chain state or other contract. The single external function layer(uint256 n, uint8 t, uint16[10] inputs) is pure (stricter than the requested view), callable by anyone, and reverts unless 1 <= t <= 6 and n <= 9999 (n 0 with t 6 is The Captain). There is no owner, admin, storage, fee, token, pool, upgrade or pause path, no receive or fallback function, and it reads no other contract. Deployment sends zero ETH and needs no initialization call. Etherscan and Sourcify verification use the pinned foundry.toml settings (solc 0.8.26, via_ir, optimizer 200 runs, cancun, bytecode_hash none) with an empty constructor encoding.","contracts":[{"contract":"NightWatchSkin","constructorArgs":[]}]},"manifestError":null},"attestationFailure":null,"deployFailure":null,"policyVersion":27,"economics":null,"poolFee":null,"requester":"0x6c4c78f2c3bdf4c4318fe305fb1c8bc1694d19b5","admissionChecks":[{"name":"provenance","detail":"8 node(s) accepted at 78557735","status":"passed"},{"name":"findings","detail":"8 accepted submission(s), no unresolved blocking findings","status":"passed"},{"name":"independent_review","detail":"1 independent review(s)","status":"passed"},{"name":"bytecode","detail":"1 contract(s) clean and reproducible","status":"passed"},{"name":"manifest","detail":"1 application contracts; no protocol token or pool","status":"passed"},{"name":"protected_invariants","detail":"invariants-72ac6e744789: Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.32ms (955.02µs CPU time)","status":"passed"},{"name":"economics","detail":"policy explicitly selects no on-chain contributor rewards","status":"passed"}],"assurances":[],"logo":null,"seeded":null,"createdAt":"2026-10-21T23:30:45.161Z","updatedAt":"2026-10-21T23:32:01.546Z","jobs":[{"id":"4e094eb3-edc6-4659-8e3a-ef0494cc477b","objective":"Build and deploy NightWatchSkin on Ethereum: one immutable, view-only contract that draws the identity layer of NIGHT WATCHERS (an NFT collection ordered separately), drawn over each Night Watcher's card. No token, no owner or admin, no storage, no fees, not upgradeable or pausable. Who can call what: anyone calls layer(), there is nothing else; it holds and receives no funds. Outside services: none; it reads no other contract.\n\nlayer(uint256 n, uint8 t, uint16[10] inputs) view returns (string); reverts unless 1 <= t <= 6 and n <= 9999 (n 0 and t 6 are The Captain). C = colour by t: 1 #3FE6FF, 2 #B8FF4A, 3 #A98BFF, 4 #FF4FD8, 5 #FFC46B, 6 #E9E4FF. id(k) = inputs[k mod 10]. The result is exactly this concatenation, no spaces or newlines added; numbers in plain decimal:\nDEFS SCAN [t>=2: BEAM] BAR(0)..BAR(15) ID [t>=2: ORBIT(-12, '0;1')] [t>=5: ORBIT(14, '1;0')] [t=6: ORBIT(38, '0;1') with D = 6] [t>=3: CODE(0)..CODE(5)] STAR(0)..STAR(7) [t>=4: EDGE]\nEach part below is a literal string; {X} is replaced by X.\nDEFS = <defs><pattern id=\"nwS\" width=\"8\" height=\"6\" patternUnits=\"userSpaceOnUse\"><path d=\"M0 .5H8\" stroke=\"#E2E8F0\" stroke-opacity=\".08\"/></pattern><linearGradient id=\"nwB\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"{C}\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"{C}\" stop-opacity=\".28\"/></linearGradient><linearGradient id=\"nwE\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\"><stop offset=\"0\" stop-color=\"{C}\"/><stop offset=\".55\" stop-color=\"#A3E635\"/><stop offset=\"1\" stop-color=\"#8B5CF6\"/></linearGradient></defs>\nSCAN = <rect width=\"1000\" height=\"1000\" fill=\"url(#nwS)\"><animateTransform attributeName=\"transform\" type=\"translate\" values=\"0 0;0 6\" dur=\"1s\" repeatCount=\"indefinite\"/></rect>\nBEAM = <rect x=\"24\" y=\"-80\" width=\"952\" height=\"80\" fill=\"url(#nwB)\"><animate attributeName=\"y\" values=\"-80;976\" dur=\"{D}s\" repeatCount=\"indefinite\"/></rect> with D = 9 - t\nBAR(k) = <rect x=\"{X}\" y=\"{Y}\" width=\"6\" height=\"{H}\" fill=\"currentColor\" opacity=\".55\"><animate attributeName=\"opacity\" values=\".55;1;.25;.55\" dur=\"{D}s\" begin=\"{B}ms\" repeatCount=\"indefinite\"/></rect> with H = 8 + (id(k) * (k + 7)) mod 41, X = 588 + 14k, Y = 142 - H, D = 2 + (k mod 4), B = 125k\nID = <rect x=\"66\" y=\"188\" width=\"8\" height=\"12\" fill=\"currentColor\"><animate attributeName=\"opacity\" values=\"1;0;1\" dur=\"1s\" repeatCount=\"indefinite\"/></rect><text x=\"82\" y=\"199\" font-size=\"12\" font-family=\"monospace\" fill=\"#C4B4FF\" letter-spacing=\"3\">ID / #{N} / {TAG}</text> with N = n as 4 digits with leading zeros, TAG = THE CAPTAIN for t = 6, else ON WATCH\nORBIT(R, K) = <g transform=\"rotate({R} 500 520)\" opacity=\".8\"><ellipse cx=\"500\" cy=\"520\" rx=\"430\" ry=\"96\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-dasharray=\"4 8\"/><circle r=\"6\" fill=\"#F2EFFF\"><animateMotion dur=\"{D}s\" repeatCount=\"indefinite\" keyPoints=\"{K}\" keyTimes=\"0;1\" calcMode=\"linear\" path=\"M70 520a430 96 0 1 0 860 0a430 96 0 1 0 -860 0\"/></circle></g> with D = 16 - 2t unless given\nCODE(k) = <text x=\"{X}\" y=\"{Y}\" font-size=\"11\" font-family=\"monospace\" fill=\"currentColor\" text-anchor=\"{A}\" opacity=\".5\">{ROW}<animate attributeName=\"opacity\" values=\".2;.75;.2\" dur=\"{D}s\" repeatCount=\"indefinite\"/></text> with X = 40 and A = start for k < 3, else X = 930 and A = end; Y = 300 + 18 (k mod 3); D = 3 + k; ROW = id(3k), id(3k+1), id(3k+2), each as 3 lowercase hex digits with leading zeros, joined by ':'\nSTAR(k) = <rect x=\"{X}\" y=\"{Y}\" width=\"3\" height=\"3\" fill=\"#E2E8F0\"><animate attributeName=\"opacity\" values=\".1;.8;.1\" dur=\"{D}s\" repeatCount=\"indefinite\"/></rect> with X = 40 + (37n + 53k) mod 120 for even k, 836 + (37n + 53k) mod 120 for odd k; Y = 230 + (61n + 97k) mod 560; D = 2 + (n + k) mod 3\nEDGE = <path d=\"M60 24H940L976 60V940L940 976H60L24 940V60Z\" fill=\"none\" stroke=\"url(#nwE)\" stroke-width=\"5\" stroke-dasharray=\"60 30\"><animate attributeName=\"stroke-dashoffset\" values=\"0;-900\" dur=\"{D}s\" repeatCount=\"indefinite\"/></path> with D = 12 - t\n\nTest vectors (keccak256 of the bytes): layer(1, 1, [184,185,186,189,190,78,80,81,82,86]) = 0x2a93428c834d0f406f41844fbd93691276402298a395e0462c27cf41a6634e4c; layer(7, 3, [26,30,50,2,5,96,97,93,94,87]) = 0xaaf9e3a1dd4ce02bdfe8a864f16037c4c574974d1fe5e852b78ac8c6ba0477e0; layer(50, 5, [10,45,103,12,19,22,69,188,204,267]) = 0xb2e57d5de55080f34fe0d6818af8d64f27b6850b3c2bd9fe18ad19682b55fb8f; layer(0, 6, [1,45,103,12,19,22,69,188,204,267]) = 0xeecaf052aaad318dfead6dc6ca66725156009b16cd331563b85b5cc64b060b53.\nFoundry tests: the 3 vectors; t 0 and 6 and n 0 revert; layer() gas in the README. Verify on Etherscan + Sourcify.","state":"completed","attachedAt":"2026-10-21T23:30:45.161Z"}],"artifacts":[{"role":"other","name":"NightWatchSkin","address":"0x8509cddf80cfc8cec4aaa3644b125de919da112e","creationCodeHash":"d8fa90b8fdaedb081b002e8906b7a3c70472a256420d83c2a51de0ffffce98c6","txHash":"0xf2175bd4cb96e714d25d869470076b1dd7a25f17a334c9588a7e18791f2f0a72","blockNumber":26244284,"verifiedAt":"2026-10-21T23:32:57.694Z","verifyFailure":null}],"allocations":[]}