{"_id":"@wavs/solidity","_rev":"26-3bf069c4a12124f9ee74b98e1957fdf9","name":"@wavs/solidity","dist-tags":{"latest":"0.6.0-alpha.2"},"versions":{"0.3.0-alpha1":{"name":"@wavs/solidity","version":"0.3.0-alpha1","author":{"name":"Lay3r Labs Team"},"license":"MIT","_id":"@wavs/solidity@0.3.0-alpha1","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"}],"homepage":"https://github.com/Lay3rLabs/WAVS#readme","bugs":{"url":"https://github.com/Lay3rLabs/WAVS/issues"},"dist":{"shasum":"b04e379ab930c5ef7b72ae46a2132871e93f1827","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.3.0-alpha1.tgz","fileCount":7,"integrity":"sha512-/N4YB1c24AXyfoqPhIPlWLPEvjwql7ZA4COiLUJtfmzj5wv8qUVfCt/4P2l7idOcqkbHV5Jb+JfrBAAgz0Xmcg==","signatures":[{"sig":"MEUCID0b137xUBYaWTzWBIW8NMIFsxl+MQ6AFnokR2dBvT9GAiEAy8YVQWvRSfRXAA1TM6CT51/htcqlGKGZQUWZ20fi1AI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15392},"gitHead":"931ff2e9db4765e9b467b2e50b4f19cbcb4fec0d","_npmUser":{"name":"dakom","email":"david.komer@gmail.com"},"repository":{"url":"git+https://github.com/Lay3rLabs/WAVS.git","type":"git"},"_npmVersion":"10.9.2","description":"WAVS Solidity contracts","directories":{},"_nodeVersion":"23.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.3.0-alpha1_1739204541454_0.6576737244749635","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-alpha2":{"name":"@wavs/solidity","version":"0.3.0-alpha2","author":{"name":"Lay3r Labs Team"},"license":"MIT","_id":"@wavs/solidity@0.3.0-alpha2","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"}],"homepage":"https://github.com/Lay3rLabs/WAVS#readme","bugs":{"url":"https://github.com/Lay3rLabs/WAVS/issues"},"dist":{"shasum":"77db935597cbfe167adc3a44baff0320bd876d76","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.3.0-alpha2.tgz","fileCount":4,"integrity":"sha512-twxVpRZ8EoIOO69dQh7WpzqBkKXQfQnmZK4BqBVoc4WKs95I6PrpveymRzS3dmdKAC2VZBWW7jg65s8sA6oiRQ==","signatures":[{"sig":"MEQCIHzXk++R8GlblYUzWLREQl7K6U2FAh+0QHOMNErxcouLAiA20G1rObB3QqM1v1+onzKDRskIQi6+MsUNW7OgEno21A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1653},"gitHead":"931ff2e9db4765e9b467b2e50b4f19cbcb4fec0d","_npmUser":{"name":"dakom","email":"david.komer@gmail.com"},"repository":{"url":"git+https://github.com/Lay3rLabs/WAVS.git","type":"git"},"_npmVersion":"10.9.2","description":"WAVS Solidity contracts","directories":{},"_nodeVersion":"23.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.3.0-alpha2_1739204802860_0.8399624005205446","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-alpha3":{"name":"@wavs/solidity","version":"0.3.0-alpha3","author":{"name":"Lay3r Labs Team"},"license":"MIT","_id":"@wavs/solidity@0.3.0-alpha3","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"}],"homepage":"https://github.com/Lay3rLabs/WAVS#readme","bugs":{"url":"https://github.com/Lay3rLabs/WAVS/issues"},"dist":{"shasum":"4f6e2980879287424caa81f702d658930f3499a0","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.3.0-alpha3.tgz","fileCount":4,"integrity":"sha512-1za5pCenH5UkFCe0SwzlYINwH3jsZGlO7nsIbTdQfJ7xNJicoAl9wTV1Fdh2Rzs0Q34V/jNt0VV7Bz2nNxkxlg==","signatures":[{"sig":"MEQCIB4ToRg6peFjLijlvbK9DLB/Nal7lnjm/aKhXg7JcN0hAiBrq985cTmcQ/yQtRotNPPWHRKuTjPOsuRAGGjTiNM3WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1652},"gitHead":"f8e5fe8f6acc2eb39c235a1447b54432fba87198","_npmUser":{"name":"dakom","email":"david.komer@gmail.com"},"repository":{"url":"git+https://github.com/Lay3rLabs/WAVS.git","type":"git"},"_npmVersion":"10.9.2","description":"WAVS Solidity contracts","directories":{},"_nodeVersion":"23.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.3.0-alpha3_1739786035588_0.2659348959425061","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta":{"name":"@wavs/solidity","version":"0.3.0-beta","author":{"name":"Lay3r Labs Team"},"license":"MIT","_id":"@wavs/solidity@0.3.0-beta","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"}],"homepage":"https://github.com/Lay3rLabs/WAVS#readme","bugs":{"url":"https://github.com/Lay3rLabs/WAVS/issues"},"dist":{"shasum":"9a264a316505fbc1846a06b7e9600e3b81794f0d","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.3.0-beta.tgz","fileCount":4,"integrity":"sha512-Os+30+G6DtjHDgZ5EAsfHsVE13yBrIVesEn/pnCDkvh/BwPUdSyUGoHng+Fp83fiZyBJExhABmg3+QyR1OQM+Q==","signatures":[{"sig":"MEYCIQCRjb9VuJ8XrBkFFN8rRYiMT3KWUGyyGDRBlWpDkwXPAQIhALibNfmiiR/LPaDAsH0nbijqsidLYnBQIKRTHqqa9/+Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1650},"gitHead":"46c7eb474337f91fa0ab34f8f5f6f7158c037fb4","_npmUser":{"name":"dakom","email":"david.komer@gmail.com"},"repository":{"url":"git+https://github.com/Lay3rLabs/WAVS.git","type":"git"},"_npmVersion":"10.9.2","description":"WAVS Solidity contracts","directories":{},"_nodeVersion":"23.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.3.0-beta_1739802091339_0.2920979382030291","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@wavs/solidity","version":"0.3.0","author":{"name":"Lay3r Labs Team"},"license":"MIT","_id":"@wavs/solidity@0.3.0","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"}],"homepage":"https://github.com/Lay3rLabs/WAVS#readme","bugs":{"url":"https://github.com/Lay3rLabs/WAVS/issues"},"dist":{"shasum":"d1b863351d2c478a6901e10ee4204ec1ea4fbce5","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.3.0.tgz","fileCount":4,"integrity":"sha512-p8vdZv8faT1wuTKtpzccTz/VJxtBh/gnkLupk5BHI56s5rXwr35XMUgzLarMGdxb4tdUW3DKw2lOjVhd7A811A==","signatures":[{"sig":"MEUCIQCEHnFasoukhFvrkgd5EEgGyEiY4hSQ+xOBDwp/q2MZtQIgFhhJ5noKwNJ6Et1frDJmFeCUv2o9xihLxwpGPj5LMLs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1645},"gitHead":"5423a02e0242f89bdf548a8020db98d5c35d4d41","_npmUser":{"name":"dakom","email":"david.komer@gmail.com"},"repository":{"url":"git+https://github.com/Lay3rLabs/WAVS.git","type":"git"},"_npmVersion":"10.9.2","description":"WAVS Solidity contracts","directories":{},"_nodeVersion":"23.7.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.3.0_1741271970653_0.340622489024325","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-beta.1":{"name":"@wavs/solidity","version":"0.4.0-beta.1","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.4.0-beta.1","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"59ee68739fb34c3a9ad9b0561688e0ffea756b81","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.4.0-beta.1.tgz","fileCount":3010,"integrity":"sha512-3d87nN88lvDVUx/jJVvUQlp24nt5KRmey16pGkbKXHttVsVQXn0K46c7Z9FdWEsxA0KmVsz7cyxxMdYrWm6VIA==","signatures":[{"sig":"MEYCIQDsb0GKjTBNOGaiKRq54HnxPAOepqcyPK30Xp24NLqr5AIhAPFiY6lm0mo+0GcBjUJyoSofa8a1PqrrlA7eftTsdxaf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38858623},"gitHead":"fd230b79841eb5dac557a2c37f3b0bd32a350a7a","_npmUser":{"name":"dakom","email":"david.komer@gmail.com"},"_npmVersion":"10.9.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"23.7.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.4.0-beta.1_1746552297336_0.34296181330916276","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-rc":{"name":"@wavs/solidity","version":"0.4.0-rc","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.4.0-rc","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"9bbf871ef7c97d0f07256ba91da993ee61f2d4d6","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.4.0-rc.tgz","fileCount":3272,"integrity":"sha512-M0QHhiVMCRcv+FLNyTsVlK89w9nEs7dbGOTG554D88wiWDkDKmJ0piZ75BRO4F8rzz6TR3sxTREMKglzXqfdoA==","signatures":[{"sig":"MEUCIQCPjhV2ZZVR3zGlMc6VnJqt3ukbHiGTGggoDPtXFujF7AIgNms84Mqj4rel6pmUyEt9ub5XDaKPLPKyglmrbk+020U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45848595},"gitHead":"2282987d769c4bf363f53dae92f37261ba1ae780","_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.9.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.4.0-rc_1748627980785_0.0007354043450418235","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@wavs/solidity","version":"0.4.0","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.4.0","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"1f97b854f4533a837237ca54e7ca1d4e7914c6bc","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.4.0.tgz","fileCount":3184,"integrity":"sha512-IZMxK/hShGORmQE0Eb5gxsMRLEQo16L2cMDvb0IwB3YvNIM02CsOyB4TDFSSqE3KpyR5ZT7vUo1iuVqlkaHoCQ==","signatures":[{"sig":"MEUCIAYJlK6FQnjo0Wp6dNY1ja0I+yHKLQ0Utm9YdnOIbZAeAiEAuOt691gX1n8OB4jMLlwT8abbCwOcIddUvwwlwZ2ekBA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44838174},"gitHead":"b7a3705472d2b2e1a7085ee20d9c59516d0f7c67","_npmUser":{"name":"dakom","actor":{"name":"dakom","type":"user","email":"david.komer@gmail.com"},"email":"david.komer@gmail.com"},"_npmVersion":"10.9.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"23.7.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.4.0_1750869227198_0.4439662560637754","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.2":{"name":"@wavs/solidity","version":"0.5.0-beta.2","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.2","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"b2ede0394d24906d1129e1db26db1e9123c48c6e","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.2.tgz","fileCount":3332,"integrity":"sha512-/iK7O+4IEXadGH9wEEljcN576PNDhnsCQJzFr7xfN6fsgEwzIFJCMLo5tVQwZB0A0XSld03qmCUtke7gv0sQOA==","signatures":[{"sig":"MEQCIBhMWnfYDHwGf8BrsIMjVGPZqcXwx0YrMg9WKPOOZvtQAiAI1zUsVKLu7RG9Jbg44/RGu6I614Nt6xzZG6PuvT8uig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46103923},"gitHead":"53800eade09a9747bd0bec6157f3c6772d19a839","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.3","dependencies":{"solhint":"^5.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.2_1752654857016_0.8476888636927304","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.3":{"name":"@wavs/solidity","version":"0.5.0-beta.3","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.3","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"1adf60059ee9e788b9086c07af3ffc9ca37d5e8d","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.3.tgz","fileCount":3332,"integrity":"sha512-KKaMZBCJP0VyShUTZpWOIoYSE+tFjUO5n/MtNTthW3jbmUjGzsUrMmFdK/d1D0TaQqGM/wHtQWkNrBZVVk3fKA==","signatures":[{"sig":"MEUCIQD/5TdtsUOhL/GY6/M0LrgSgPT/JMpxnUOtHYjAmsyWuwIgPDE6lSpxmmSvDj8YwF9iJWO59G0y23/Xr4heRb3J6/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46100867},"gitHead":"75c9bec9da0a8d16690f85acb8f5a8dfddd39635","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.3","dependencies":{"solhint":"^5.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.3_1752684881005_0.12000054223126155","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.4":{"name":"@wavs/solidity","version":"0.5.0-beta.4","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.4","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"bb5fa9416f702ab61659f28b9c6f3c2cbf43e4c0","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.4.tgz","fileCount":3335,"integrity":"sha512-5cyVZ42WsGp1GrCimcJCboOUjYIEMkl60uglZydXvc4SgNJs74l1rCnBThf5PZH71nov49qU/fqbPfmgAMZr3w==","signatures":[{"sig":"MEUCIQDISSc3OdjMHw8hoEulHD8e4b95NhRlHqPQjD7fV3ZmwAIgPGIK6XtNrrdAVhFfDJEGb4ObASPsDBIo1R2D1iI7yz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46104713},"gitHead":"a31aab170dc9c5501a2cd5551f40f9f926475870","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.3","dependencies":{"solhint":"^5.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.4_1752742027370_0.04670274779647965","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.5":{"name":"@wavs/solidity","version":"0.5.0-beta.5","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.5","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"de4637cc2ac104344fd48622c3a00ce7bb5f5202","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.5.tgz","fileCount":3335,"integrity":"sha512-1VVpkNG+X/8YttXshZ2De7qq2ooYH3GzoJFfNGrGv6ZiObapYQjVgqzLtUwhtdQ6tKsszUcgYHEk6n5vr35QLQ==","signatures":[{"sig":"MEUCIBBxtCxgUR1YB0ubNy8TOk1OLp2IkJiorcCX89G4u0ksAiEAuihoo7mZAi9D7J8/B8Ts3jSK2gkhny8iWIAbpY1Bexs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46104760},"gitHead":"88707dd2c396760c3173ed99f343ada5d99ca120","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.3","dependencies":{"solhint":"^5.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.5_1752749631270_0.6799382907783109","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.6":{"name":"@wavs/solidity","version":"0.5.0-beta.6","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.6","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"f889657e068b88b769a946e11c6655f499b38fc9","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.6.tgz","fileCount":3350,"integrity":"sha512-92NMo79bVkmCnSoor5xEJ66tEPe0FKwxsW7HC6DP3TeLmpT92qKTQ5FQX1Xe/An7aSoyztQg9CznWtrvyrhRHw==","signatures":[{"sig":"MEUCIGHxxc6QfHkLT/O8TXjGmtT0uq72IlKVCE+paUQnFQQFAiEA4CZlzQoW2012JwQBOxKHxcQJOoRkB19jqOtkW+9bWUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46503758},"gitHead":"f652f14bb97e8de53352fa1ec8d0e5f33fca88b9","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.3","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.6_1753196325202_0.5264764934024122","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.7":{"name":"@wavs/solidity","version":"0.5.0-beta.7","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.7","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"f778abc1d7e367e7e29b367ae7e1cb97adcfcc3d","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.7.tgz","fileCount":3354,"integrity":"sha512-l/i+r/t024LFhW0BXZKKFMDKFPM9f6FRnGhjS7j7rVcbI6rITGs1WYudVO9LKSEddJ2R1z0iiArv9D2ZoXThKQ==","signatures":[{"sig":"MEYCIQCGmFLLSUlw6bi11hj4MSGTV0ILN5lTJAuRV+dDy5AzuQIhAOLmtbXxIdvWlkKTHQmoIyQn6Czo5y6aXBKo1UTiZL24","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46508583},"gitHead":"6c532cd805f5228b3848710685947bcbdcddeddf","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.4","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.7_1753365602254_0.3136210852509229","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.8":{"name":"@wavs/solidity","version":"0.5.0-beta.8","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.8","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"2d713f5ad7853e028c53c0ca4702cc8d9f61dedb","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.8.tgz","fileCount":3354,"integrity":"sha512-8FPe+omD7laXZhPi5HmuNlBkTu5dL9egPchGgoYBNDTSMk2HsiOSfxv/N5CB8l2EhJoSKPKLgpgwdkAWnMlLCw==","signatures":[{"sig":"MEUCIQDCVKOB4Azioew674uq1yIZcnUsP7OUFuL1q2fEjCsnNgIgSQIJl0fRasW+eRhNa7eRkKBCGekSdbC3yIO8wg1xiiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46509000},"gitHead":"745b60abba4d7ae6556536baa1be8f91d81f4f8a","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.4","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.8_1753456558113_0.01783565761503647","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.9":{"name":"@wavs/solidity","version":"0.5.0-beta.9","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.9","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"f235ec10027dba5bd2031f15832632d77376d0ff","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.9.tgz","fileCount":3354,"integrity":"sha512-S7YIkxEQLmvqmXc9pXIlu5glUgVVKDkueaDHV+MfeSoqMGYyGN97/LryPM5C+DdfZm7eSpH1qkZchAbJEWl/FQ==","signatures":[{"sig":"MEUCIQCRFi8ed9uLArXAZoxDd3eF1aqWwW9KeIkttrGmcrTb4wIgAOJf9OQFOYQPVUJTL1QouXgzCNaJfar2LHBxPVTasbM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46509432},"gitHead":"303c99dbd0109a2ef53e559c6c433fcac86bda6c","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.4","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.9_1753717187985_0.5673943138175876","host":"s3://npm-registry-packages-npm-production"}},"0.5.0-beta.10":{"name":"@wavs/solidity","version":"0.5.0-beta.10","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.5.0-beta.10","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"8dea042fcfab7aa9a5a849c3abebfec77c483299","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.10.tgz","fileCount":3356,"integrity":"sha512-59TCS2waA/mw/W6EHMY5DxyJ6x5epmBQeoAa6ce9of/SdOijTSk8c9zYpwq44I4Lgzsw6bnNp8YO80/Q3igUVw==","signatures":[{"sig":"MEUCIBGSSRTIf2CMpweHZ6S6wMhqOA7dDdF++DNL5EdyOaoTAiEA2A7JlfttsYfVB7IOwMoH1T6P7vThSCQ2DwXZem0pUCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46516517},"gitHead":"5a25dacafd9dbc75958c899b11c5f5b14a5f0fd6","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.4","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.5.0-beta.10_1753730858001_0.8098793250313645","host":"s3://npm-registry-packages-npm-production"}},"0.6.0-alpha.1":{"name":"@wavs/solidity","version":"0.6.0-alpha.1","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.6.0-alpha.1","maintainers":[{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"65b8395de368875a8aa8078c5333ab264d0b661f","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.6.0-alpha.1.tgz","fileCount":3358,"integrity":"sha512-v2LH01rOoeBOwJf10/EV4c8selP+bTt+7Pl7apWtp0toWqmAeooLMVMKYiKdYnh5jYRFShWnOg+wJMLOhbbZXQ==","signatures":[{"sig":"MEUCIQCWZBzM5KA6YYf12XrHLHpiOEVUbDiyEdRB3gbvnBfLHAIgVnFg9cGFHuflZLlCxiYWshk85dtqbys1Eau3au+dPYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46520468},"gitHead":"7368594227a854730467907682a620eb529080d2","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.4","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.6.0-alpha.1_1753797876981_0.01992150377994073","host":"s3://npm-registry-packages-npm-production"}},"0.6.0-alpha.2":{"name":"@wavs/solidity","version":"0.6.0-alpha.2","author":{"name":"Lay3rLabs Team"},"license":"MIT","_id":"@wavs/solidity@0.6.0-alpha.2","maintainers":[{"name":"ismellike","email":"gabriel@lay3rlabs.io"},{"name":"true-ueco-jb","email":"jakub@moonbite.space"},{"name":"dakom","email":"david.komer@gmail.com"},{"name":"reecepbcups","email":"Reecepbcups@gmail.com"}],"dist":{"shasum":"f0efeaa2ab56cf2e4f18e58291f15497fe68ce6e","tarball":"https://registry.npmjs.org/@wavs/solidity/-/solidity-0.6.0-alpha.2.tgz","fileCount":3360,"integrity":"sha512-ihA/HGjeXygM34QPupUxnAcKCtW1lK8CFbvTHGeRnVeo9li2snbbWBusvDVIudecfcxo8uPoo0bJXxXQZUsSww==","signatures":[{"sig":"MEUCIQDLrns925g2GarN9XhHE4sB0KQBiq6jWEUIspzkhiwJjAIgLQw/7vp54v4RMPdU5LkIFPIkwrVcnPPl9MMcPub6nf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46531707},"gitHead":"89fa0dd8d9f70097602720b071862dc952051c25","scripts":{"lint":"solhint 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'","lint:fix":"solhint --fix 'contracts/src/**/*.sol' 'contracts/test/**/*.sol' 'contracts/script/**/*.sol'"},"_npmUser":{"name":"reecepbcups","email":"Reecepbcups@gmail.com"},"_npmVersion":"10.8.2","description":"WAVS Middleware","directories":{},"_nodeVersion":"20.19.6","dependencies":{"solhint":"^6.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/solidity_0.6.0-alpha.2_1765441160104_0.742550675213784","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-02-10T16:22:21.375Z","modified":"2026-03-06T21:04:33.700Z","0.3.0-alpha1":"2025-02-10T16:22:21.658Z","0.3.0-alpha2":"2025-02-10T16:26:43.047Z","0.3.0-alpha3":"2025-02-17T09:53:55.740Z","0.3.0-beta":"2025-02-17T14:21:31.533Z","0.3.0":"2025-03-06T14:39:30.851Z","0.4.0-beta.1":"2025-05-06T17:24:57.983Z","0.4.0-rc":"2025-05-30T17:59:41.288Z","0.4.0":"2025-06-25T16:33:47.682Z","0.5.0-alpha.8":"2025-07-11T16:43:24.071Z","0.5.0-beta.2":"2025-07-16T08:34:17.500Z","0.5.0-beta.3":"2025-07-16T16:54:41.499Z","0.5.0-beta.4":"2025-07-17T08:47:07.792Z","0.5.0-beta.5":"2025-07-17T10:53:51.726Z","0.5.0-beta.6":"2025-07-22T14:58:45.679Z","0.5.0-beta.7":"2025-07-24T14:00:02.825Z","0.5.0-beta.8":"2025-07-25T15:15:58.650Z","0.5.0-beta.9":"2025-07-28T15:39:48.496Z","0.5.0-beta.10":"2025-07-28T19:27:38.528Z","0.6.0-alpha.1":"2025-07-29T14:04:37.460Z","0.6.0-alpha.2":"2025-12-11T08:19:20.837Z"},"author":{"name":"Lay3rLabs Team"},"license":"MIT","description":"WAVS Middleware","maintainers":[{"email":"Jake.Hartnell@gmail.com","name":"common-garden"},{"email":"noahsaso@gmail.com","name":"noahsaso"},{"email":"gabriel@lay3rlabs.io","name":"ismellike"},{"email":"jakub@moonbite.space","name":"true-ueco-jb"},{"email":"david.komer@gmail.com","name":"dakom"},{"email":"Reecepbcups@gmail.com","name":"reecepbcups"}],"readme":"## Prerequisites\n\n- Docker and Docker Compose\n- Foundry (Forge and Cast) for local development and testing\n\n## Testing\n\nTo run the test suite, make sure you have [Foundry](https://book.getfoundry.sh/) installed. Then run:\n\n```bash\n# Run all tests\nmake test\n```\n\n# Docker Quick Start\n\n## Build\n\nFirst, ensure you have all submodules:\n\n```bash\ngit submodule update --init --recursive\n```\n\nThen, build the image:\n\n```bash\ndocker build -t wavs-middleware .\n```\n\n## Setup\n\nPrepare the env file:\n\n```bash\nCHAIN=\ncp docker/env.example.$CHAIN docker/.env\n# edit the RPC_URL, DEPLOY_ENV for a paid testnet rpc endpoint.\n# edit the FORK_RPC_URL for local deployment.\n```\n\n## Testnet Fork\n\nStart anvil in one terminal:\n\n```bash\nsource docker/.env\nanvil --fork-url $FORK_RPC_URL --host 0.0.0.0 --port 8545\n```\n\n## Commands\n\n**Run all the following scripts in the `docker/` directory.**\n\n```bash\ncd docker/\n```\n\n### Deploy Contracts\n\nDeploys the WAVS middleware contracts.\n\n```bash\n# -s bls for BLS option\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware deploy\n```\n\n| Environment Variable   | Required              | Default                 | Source | Description                                   |\n| ---------------------- | --------------------- | ----------------------- | ------ | --------------------------------------------- |\n| `DEPLOY_ENV`           | for non-default value | `LOCAL`                 | `.env` | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`              | for non-default value | `http://localhost:8545` | `.env` | RPC URL                                       |\n| `FUNDED_KEY`           | Yes                   | -                       | `.env` | Private key with funds for deployment         |\n| `METADATA_URI`         | Yes                   | -                       | `.env` | URI for AVS metadata                          |\n| `LST_STRATEGY_ADDRESS` | for ecdsa             | -                       | `.env` | Liquid staking token strategy address         |\n\n### Set Service URI\n\nSets the service URI for the service manager.\n\n```bash\n# -s bls for BLS option\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware set_service_uri SERVICE_URI=\"https://ipfs.url/for-custom-service.json\"\n```\n\n| Environment Variable           | Required              | Default                       | Source | Description                                   |\n| ------------------------------ | --------------------- | ----------------------------- | ------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env` | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`                      | for non-default value | `http://localhost:8545`       | `.env` | RPC URL                                       |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Volume | Service manager contract address              |\n| `FUNDED_KEY`                   | if not mounted        | From `.nodes/deployer`        | Volume | Deployer private key                          |\n| `SERVICE_URI`                  | Yes                   | -                             | Params | URI for the service                           |\n\n### Register ECDSA Operator\n\nRegisters an operator for the ECDSA service.\n\n```bash\nWAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/avs_deploy.json)\n\nOPERATOR_KEY=$(cast wallet new --json | jq -r '.[0].private_key')\nOPERATOR_ADDRESS=$(cast wallet addr --private-key \"$OPERATOR_KEY\")\necho \"Operator address: $OPERATOR_ADDRESS\"\n\nAVS_KEY=$(cast wallet new --json | jq -r '.[0].private_key')\nAVS_SIGNING_ADDRESS=$(cast wallet addr --private-key \"$AVS_KEY\")\necho \"AVS signing address: $AVS_SIGNING_ADDRESS\"\n\ndocker run --rm --network host \\\n   --env-file .env \\\n   -e WAVS_SERVICE_MANAGER_ADDRESS=${WAVS_SERVICE_MANAGER_ADDRESS} \\\n   -e OPERATOR_KEY=${OPERATOR_KEY} \\\n   -e WAVS_SIGNING_KEY=${AVS_SIGNING_ADDRESS} \\\n   wavs-middleware register WAVS_DELEGATE_AMOUNT=1000000000000000\n```\n\n### Register BLS Operator\n\nRegisters an operator for the BLS service.\n\n```bash\nWAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/avs_deploy.json)\n\nOPERATOR_KEY=$(cast wallet new --json | jq -r '.[0].private_key')\nOPERATOR_ADDRESS=$(cast wallet addr --private-key \"$OPERATOR_KEY\")\necho \"Operator address: $OPERATOR_ADDRESS\"\n\ndocker run --rm --network host \\\n   --env-file .env \\\n   -e WAVS_SERVICE_MANAGER_ADDRESS=${WAVS_SERVICE_MANAGER_ADDRESS} \\\n   -e OPERATOR_KEY=${OPERATOR_KEY} \\\n   wavs-middleware -s bls register WAVS_DELEGATE_AMOUNT=1000000000000000000\n```\n\n| Environment Variable           | Required              | Default                       | Source       | Description                                   |\n| ------------------------------ | --------------------- | ----------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`                      | for non-default value | `http://localhost:8545`       | `.env`       | RPC URL                                       |\n| `LST_CONTRACT_ADDRESS`         | Yes                   | -                             | `.env`       | Liquid staking token contract address         |\n| `LST_STRATEGY_ADDRESS`         | Yes                   | -                             | `.env`       | Liquid staking token strategy address         |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Command line | Service manager contract address              |\n| `OPERATOR_KEY`                 | Yes                   | -                             | Command line | Private key for the operator                  |\n| `WAVS_SIGNING_KEY`             | for ecdsa             | -                             | Command line | Address of the AVS signing key                |\n| `WAVS_DELEGATE_AMOUNT`         | Yes                   | -                             | Params       | Amount to delegate to the operator            |\n\n### Deregister ECDSA Operator\n\nDeregisters an operator from the ECDSA service.\n\n```bash\nWAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/avs_deploy.json)\n\ndocker run --rm --network host \\\n   --env-file .env \\\n   -e WAVS_SERVICE_MANAGER_ADDRESS=${WAVS_SERVICE_MANAGER_ADDRESS} \\\n   -e OPERATOR_KEY=${OPERATOR_KEY} \\\n   wavs-middleware deregister\n```\n\n| Environment Variable           | Required              | Default                       | Source       | Description                                   |\n| ------------------------------ | --------------------- | ----------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`                      | for non-default value | `http://localhost:8545`       | `.env`       | RPC URL                                       |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Command line | Service manager contract address              |\n| `OPERATOR_KEY`                 | Yes                   | -                             | Command line | Private key for the operator                  |\n\n### List Operators\n\nLists all registered operators for the service.\n\n```bash\n# ECDSA list operators\nWAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/avs_deploy.json)\n\ndocker run --rm --network host \\\n   --env-file .env \\\n   -e WAVS_SERVICE_MANAGER_ADDRESS=${WAVS_SERVICE_MANAGER_ADDRESS} \\\n   wavs-middleware list_operators\n```\n\n```bash\n# BLS list operators\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware -s bls list_operators\n```\n\n| Environment Variable           | Required              | Default                       | Source       | Description                                   |\n| ------------------------------ | --------------------- | ----------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`                      | for non-default value | `http://localhost:8545`       | `.env`       | RPC URL                                       |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Command line | Service manager contract address              |\n\n### Update Quorum\n\nUpdates the quorum configuration for the service.\n\n```bash\n# -s bls for BLS option\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware update_quorum QUORUM_NUMERATOR=3 QUORUM_DENOMINATOR=5\n```\n\n| Environment Variable           | Required              | Default                       | Source | Description                                   |\n| ------------------------------ | --------------------- | ----------------------------- | ------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env` | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`                      | for non-default value | `http://localhost:8545`       | `.env` | RPC URL                                       |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Volume | Service manager contract address              |\n| `FUNDED_KEY`                   | if not mounted        | From `.nodes/deployer`        | Volume | Deployer private key                          |\n| `QUORUM_NUMERATOR`             | Yes                   | -                             | Params | Numerator for quorum calculation              |\n| `QUORUM_DENOMINATOR`           | Yes                   | -                             | Params | Denominator for quorum calculation            |\n\n### Pause Registration\n\nPauses operator registration for the service.\n\n```bash\n# -s bls for BLS option\n\n# ECDSA registry address\n# REGISTRY_ADDRESS=$(jq -r '.addresses.avsRegistrar' \"$HOME/.nodes/avs_deploy.json\")\n\n# BLS registry address\n# REGISTRY_ADDRESS=$(jq -r '.addresses.registryCoordinator' \"$HOME/.nodes/avs_deploy.json\")\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware pause\n```\n\n### Unpause Registration\n\nUnpauses operator registration for the service.\n\n```bash\n# -s bls for BLS option\n\n# ECDSA registry address\n# REGISTRY_ADDRESS=$(jq -r '.addresses.avsRegistrar' \"$HOME/.nodes/avs_deploy.json\")\n\n# BLS registry address\n# REGISTRY_ADDRESS=$(jq -r '.addresses.registryCoordinator' \"$HOME/.nodes/avs_deploy.json\")\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware unpause\n```\n\n| Environment Variable | Required              | Default                       | Source | Description                                   |\n| -------------------- | --------------------- | ----------------------------- | ------ | --------------------------------------------- |\n| `DEPLOY_ENV`         | for non-default value | `LOCAL`                       | `.env` | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`            | for non-default value | `http://localhost:8545`       | `.env` | RPC URL                                       |\n| `REGISTRY_ADDRESS`   | if not mounted        | From `.nodes/avs_deploy.json` | Volume | AVS registrar address                         |\n| `FUNDED_KEY`         | if not mounted        | From `.nodes/deployer`        | Volume | Deployer private key                          |\n\n### Transfer Ownership\n\nTransfers ownership of the service contracts to new owners.\n\n```bash\nPROXY_OWNER=$(cast wallet new --json | jq -r '.[0].private_key')\nPROXY_OWNER_ADDRESS=$(cast wallet addr --private-key \"$PROXY_OWNER\")\necho \"Proxy owner address: $PROXY_OWNER_ADDRESS\"\nAVS_OWNER=$(cast wallet new --json | jq -r '.[0].private_key')\nAVS_OWNER_ADDRESS=$(cast wallet addr --private-key \"$AVS_OWNER\")\necho \"Avs owner address: $AVS_OWNER_ADDRESS\"\n\n# WAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/avs_deploy.json)\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware transfer_ownership ${PROXY_OWNER} ${AVS_OWNER}\n```\n\n| Environment Variable           | Required              | Default                       | Source | Description                                    |\n| ------------------------------ | --------------------- | ----------------------------- | ------ | ---------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env` | Deployment environment (`LOCAL` or `TESTNET`)  |\n| `RPC_URL`                      | for non-default value | `http://localhost:8545`       | `.env` | RPC URL                                        |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | volume | Service manager contract address               |\n| `FUNDED_KEY`                   | if not mounted        | From `.nodes/deployer`        | Volume | Deployer private key                           |\n| `PROXY_OWNER`                  | Yes                   | -                             | Params | New owner for proxy admin                      |\n| `AVS_OWNER`                    | Yes                   | -                             | Params | New owner for AVS registrar and stake registry |\n\n### Delegate to Operator\n\nDelegates tokens to an operator.\n\n```bash\nWAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/avs_deploy.json)\n\nSTAKER_KEY=$(cast wallet new --json | jq -r '.[0].private_key')\nSTAKER_ADDRESS=$(cast wallet addr --private-key \"$STAKER_KEY\")\necho \"Staker address: $STAKER_ADDRESS\"\n\ndocker run --rm --network host \\\n   --env-file .env \\\n   -e WAVS_SERVICE_MANAGER_ADDRESS=${WAVS_SERVICE_MANAGER_ADDRESS} \\\n   -e STAKER_KEY=${STAKER_KEY} \\\n   -e OPERATOR_ADDRESS=${OPERATOR_ADDRESS} \\\n   wavs-middleware delegate_to_operator WAVS_DELEGATE_AMOUNT=1000000000000000\n```\n\n### Delegate to Operator with Approver\n\nDelegates tokens to an operator with delegation approver.\n\n```bash\ndocker run --rm --network host \\\n   --env-file .env \\\n   -e STAKER_KEY=${STAKER_KEY} \\\n   -e OPERATOR_ADDRESS=${OPERATOR_ADDRESS} \\\n   -e DELEGATION_APPROVER_PRIVATE_KEY=${DELEGATION_APPROVER_PRIVATE_KEY} \\\n   -e DELEGATION_APPROVER_SALT=${DELEGATION_APPROVER_SALT} \\\n   -e DELEGATION_DURATION=${DELEGATION_DURATION} \\\n   wavs-middleware delegate_to_operator WAVS_DELEGATE_AMOUNT=1000000000000000\n```\n\n| Environment Variable              | Required              | Default                       | Source       | Description                                   |\n| --------------------------------- | --------------------- | ----------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                      | for non-default value | `LOCAL`                       | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `RPC_URL`                         | for non-default value | `http://localhost:8545`       | `.env`       | RPC URL                                       |\n| `LST_CONTRACT_ADDRESS`            | Yes                   | -                             | `.env`       | Liquid staking token contract address         |\n| `LST_STRATEGY_ADDRESS`            | Yes                   | -                             | `.env`       | Liquid staking token strategy address         |\n| `WAVS_SERVICE_MANAGER_ADDRESS`    | if not mounted        | From `.nodes/avs_deploy.json` | Command line | Service manager contract address              |\n| `STAKER_KEY`                      | Yes                   | -                             | Command line | Private key for the staker                    |\n| `OPERATOR_ADDRESS`                | Yes                   | -                             | Command line | Address of the operator to delegate to        |\n| `DELEGATION_APPROVER_PRIVATE_KEY` | if approver is active | `0x0000...`                   | Command line | Private key for delegation approver           |\n| `DELEGATION_APPROVER_SALT`        | if approve is active  | `0x0000...`                   | Command line | Salt for delegation approver                  |\n| `DELEGATION_DURATION`             | if approve is active  | `0`                           | Command line | Duration for delegation                       |\n| `WAVS_DELEGATE_AMOUNT`            | Yes                   | -                             | Params       | Amount to delegate to the operator            |\n\n## Mirror Deployment\n\n### Deploy Mirror Contracts\n\nDeploys mirror contracts to match the first anvil instance.\n\n```bash\nanvil --host 0.0.0.0 --port 8546\n```\n\n```bash\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   wavs-middleware -m mirror deploy\n```\n\n| Environment Variable           | Required              | Default                       | Source       | Description                                   |\n| ------------------------------ | --------------------- | ----------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                       | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Volume       | Service manager contract address              |\n| `FUNDED_KEY`                   | if not mounted        | From `.nodes/deployer`        | Volume       | Deployer private key                          |\n| `SOURCE_RPC_URL`               | for non-default value | `http://localhost:8545`       | Command line | RPC URL for source chain                      |\n| `MIRROR_RPC_URL`               | for non-default value | `http://localhost:8546`       | Command line | RPC URL for mirror chain                      |\n\n### List Mirror Operators\n\nLists operators on the mirror chain.\n\n```bash\n# SOURCE_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' \".nodes/avs_deploy.json\")\n# MIRROR_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' \".nodes/mirror.json\")\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   wavs-middleware -m mirror list_operators\n```\n\n| Environment Variable             | Required              | Default                       | Source       | Description                                   |\n| -------------------------------- | --------------------- | ----------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                     | for non-default value | `LOCAL`                       | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `SOURCE_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/avs_deploy.json` | Volume       | Source service manager address                |\n| `MIRROR_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/mirror.json`     | Volume       | Mirror service manager address                |\n| `SOURCE_RPC_URL`                 | for non-default value | -                             | Command line | RPC URL for source chain                      |\n| `MIRROR_RPC_URL`                 | for non-default value | -                             | Command line | RPC URL for mirror chain                      |\n\n## Mock Deployment\n\nThis deployment process is for local testing and development. It deploys a \"mock\" version of the WAVS middleware contracts by using the mock stage of the mirror deployment scripts. This allows for rapid testing without needing to interact with a live EigenLayer environment.\n\n### 1. Run a Local Blockchain\n\n```bash\nanvil --host 0.0.0.0 --port 8546\n```\n\n### 2. Deploy Empty Mock Contracts\n\n```bash\nMOCK_DEPLOYER_KEY=$(cast wallet new --json | jq -r '.[0].private_key')\nMOCK_DEPLOYER_ADDRESS=$(cast wallet addr --private-key \"$MOCK_DEPLOYER_KEY\")\necho \"Mock deployer address: $MOCK_DEPLOYER_ADDRESS\"\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   -e MOCK_DEPLOYER_KEY=${MOCK_DEPLOYER_KEY} \\\n   wavs-middleware -m mock deploy\n```\n\nThis will write the deployed contract addresses to `./.nodes/mock.json` (where `./nodes` is whatever you mounted your volume to)\n\n| Environment Variable | Required              | Default                 | Source       | Description                                   |\n| -------------------- | --------------------- | ----------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`         | for non-default value | `LOCAL`                 | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `MOCK_DEPLOYER_KEY`  | Yes                   | -                       | Command line | Private key for mock deployment               |\n| `MOCK_RPC_URL`       | for non-default value | `http://localhost:8546` | Command line | RPC URL for mock blockchain                   |\n| `DEPLOY_FILE_MOCK`   | for non-default value | `mock`                  | Command line | File name to store mock deployment            |\n\n### 3. Create a Configuration File\n\nCreate a `mock-config.json` file on your local machine. This file defines the initial operators, their signing keys, weights, and the threshold for the stake registry.\n\n```json\n{\n  \"operators\": [\n    \"0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf\",\n    \"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF\",\n    \"0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69\",\n    \"0x1efF47bc3a10a45D4B230B5d10E37751FE6AA718\",\n    \"0xe1AB8145F7E55DC933d51a18c793F901A3A0b276\"\n  ],\n  \"quorumDenominator\": 3,\n  \"quorumNumerator\": 2,\n  \"signingKeyAddresses\": [\n    \"0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf\",\n    \"0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF\",\n    \"0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69\",\n    \"0x1efF47bc3a10a45D4B230B5d10E37751FE6AA718\",\n    \"0xe1AB8145F7E55DC933d51a18c793F901A3A0b276\"\n  ],\n  \"threshold\": 12345,\n  \"weights\": [10000, 10000, 10000, 10000, 10000]\n}\n```\n\n### 4. Configure Mock Contracts\n\n```bash\n# Set the path to your local config file\nLOCAL_CONFIG_PATH=$(pwd) # file path that contains config file\nCONFIGURE_FILE=wavs-mock-config\nMOCK_SERVICE_MANAGER_ADDRESS=$(jq -r '.addresses.WavsServiceManager' .nodes/mock.json)\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   -v $LOCAL_CONFIG_PATH:/wavs/contracts/deployments \\\n   --env-file .env \\\n   wavs-middleware -m mock configure\n```\n\n| Environment Variable           | Required              | Default                     | Source       | Description                                   |\n| ------------------------------ | --------------------- | --------------------------- | ------------ | --------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                     | `.env`       | Deployment environment (`LOCAL` or `TESTNET`) |\n| `MOCK_RPC_URL`                 | for non-default value | `http://localhost:8546`     | Command line | RPC URL for mock blockchain                   |\n| `MOCK_DEPLOYER_KEY`            | if not mounted        | From `.nodes/mock-deployer` | Volume       | Deployer private key                          |\n| `MOCK_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/mock.json`     | Volume       | Service manager contract address              |\n| `DEPLOY_FILE_MOCK`             | for non-default value | `mock`                      | Command line | File name to store mock deployment            |\n| `CONFIGURE_FILE`               | for non-default value | `wavs-mock-config`          | Command line | File name to read configuration data          |\n\n### 5. Mock Transfer Ownership\n\nTransfers ownership of the mock service contracts to new owners.\n\n```bash\nPROXY_OWNER=$(cast wallet new --json | jq -r '.[0].private_key')\nPROXY_OWNER_ADDRESS=$(cast wallet addr --private-key \"$PROXY_OWNER\")\necho \"Proxy owner address: $PROXY_OWNER_ADDRESS\"\nAVS_OWNER=$(cast wallet new --json | jq -r '.[0].private_key')\nAVS_OWNER_ADDRESS=$(cast wallet addr --private-key \"$AVS_OWNER\")\necho \"Avs owner address: $AVS_OWNER_ADDRESS\"\n\ndocker run --rm --network host -v ./.nodes:/root/.nodes \\\n   --env-file .env \\\n   wavs-middleware -m mock transfer_ownership ${PROXY_OWNER} ${AVS_OWNER}\n```\n\n| Environment Variable           | Required              | Default                     | Source       | Description                                    |\n| ------------------------------ | --------------------- | --------------------------- | ------------ | ---------------------------------------------- |\n| `DEPLOY_ENV`                   | for non-default value | `LOCAL`                     | `.env`       | Deployment environment (`LOCAL` or `TESTNET`)  |\n| `MOCK_RPC_URL`                 | for non-default value | `http://localhost:8546`     | Command line | RPC URL for mock blockchain                    |\n| `MOCK_DEPLOYER_KEY`            | if not mounted        | From `.nodes/mock-deployer` | Volume       | Deployer private key                           |\n| `WAVS_SERVICE_MANAGER_ADDRESS` | if not mounted        | From `.nodes/mock.json`     | Volume       | Service manager contract address               |\n| `PROXY_OWNER`                  | Yes                   | -                           | Params       | New owner for proxy admin                      |\n| `AVS_OWNER`                    | Yes                   | -                           | Params       | New owner for AVS registrar and stake registry |\n\n## Deploy Testnet\n\nSame as the local deploy, change `DEPLOY_ENV` to `\"TESTNET\"` and make sure the `FUNDED_KEY` is actually funded on testnet\n\n## References\n\n- [EigenLayer Documentation](https://docs.eigenlayer.xyz/)\n- [Hello World AVS Repository](https://github.com/Layr-Labs/hello-world-avs)\n\n## Deployment Process Flow\n\n```mermaid\nsequenceDiagram\n    autonumber\n    participant Env as Environment\n    participant Deploy as Deploy Script\n    participant Service as Service U\n    participant Register as Register Operator\n    participant Contracts as Contracts\n\n    Env->>Env: Load Environment Variables\n    Env->>Env: Set RPC_URL\n    Env->>Env: Check Required Variables\n\n    Deploy->>Contracts: Deploy Middleware Contracts\n    Deploy->>Deploy: Read Contract Addresses\n    Deploy->>Contracts: Update Quorum Config\n    Deploy->>Contracts: Update Minimum Weight\n    Deploy->>Contracts: Update AVS Registrar\n    Deploy->>Contracts: Update Metadata URL\n    Deploy->>Contracts: Create Operator Sets\n\n    Service->>Service: Read Deployer Key\n    Service->>Service: Get Service Manager Address\n    Service->>Service: Get Owner Address\n    Service->>Contracts: Impersonate Owner\n    Service->>Contracts: Set Service URI\n    Service->>Contracts: Stop Impersonating\n\n    Register->>Register: Read Operator Key and AVS Signing Address\n    Register->>Register: Setup Operator\n    Register->>Register: Fund Operator Account\n    Register->>Contracts: Mint LST Tokens\n    Register->>Contracts: Approve LST Tokens\n    Register->>Contracts: Deposit into Strategy\n    Register->>Contracts: Register as Operator\n    Register->>Contracts: Register for Operator Sets\n    Register->>Contracts: Get Stake Registry Address\n    Register->>Contracts: Get Service Manager Address\n    Register->>Contracts: Get AVS Directory Address\n    Register->>Register: Generate Random Salt\n    Register->>Register: Calculate Expiry\n    Register->>Register: Calculate Digest Hash\n    Register->>Register: Sign Digest Hash with Operator Key\n    Register->>Contracts: Register with Signature using AVS Signing Address\n```\n\n## Detailed Process Explanation\n\n### Initial Setup\n\n- Load environment variables from `.env` file\n- Set `RPC_URL` based on environment (TESTNET or LOCAL)\n- Check for required environment variables\n\n### Deploy Process (deploy.sh)\n\n1. Deploy middleware contracts using Forge script\n2. Read contract addresses from deployment JSON\n3. Update quorum config with strategy weights\n4. Set minimum weight for operators\n5. Configure AVS registrar\n6. Update metadata URL for EigenLayer frontend\n7. Create operator sets for meta-AVS functionality\n\n### Set Service URI (set_service_uri.sh)\n\n1. Read deployer private key from file\n2. Get service manager address from deployment JSON\n3. Get owner address from service manager contract\n4. Impersonate owner account (LOCAL only)\n5. Set service URI on service manager contract\n6. Stop impersonating owner account\n\n### Register Operator (register.sh)\n\n1. Read operator private key and AVS signing address from command line\n2. Setup operator with initial configuration\n3. Fund operator account with ETH\n4. Mint LST tokens for operator\n5. Approve LST tokens for strategy manager\n6. Deposit LST tokens into strategy\n7. Register as operator with delegation manager\n8. Register for operator sets with allocation manager\n9. Register with AVS using signature:\n   - Get stake registry address\n   - Get service manager address\n   - Get AVS directory address\n   - Generate random salt\n   - Calculate expiry time\n   - Calculate digest hash\n   - Sign digest hash with operator's private key\n   - Register with signature on stake registry, using the AVS signing address as the signing key\n\n### Helper Functions (helpers.sh)\n\n- `wait_for_ethereum`: Check if Ethereum node is ready\n- `impersonate_account`: Impersonate an account (LOCAL only)\n- `execute_transaction`: Run a transaction and handle errors\n- `stop_impersonating`: Stop impersonating an account (LOCAL only)\n\n### Instructions on getting Holesky ETH\n\nTo get Holesky ETH for running on testnet:\n\n1. PoW Mining Faucet:\n\n   - Go to https://holesky-faucet.pk910.de/\n   - Connect your wallet\n   - Mine blocks in your browser to earn ETH\n   - Rewards based on mining time/hashrate\n   - No external requirements\n\n2. Alchemy Faucet (Alternative):\n   - Visit https://www.alchemy.com/faucets/holesky\n   - Requires mainnet ETH balance to use\n   - Connect wallet and verify ownership\n   - Request funds (limits apply)\n","readmeFilename":"README.md"}