{"_id":"ethr-did-registry","_rev":"14-19b4ea657a5116d1e88abc4425b5c49d","name":"ethr-did-registry","dist-tags":{"latest":"2.0.0"},"versions":{"0.0.1":{"name":"ethr-did-registry","version":"0.0.1","author":{"name":"Pelle Braendgaard","email":"pelle.braendgaard@consensys.net"},"license":"Apache-2.0","_id":"ethr-did-registry@0.0.1","maintainers":[{"name":"pelleb","email":"pelleb@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"e1e164ae23549f4686e64c3b4440d9aaf16d4b62","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-0.0.1.tgz","fileCount":16,"integrity":"sha512-J0hQQ06lpS8QpL93b6mCHFPKBPqFVYGomvm8JZJz0wAn4kr/Jm/CNqVzh1lZblwv4zwERI8K9iO3OfrmpKIKuA==","signatures":[{"sig":"MEUCIQCfy5nBgJaKmdilkBedK+YKiQq7BTVg5AzWsv6+z0gCrwIgILR6Px/vjgBlZKN/yvjB1WuvL0DYn0rygfAJz0fqQ+o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":548215},"main":"build/contracts/EthereumDIDRegistry.json","gitHead":"877bfa3035bb0c7c94f98e940f0af6c2033d5d43","scripts":{"lint":"solhint contracts/EthereumDIDRegistry.sol","test":"truffle test","_deploy":"truffle migrate --network ","deploy-test":"npm run _deploy test","deploy-kovan":"npm run _deploy kovan","deploy-local":"npm run _deploy local","deploy-mainnet":"npm run _deploy mainnet","deploy-rinkeby":"npm run _deploy rinkeby","deploy-ropsten":"npm run _deploy ropsten","deploy-infuranet":"npm run _deploy infuranet"},"_npmUser":{"name":"pelleb","email":"pelleb@gmail.com"},"repository":{"url":"git+https://github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"5.6.0","description":"A repository storing keys and other data about Decentralized Identifiers (DIDs)","directories":{"test":"test"},"_nodeVersion":"9.9.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","js-sha3":"^0.7.0","solhint":"^1.1.10","truffle":"^4.0.6","ganache-cli":"^6.0.3","ethereumjs-tx":"^1.3.4","ethereumjs-util":"^5.1.5","truffle-hdwallet-provider":"^0.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_0.0.1_1522505393423_0.9633182974632251","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"ethr-did-registry","version":"0.0.2","author":{"name":"Pelle Braendgaard","email":"pelle.braendgaard@consensys.net"},"license":"Apache-2.0","_id":"ethr-did-registry@0.0.2","maintainers":[{"name":"pelleb","email":"pelleb@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"61746bb70c1ad64e86e424fb32ade4a620f7a180","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-0.0.2.tgz","fileCount":16,"integrity":"sha512-hNVlXe/AnY5eZx3xqjCvdLvKFYTK6D4DH4a/ItXaDaD2vaZ5lAg41zDWizAhC8TroCM4zUx2L/7VIEHsGsSPXQ==","signatures":[{"sig":"MEUCIQDqzKet+2lLdFir1O9LX5loZJmjm9SfyygyOuqh3YjJuQIgHauT/hX9BRE/QSIHHgt24H2zuITziR1OkavSBNZAKsQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":726563},"main":"build/contracts/EthereumDIDRegistry.json","gitHead":"c73e7a8178a08ca60b32bbbb7dbdc52082f4a175","scripts":{"lint":"solhint contracts/EthereumDIDRegistry.sol","test":"truffle test","_deploy":"truffle migrate --network ","deploy-test":"npm run _deploy test","deploy-kovan":"npm run _deploy kovan","deploy-local":"npm run _deploy local","deploy-mainnet":"npm run _deploy mainnet","deploy-rinkeby":"npm run _deploy rinkeby","deploy-ropsten":"npm run _deploy ropsten","deploy-infuranet":"npm run _deploy infuranet"},"_npmUser":{"name":"pelleb","email":"pelleb@gmail.com"},"repository":{"url":"git+https://github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"5.6.0","description":"A repository storing keys and other data about Decentralized Identifiers (DIDs)","directories":{"test":"test"},"_nodeVersion":"9.9.0","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","js-sha3":"^0.7.0","solhint":"^1.1.10","truffle":"^4.0.6","ganache-cli":"^6.0.3","ethereumjs-tx":"^1.3.4","ethereumjs-util":"^5.1.5","truffle-hdwallet-provider":"^0.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_0.0.2_1522535186509_0.6746124343766122","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"ethr-did-registry","version":"0.0.3","author":{"name":"Pelle Braendgaard","email":"pelle.braendgaard@consensys.net"},"license":"Apache-2.0","_id":"ethr-did-registry@0.0.3","maintainers":[{"name":"pelleb","email":"pelleb@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"f363d2c73cb9572b57bd7a5c9c90c88485feceb5","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-0.0.3.tgz","fileCount":16,"integrity":"sha512-4BPvMGkxAK9vTduCq6D5b8ZqjteD2cvDIPPriXP6nnmPhWKFSxypo+AFvyQ0omJGa0cGTR+dkdI/8jiF7U/qaw==","signatures":[{"sig":"MEUCIQC2Fwz0I9Vr66q+lb3AMpYDIez1PaZ3Ay/KXL0iPhDlLAIgZPxP/uJFW7won376X5u+g2qOxGRO2cBpSUwvrdj/5Rg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1085397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbIxXFCRA9TVsSAnZWagAA+4AP/1IbjnE/sqThBDGfLZ5V\naFjU1VfLxJxNyFsjfmub7ZgspQcWDDv1hOSzaGfUKzkmM6RazXmw/8kmamfQ\ngSNg3IZViyVTS5IPG/a6yK/pRQmGz3x7CZSPYPEHJbpDoA68h4Y0TZMkFr1P\no3Y4Z3Q/WKpu2KYW+Wcg3rga9/I1/wwbfwOhrI6n1vIH7N1GJgwFzTIgl2Jc\nozrq39EwEIyChtQ+1dxW8fyWppI/s/mIteFNCj3yFH5Bsx+iYTQFe2hJANOB\nmCJMsY8StjkHE1prtCyLZFd6p4z0nEu6hztpYT8LGxuEOqlaIomiPHNlxFWW\nMDQkPs1Jv2aenpIcW5cqVy/4POMmtFJuzn5Rh4/5TiVCcbFvdx4m4GVeUFzG\nCh8X6lQA5a+liSS9XhkHu5SSu9ZGY56ctkqL3KX2ua86M4zHWecbGiwfjd4V\njZtReHofyEDW7gI2dc9mifXGqGzG6oB22fUoJb/SLtwYAmF8g0Af8tw81y47\nbU+MGjm+g115I2evPe/dnmZcrv9rt3LSxEx7x5HELvEvhYoLBxSccIUTTIHa\nsZlGTOjMhYqo1yXOG68ksmhye77vwdhBNRiHSh7GmdzhBtJNQoWMI0d+LEhP\noZHTTaoaDiUCYp5RidtNeO8OELV3pgjZHnIRSHUl0nVFjF/LEsveuVNorlTn\nJfYv\r\n=6cWY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"build/contracts/EthereumDIDRegistry.json","gitHead":"c5ea0f99cd34313e3d797d9ce5c5d7e74959dd04","scripts":{"lint":"solhint contracts/EthereumDIDRegistry.sol","test":"truffle test","_deploy":"truffle migrate --network ","deploy-test":"npm run _deploy test","deploy-kovan":"npm run _deploy kovan","deploy-local":"npm run _deploy local","deploy-mainnet":"npm run _deploy mainnet","deploy-rinkeby":"npm run _deploy rinkeby","deploy-ropsten":"npm run _deploy ropsten","deploy-infuranet":"npm run _deploy infuranet"},"_npmUser":{"name":"pelleb","email":"pelleb@gmail.com"},"repository":{"url":"git+https://github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"5.6.0","description":"A repository storing keys and other data about Decentralized Identifiers (DIDs)","directories":{"test":"test"},"_nodeVersion":"9.11.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","js-sha3":"^0.7.0","solhint":"^1.1.10","truffle":"^4.1.6","ganache-cli":"^6.0.3","ethereumjs-tx":"^1.3.4","ethereumjs-util":"^5.1.5","truffle-hdwallet-provider":"^0.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_0.0.3_1529025988166_0.05522293071385698","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"ethr-did-registry","version":"1.0.0","author":{"name":"Pelle Braendgaard"},"license":"MIT","_id":"ethr-did-registry@1.0.0","maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"contributors":[{"name":"Mircea Nistor","email":"mirceanis@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"9fc076c5dd06288d79d4682ad7dd9b05832e8661","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-1.0.0.tgz","fileCount":34,"integrity":"sha512-9Gl3WcogECcdIjCjFbTKtmkz18VlQf50qE9iELnLIYVsEZo+hB38ApwOd83sYMGAjSs2c1dlzUI96H9kyvfl7w==","signatures":[{"sig":"MEYCIQDhNQ1XT+BIGsobWjDhONCYxNiSGzaLP5fKfJhFXoiTgQIhAM1J9Sm0VQ5V7pWkvN08BYN65fKxYX06dPSm6f2N3Kf8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1441272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJixs9hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqElQ/8DodLkTiY5Yh/ubE9+VqZKQNPsTzQG9RvEg4ufJ4KXqFAEhoR\r\nEz75kpk1U+QnVMBfPXgQ5Bpt4qKuoOEOFwLP6d/luK1L/0asljHRoZr8K7Fd\r\nHqoiqLbeom17AFXob+ucr4jC828B0TytKW3AWVGsi52jdBGTPltQmqhCqyQ0\r\ng0D1Kn+UpkEIclK9m8+Bputo+Ud2veCHqpT+v+SWB+aKUhhl7nKLFU7zi1H2\r\nKxF1TwdO1BX1MsoWUwAabEIJLSm6XLQqtGMhZ7vu3kosq8MV0lgkuVEcJyfS\r\njIFSkeueLYVKcchKW5vqBxC6eAFEZqPj9v8oFLC3heGuHDAQaCyXvc3Cwa/v\r\nKnl0nV9RwMrxQbUr4spW41pczx1JQaumYZ8wt+T5qmpHWrQbZmnulYC6ejA5\r\ncxtiuqIrMEHZ5RSAsNJEpM3Akskuo90Ur/sO4AYeL2sWpL6BYIalJKeQQjpm\r\nOW4THgP10D17ORqgbbQyJAgClpGmTmU8cHtoUZlf3b5LOns5CONvn/kAcoFM\r\niesZfxpz7Jp8tFE3p3bEZw517OsxEnEF1HhUjQvqKeOWRYs0RB7p0JgrtJuu\r\nvi8LERMiL+SyGOv6Gy1wMH6CsfSLlbhepEy/MXd7ouwMRPNZzqxwrjLO67/i\r\nX9kV8qzt7QY0VXDTZLwAMJI0xwe7HvJUu9M=\r\n=H/RI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"553374b1af559a7727087ae62f8035eb0d2a78fc","scripts":{"lint":"yarn lint:sol && yarn lint:js","test":"hardhat test","build":"yarn build:sol && yarn build:js","format":"prettier -w '**/*.{ts,js,json,md}'","lint:js":"npx eslint '**/*.{js,ts}' --fix","release":"semantic-release --debug","build:js":"tsc","lint:sol":"npx solhint 'contracts/**/*.sol' --fix","build:sol":"hardhat compile","prepublishOnly":"yarn test && yarn format && yarn lint"},"_npmUser":{"name":"uport-automation-bot","email":"devops@uport.me"},"repository":{"url":"git+ssh://git@github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"8.13.2","description":"A repository storing keys and other data about Ethereum Decentralized Identifiers (DIDs)","directories":{},"_nodeVersion":"14.19.3","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","chai":"^4.3.6","dotenv":"^16.0.1","eslint":"^8.19.0","ethers":"^5.6.9","hardhat":"^2.9.9","solhint":"^3.3.7","ts-node":"^10.8.2","prettier":"^2.7.1","typechain":"^8.1.0","babel-jest":"28.1.2","typescript":"^4.7.4","@babel/core":"7.18.6","@types/chai":"^4.3.1","@types/node":"^18.0.3","uint8arrays":"^3.0.0","@types/mocha":"^9.1.1","ethereumjs-tx":"^2.1.2","eslint-plugin-n":"^15.2.4","ethereum-waffle":"^3.4.4","ethereumjs-util":"^7.1.5","chai-as-promised":"^7.1.1","semantic-release":"19.0.3","@babel/preset-env":"7.18.6","solidity-coverage":"^0.7.21","@typechain/hardhat":"^6.1.2","eslint-plugin-node":"^11.1.0","@typechain/ethers-v5":"^10.1.0","eslint-plugin-import":"^2.26.0","hardhat-gas-reporter":"^1.0.8","@semantic-release/git":"10.0.1","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.5.0","eslint-config-standard":"^17.0.0","eslint-plugin-prettier":"^4.2.1","@types/chai-as-promised":"^7.1.5","@babel/preset-typescript":"7.18.6","prettier-plugin-solidity":"^1.0.0-beta.13","@nomiclabs/hardhat-ethers":"^2.0.6","@nomiclabs/hardhat-waffle":"^2.0.3","@typescript-eslint/parser":"^5.30.5","@semantic-release/changelog":"6.0.1","@nomiclabs/hardhat-etherscan":"^3.1.0","@typescript-eslint/eslint-plugin":"^5.30.5"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_1.0.0_1657196385609_0.4795362156329357","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"ethr-did-registry","version":"1.0.1","author":{"name":"Pelle Braendgaard"},"license":"MIT","_id":"ethr-did-registry@1.0.1","maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"contributors":[{"name":"Mircea Nistor","email":"mirceanis@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"de6e9b5adaaffa8f97cf1351c6c57fbc58c88b96","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-1.0.1.tgz","fileCount":34,"integrity":"sha512-v80+PLzT6so4Zk8vxPT+vDgtO4QiN/50Xvz8Gxpj+D70Y+dGvFFEJ22pW3OzVuRGqQ9+7yRVz+v1mufFN6lxJw==","signatures":[{"sig":"MEUCIQCyGPih3r1H37CBSzEOZ6ZDW8otmP044wFMjB9iQVAZIgIgTPz4VudonEXQrYQK0d7ltHnoP4QtYnShqru7AlcwQ7s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1441458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjBsaTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqUwBAAiUr21F+/fgldszjXC9SJaFUTDxuqC6iPDo/nWTr4/ks1QBzS\r\noYlkSzvU6/Jp+9XzB1AmTSPmYxsxi+YJlbrvUAouf9ewBkjcU1j9fgC8FCkM\r\nVTlLUl5Y7LqsCmAtPSFrW78SlCZfnE+i6VUSxOA7BGPfhvO9i3Y9zB8CXRpy\r\nxzRdbul75W8QvMkOXfVThBbZbYyc+c5yUzOJP4ftKxF4Pd/OccGXinTFYbq7\r\n5dmX/KUj+NLw1Wu/zUOgEg6x8iHA5vsIaFwk5yWMjQHfE/UsVdr7XTpanGa3\r\nuZcAJzj1hlEBVWuB/f/G/FoR6I1VEt1IVC+76a4Whqv5HF02j9mEV9VeXu/k\r\nXWcobRc89+47AWNuKcmjLNil1Oq5AD+QCorcyqk4VodJl5vcbkkJ8je3HnNy\r\nNp1evePjPONowh2pO9uCaaT0I/NhSZ1MP7XCQBmEz3AlTL3KWEDLmB1pKp9x\r\nSmE3/cCUJIqe7MB/uqjtsujUIu26PNTl25PRLhzJ6CXiSAxSWMCjNNKp9id6\r\nvc5WiPaB/ExVZH/VpVoMCfHsgxHkaVxnu3zvBK6bAVKLCT6di6eUBmGVYwuh\r\nWskDZzQ7PJ6BI3lwcZAdE6gW6hGuGcHY7YsubavtnQtYtqWo1sYHvGakqxmT\r\nHds9JzaPWTs4T9gdeeCvDnnr32T6IV1D6k0=\r\n=xtXv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":"./dist/index.js","gitHead":"e241c743def1acf6378f2017b86e4c85cce14342","scripts":{"lint":"yarn lint:sol && yarn lint:js","test":"hardhat test","build":"yarn build:sol && yarn build:js","format":"prettier -w '**/*.{ts,js,json,md}'","lint:js":"npx eslint '**/*.{js,ts}' --fix","release":"semantic-release --debug","build:js":"tsc","lint:sol":"npx solhint 'contracts/**/*.sol' --fix","build:sol":"hardhat compile","prepublishOnly":"yarn test && yarn format && yarn lint"},"_npmUser":{"name":"uport-automation-bot","email":"devops@uport.me"},"repository":{"url":"git+ssh://git@github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"8.13.2","description":"A repository storing keys and other data about Ethereum Decentralized Identifiers (DIDs)","directories":{},"_nodeVersion":"14.20.0","dependencies":{},"typesVersions":{"*":{"*":["./dist/index.d.js"],"dist/index.d.ts":["dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","chai":"^4.3.6","dotenv":"^16.0.1","eslint":"^8.19.0","ethers":"^5.6.9","hardhat":"^2.9.9","solhint":"^3.3.7","ts-node":"^10.8.2","prettier":"^2.7.1","typechain":"^8.1.0","babel-jest":"28.1.2","typescript":"^4.7.4","@babel/core":"7.18.6","@types/chai":"^4.3.1","@types/node":"^18.0.3","uint8arrays":"^3.0.0","@types/mocha":"^9.1.1","ethereumjs-tx":"^2.1.2","eslint-plugin-n":"^15.2.4","ethereum-waffle":"^3.4.4","ethereumjs-util":"^7.1.5","chai-as-promised":"^7.1.1","semantic-release":"19.0.3","@babel/preset-env":"7.18.6","solidity-coverage":"^0.7.21","@typechain/hardhat":"^6.1.2","eslint-plugin-node":"^11.1.0","@typechain/ethers-v5":"^10.1.0","eslint-plugin-import":"^2.26.0","hardhat-gas-reporter":"^1.0.8","@semantic-release/git":"10.0.1","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.5.0","eslint-config-standard":"^17.0.0","eslint-plugin-prettier":"^4.2.1","@types/chai-as-promised":"^7.1.5","@babel/preset-typescript":"7.18.6","prettier-plugin-solidity":"^1.0.0-beta.13","@nomiclabs/hardhat-ethers":"^2.0.6","@nomiclabs/hardhat-waffle":"^2.0.3","@typescript-eslint/parser":"^5.30.5","@semantic-release/changelog":"6.0.1","@nomiclabs/hardhat-etherscan":"^3.1.0","@typescript-eslint/eslint-plugin":"^5.30.5"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_1.0.1_1661388435031_0.7663459255248588","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"ethr-did-registry","version":"1.1.0","author":{"name":"Pelle Braendgaard"},"license":"MIT","_id":"ethr-did-registry@1.1.0","maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"contributors":[{"name":"Mircea Nistor","email":"mirceanis@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"d7081eb64d64a4c048a7cf9cabe76ca59288ef9e","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-1.1.0.tgz","fileCount":34,"integrity":"sha512-tT3R/u2VPZIQJB+OfBXYATxr0/5C3PmbsT+rghPAXmosFsGPB1DEcKYrVVb/XJhZiuQOvTQZGuK2kUluWMLw9w==","signatures":[{"sig":"MEUCIBxbEKeMdNscTsdQBe8+OkSj6Vxd+QIo+dZ9ibRcoH0TAiEA7jrqxvghznGlAmdUUc5HEQOXxFP4ouq7wvVIfBQLT4E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1441563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjRayIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp/dA/+MekKi9fyyeT32BaWWHm6d0Pfesy16lygl2PSyKs/5KjtwwG3\r\nAIWACgufeGGeMnW2bubvLAPNYtePVqKLVnqKufotvxlo7/9s8Q3cywFznBF1\r\nXSQmFLYvQtxGHbmfwJQBh8g1Pm3gtR8SyoHMdoUnbOlDybt6lr60GvEwZ7Xh\r\n9LfE7QKa+aW1fuUPysfOfp31DHcgwj5Yw9BmGwwtnTAkJ+52OZ3G4F0FMiGO\r\n/rATa2qu4upIjOby3VHgAok56JuREkVUY/h5EGBNTIcxA3H8iDVQgqJ5tciu\r\nTwgsmZyksEVaId7dVzxEw2svYuCCX/RtvJMlPgg/PGq6EikIv05wceWf68ym\r\n/ntx+PDMz6IBiSg9WtBFkbpEBwljJvylD9Arpj0ceY7swXJh3Wgxegvnfz71\r\n5NXyy50hXfxSW07T40HsuDAzSW00QE5KXbSnvq/viA9Xu9ci1A6F/CLvjPTg\r\n8kRXCLaxHf8neGd2SHz6zMdgw28gfJlot5yEWNyfPsU0ISyL7RhU5yODgRxS\r\n+Uz2dleuZh9kGtCpklwXxAFcpG8HmATyOCiABgOIH/W2nbwPWmaQKH8R4HQp\r\nJ8jPUmUg7ZZmJcfVo6dOIO6w2f/RfjTu3bsMnAZhUhqjR4abShsvDUos6uEG\r\nJKIWYleF6AV/vQO7aTyZCTH60A3+PCdIEMY=\r\n=7opi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":"./dist/index.js","gitHead":"af1c2db0e093507627338a6e562e0ed7c219b9ee","scripts":{"lint":"yarn lint:sol && yarn lint:js","test":"hardhat test","build":"yarn build:sol && yarn build:js","format":"prettier -w '**/*.{ts,js,json,md}'","lint:js":"npx eslint '**/*.{js,ts}' --fix","release":"semantic-release --debug","build:js":"tsc","lint:sol":"npx solhint 'contracts/**/*.sol' --fix","build:sol":"hardhat compile","prepublishOnly":"yarn test && yarn format && yarn lint"},"_npmUser":{"name":"uport-automation-bot","email":"devops@uport.me"},"repository":{"url":"git+ssh://git@github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"8.13.2","description":"A repository storing keys and other data about Ethereum Decentralized Identifiers (DIDs)","directories":{},"_nodeVersion":"14.20.1","dependencies":{},"typesVersions":{"*":{"*":["./dist/index.d.js"],"dist/index.d.ts":["dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","chai":"^4.3.6","dotenv":"^16.0.1","eslint":"^8.19.0","ethers":"^5.6.9","hardhat":"^2.9.9","solhint":"^3.3.7","ts-node":"^10.8.2","prettier":"^2.7.1","typechain":"^8.1.0","babel-jest":"28.1.2","typescript":"^4.7.4","@babel/core":"7.18.6","@types/chai":"^4.3.1","@types/node":"^18.0.3","uint8arrays":"^3.0.0","@types/mocha":"^9.1.1","ethereumjs-tx":"^2.1.2","eslint-plugin-n":"^15.2.4","ethereum-waffle":"^3.4.4","ethereumjs-util":"^7.1.5","chai-as-promised":"^7.1.1","semantic-release":"19.0.3","@babel/preset-env":"7.18.6","solidity-coverage":"^0.7.21","@typechain/hardhat":"^6.1.2","eslint-plugin-node":"^11.1.0","@typechain/ethers-v5":"^10.1.0","eslint-plugin-import":"^2.26.0","hardhat-gas-reporter":"^1.0.8","@semantic-release/git":"10.0.1","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.5.0","eslint-config-standard":"^17.0.0","eslint-plugin-prettier":"^4.2.1","@types/chai-as-promised":"^7.1.5","@babel/preset-typescript":"7.18.6","prettier-plugin-solidity":"^1.0.0-beta.13","@nomiclabs/hardhat-ethers":"^2.0.6","@nomiclabs/hardhat-waffle":"^2.0.3","@typescript-eslint/parser":"^5.30.5","@semantic-release/changelog":"6.0.1","@nomiclabs/hardhat-etherscan":"^3.1.0","@typescript-eslint/eslint-plugin":"^5.30.5"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_1.1.0_1665510536596_0.6273593235668","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"ethr-did-registry","version":"1.2.0","author":{"name":"Pelle Braendgaard"},"license":"MIT","_id":"ethr-did-registry@1.2.0","maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"contributors":[{"name":"Mircea Nistor","email":"mirceanis@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"7140b3f3a8358c24689c6223f1dffeff37ae88b2","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-1.2.0.tgz","fileCount":34,"integrity":"sha512-KmqvyQbJHoY8WGtYV5V33s7Ypl2KnH5N8pCYfldNt0yJsz1z2xHVKVXXavUhaRsCMqy0pUwRMJHpqlY3eSi2mQ==","signatures":[{"sig":"MEUCIQDLGa/ipac3qsGDwjPOdQLQW7+D+ay6cj3pxgqtCQeZoQIgVtalGUaGBM58EPeul5j0/ftrShIXNZBPqm5Lg/eQRGg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1442470},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":"./dist/index.js","gitHead":"c3abc60202ea0bdb88317a4eee5b5f3d58b58bee","scripts":{"lint":"yarn lint:sol && yarn lint:js","test":"hardhat test","build":"yarn build:sol && yarn build:js","format":"prettier -w '**/*.{ts,js,json,md}'","lint:js":"npx eslint '**/*.{js,ts}' --fix","release":"semantic-release --debug","build:js":"tsc","lint:sol":"npx solhint 'contracts/**/*.sol' --fix","build:sol":"hardhat compile","prepublishOnly":"yarn test && yarn format && yarn lint"},"_npmUser":{"name":"uport-automation-bot","email":"devops@uport.me"},"repository":{"url":"git+ssh://git@github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"8.13.2","description":"A repository storing keys and other data about Ethereum Decentralized Identifiers (DIDs)","directories":{},"_nodeVersion":"14.21.3","dependencies":{},"typesVersions":{"*":{"*":["./dist/index.d.js"],"dist/index.d.ts":["dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","chai":"^4.3.6","dotenv":"^16.0.1","eslint":"^8.19.0","ethers":"^5.6.9","hardhat":"^2.9.9","solhint":"^3.3.7","ts-node":"^10.8.2","prettier":"^2.7.1","typechain":"^8.1.0","babel-jest":"28.1.2","typescript":"^4.7.4","@babel/core":"7.18.6","@types/chai":"^4.3.1","@types/node":"^18.0.3","uint8arrays":"^3.0.0","@types/mocha":"^9.1.1","ethereumjs-tx":"^2.1.2","eslint-plugin-n":"^15.2.4","ethereum-waffle":"^3.4.4","ethereumjs-util":"^7.1.5","chai-as-promised":"^7.1.1","semantic-release":"19.0.3","@babel/preset-env":"7.18.6","solidity-coverage":"^0.7.21","@typechain/hardhat":"^6.1.2","eslint-plugin-node":"^11.1.0","@typechain/ethers-v5":"^10.1.0","eslint-plugin-import":"^2.26.0","hardhat-gas-reporter":"^1.0.8","@semantic-release/git":"10.0.1","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.5.0","eslint-config-standard":"^17.0.0","eslint-plugin-prettier":"^4.2.1","@types/chai-as-promised":"^7.1.5","@babel/preset-typescript":"7.18.6","prettier-plugin-solidity":"^1.0.0-beta.13","@nomiclabs/hardhat-ethers":"^2.0.6","@nomiclabs/hardhat-waffle":"^2.0.3","@typescript-eslint/parser":"^5.30.5","@semantic-release/changelog":"6.0.1","@nomiclabs/hardhat-etherscan":"^3.1.0","@typescript-eslint/eslint-plugin":"^5.30.5"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_1.2.0_1689169256802_0.3544631256918642","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"ethr-did-registry","version":"1.3.0","author":{"name":"Pelle Braendgaard"},"license":"MIT","_id":"ethr-did-registry@1.3.0","maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"contributors":[{"name":"Mircea Nistor","email":"mirceanis@gmail.com"}],"homepage":"https://github.com/uport-project/ethr-did-registry#readme","bugs":{"url":"https://github.com/uport-project/ethr-did-registry/issues"},"dist":{"shasum":"34af3057d4a589c97a422045eb8251d24e05151f","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-1.3.0.tgz","fileCount":34,"integrity":"sha512-q9BRbkVZwcIJ0hCXtEIHchqI62vp/MFuVKxKGLaQY4quD4Jpc+RQ+r0VBDd7kUWrHjwD1Lo02AhDx6WvJT4KUw==","signatures":[{"sig":"MEQCIG46HupZJbjpUKjBYgFLh9B50VIPmDpTrLsfCWXBw3RRAiA0gjvYN6IRorDw7obHdpMJQP2mT2AlKcVRDF5DR8CN7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1443459},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":"./dist/index.js","gitHead":"22b55e59d97549cd0682077fbfc34c457a40a982","scripts":{"lint":"yarn lint:sol && yarn lint:js","test":"hardhat test","build":"yarn build:sol && yarn build:js","format":"prettier -w '**/*.{ts,js,json,md}'","lint:js":"npx eslint '**/*.{js,ts}' --fix","release":"semantic-release --debug","build:js":"tsc","lint:sol":"npx solhint 'contracts/**/*.sol' --fix","build:sol":"hardhat compile","prepublishOnly":"yarn test && yarn format && yarn lint"},"_npmUser":{"name":"uport-automation-bot","email":"devops@uport.me"},"repository":{"url":"git+ssh://git@github.com/uport-project/ethr-did-registry.git","type":"git"},"_npmVersion":"8.13.2","description":"A repository storing keys and other data about Ethereum Decentralized Identifiers (DIDs)","directories":{},"_nodeVersion":"14.21.3","dependencies":{},"typesVersions":{"*":{"*":["./dist/index.d.js"],"dist/index.d.ts":["dist/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"ls":"^0.2.1","chai":"^4.3.6","dotenv":"^16.0.1","eslint":"^8.19.0","ethers":"^5.6.9","hardhat":"^2.9.9","solhint":"^3.3.7","ts-node":"^10.8.2","prettier":"^2.7.1","typechain":"^8.1.0","babel-jest":"28.1.2","typescript":"^4.7.4","@babel/core":"7.18.6","@types/chai":"^4.3.1","@types/node":"^18.0.3","uint8arrays":"^3.0.0","@types/mocha":"^9.1.1","ethereumjs-tx":"^2.1.2","eslint-plugin-n":"^15.2.4","ethereum-waffle":"^3.4.4","ethereumjs-util":"^7.1.5","chai-as-promised":"^7.1.1","semantic-release":"19.0.3","@babel/preset-env":"7.18.6","solidity-coverage":"^0.7.21","@typechain/hardhat":"^6.1.2","eslint-plugin-node":"^11.1.0","@typechain/ethers-v5":"^10.1.0","eslint-plugin-import":"^2.26.0","hardhat-gas-reporter":"^1.0.8","@semantic-release/git":"10.0.1","eslint-plugin-promise":"^6.0.0","eslint-config-prettier":"^8.5.0","eslint-config-standard":"^17.0.0","eslint-plugin-prettier":"^4.2.1","@types/chai-as-promised":"^7.1.5","@babel/preset-typescript":"7.18.6","prettier-plugin-solidity":"^1.0.0-beta.13","@nomiclabs/hardhat-ethers":"^2.0.6","@nomiclabs/hardhat-waffle":"^2.0.3","@typescript-eslint/parser":"^5.30.5","@semantic-release/changelog":"6.0.1","@nomiclabs/hardhat-etherscan":"^3.1.0","@typescript-eslint/eslint-plugin":"^5.30.5"},"_npmOperationalInternal":{"tmp":"tmp/ethr-did-registry_1.3.0_1723182874541_0.9453983968468651","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"ethr-did-registry","version":"2.0.0","description":"Ethereum contract for a registry of Decentralized Identifiers (DIDs) — the ERC-1056 contract anchoring did:ethr","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./artifacts/*":"./artifacts/*","./contracts/*":"./contracts/*","./typechain-types":{"types":"./dist/typechain-types/index.d.ts","default":"./dist/typechain-types/index.js"},"./typechain-types/*":{"types":"./dist/typechain-types/*.d.ts","default":"./dist/typechain-types/*.js"},"./package.json":"./package.json"},"repository":{"type":"git","url":"git+https://github.com/decentralized-identity/ethr-did-resolver.git","directory":"packages/ethr-did-registry"},"author":"Pelle Braendgaard","contributors":["Mircea Nistor <work@mirceanis.xyz>"],"license":"MIT","keywords":["did:ethr","DID","EIP1056","ERC1056","ERC-1056","ethereum","registry","smart-contract","solidity"],"devDependencies":{"@nomicfoundation/hardhat-ethers":"4.0.15","@nomicfoundation/hardhat-ethers-chai-matchers":"3.0.11","@nomicfoundation/hardhat-mocha":"3.1.0","@nomicfoundation/hardhat-typechain":"3.1.1","@types/chai":"5.2.3","@types/mocha":"10.0.10","@typescript-eslint/eslint-plugin":"8.67.0","@typescript-eslint/parser":"8.67.0","chai":"6.2.2","eslint":"10.8.1","eslint-config-prettier":"10.1.8","eslint-plugin-prettier":"5.5.6","ethers":"6.16.0","hardhat":"3.13.0","mocha":"11.8.0","prettier":"3.9.6","prettier-plugin-solidity":"2.4.1","solhint":"6.2.4","typescript":"6.0.3"},"scripts":{"build":"hardhat compile && tsc","test":"hardhat test","test:ci":"hardhat test --coverage","deploy:registry":"hardhat run scripts/deploy.ts --network deploy","clean":"rm -rf ./artifacts ./cache ./typechain-types ./dist ./lib.commonjs ./lib.esm","format":"prettier --write \"contracts/**/*.sol\" \"src/**/*.[jt]s\" \"scripts/**/*.[jt]s\"","lint":"solhint \"contracts/**/*.sol\" && eslint \"src/**/*.[jt]s\" \"scripts/**/*.[jt]s\""},"_nodeVersion":"24.19.0","_id":"ethr-did-registry@2.0.0","dist":{"integrity":"sha512-mhbfnaO61TE4cPKmtjS5oqqvvrXbiuTu3YPIb8hB0/6001iTatKc8HunKxjjwjjsISA6nHVjSRpZ/GrQuuaDgw==","shasum":"c4233d9d924c0ae2360ba442a531fee98b2a4b4e","tarball":"https://registry.npmjs.org/ethr-did-registry/-/ethr-did-registry-2.0.0.tgz","fileCount":33,"unpackedSize":494791,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ethr-did-registry@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCHLXASUDAU5d4x+dHqlWAEPTYWlNe6oNDeps0yDJ64xQIgX3Va0NVB1AyhgYopEekzkBtmGBh+wHQlRpfmq9pIUCs="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:47dae294-42db-4620-ac16-5e18f8f7a7b7"}},"directories":{},"maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ethr-did-registry_2.0.0_1786709942475_0.14221626239295837"},"_hasShrinkwrap":false}},"time":{"created":"2018-03-31T14:09:53.423Z","modified":"2026-08-14T12:19:02.983Z","0.0.1":"2018-03-31T14:09:53.559Z","0.0.2":"2018-03-31T22:26:26.565Z","0.0.3":"2018-06-15T01:26:28.821Z","1.0.0":"2022-07-07T12:19:45.788Z","1.0.1":"2022-08-25T00:47:15.208Z","1.1.0":"2022-10-11T17:48:56.789Z","1.2.0":"2023-07-12T13:40:57.081Z","1.3.0":"2024-08-09T05:54:34.727Z","2.0.0":"2026-08-14T12:19:02.650Z"},"author":"Pelle Braendgaard","license":"MIT","repository":{"type":"git","url":"git+https://github.com/decentralized-identity/ethr-did-resolver.git","directory":"packages/ethr-did-registry"},"description":"Ethereum contract for a registry of Decentralized Identifiers (DIDs) — the ERC-1056 contract anchoring did:ethr","contributors":["Mircea Nistor <work@mirceanis.xyz>"],"maintainers":[{"name":"simonas-notcat","email":"simonas@not.cat"},{"name":"mirceanis","email":"mirceanis@gmail.com"},{"name":"uport-automation-bot","email":"devops@uport.me"},{"name":"pelleb","email":"pelleb@gmail.com"}],"readme":"# Ethereum DID Registry\n\nThis package contains the Ethereum contract code that allows the owner of an\nethr-did identity to update the attributes that appear in its DID document. It\nexposes an API that allows developers to call the contract functions using\nJavaScript, and it ships the compiled artifacts and typed bindings to deploy\nthe contract to another Ethereum network or interact with a deployed instance.\n\nA DID is an [Identifier](https://w3c.github.io/did-core/#a-simple-example) that\nallows you to look up a [DID document](https://w3c.github.io/did-core/#example-a-simple-did-document)\nthat can be used to authenticate you and messages created by you.\n\nIt is designed for resolving public keys for off-chain authentication — where\nthe public key resolution is handled by using decentralized technology.\n\nThis contract allows Ethereum addresses to present signing information about\nthemselves with no prior registration. It allows them to perform key rotation\nand to specify different keys and services that are used on their behalf for\nboth on-chain and off-chain usage. It is the contract anchoring `did:ethr`\nDIDs (see the [did method spec](../../doc/did-method-spec.md)).\n\n## Contract Deployments\n\nThe canonical list of known registry deployments — one record per network\n(chain ID, registry address, network name) — is maintained in the resolver\npackage, not here:\n\n- `packages/ethr-did-resolver/src/config/deployments.ts`\n\nDeployments are intentionally resolver-owned: this package refers to the list but never writes or publishes it. New\ndeployments are added there via a reviewable PR; the deploy flow below prints everything needed to record one.\n\n## Using the Registry\n\nThe DID Registry can be used from JavaScript as well as directly from other\ncontracts.\n\n### Imports\n\nThe package is ESM (`\"type\": \"module\"`) and exposes three entry points, all\nverified to work:\n\n**1. Root import — the compiled artifact (value)**\n\n```ts\nimport { EthereumDIDRegistry } from 'ethr-did-registry'\n```\n\nThis is the legacy-compatible root export: a plain JavaScript object with the\nHardhat artifact shape (`abi`, `bytecode`, `deployedBytecode`, …). Pass\n`EthereumDIDRegistry.abi` to `new ethers.Contract(address, ...)`.\n\n**2. Typed import — the generated contract types (types)**\n\n```ts\nimport type { EthereumDIDRegistry } from 'ethr-did-registry'\n```\n\nThe generated TypeChain interface (ethers v6 target), usable in type\nannotations. It deliberately shares its name with the artifact export — the\nartifact occupies the value slot, the generated interface occupies the type\nslot, so `import` gives the artifact and `import type` gives the typed\ncontract:\n\n```ts\nimport { EthereumDIDRegistry, EthereumDIDRegistry__factory } from 'ethr-did-registry'\nimport type { EthereumDIDRegistry as TypedRegistry } from 'ethr-did-registry'\n\nconst registry: TypedRegistry = EthereumDIDRegistry__factory.connect(address, signer)\n```\n\n`EthereumDIDRegistry__factory` is the generated typed factory for deploying or\nconnecting a typed contract instance.\n\n**3. Deep artifact import — the raw JSON artifact**\n\n```ts\nimport artifact from 'ethr-did-registry/artifacts/contracts/EthereumDIDRegistry.sol/EthereumDIDRegistry.json' with { type: 'json' }\n```\n\nThe unmodified Hardhat artifact JSON, useful when you need the raw file (e.g.\nfor tooling that consumes artifacts directly). The ABI it contains is identical\nto the root import's; only the module instance differs.\n\nThe generated typechain surface is also reachable as a deep import\n(`ethr-did-registry/typechain-types`) when you want the raw generated exports\n(contract type, factory, typed event namespaces) without the root entry's\nvalue/type disambiguation.\n\n### Example\n\nUse [`ethers.js`](https://github.com/ethers-io/ethers.js/) (v6) with the\nartifact from the root import:\n\n```ts\nimport { ethers } from 'ethers'\nimport { EthereumDIDRegistry } from 'ethr-did-registry'\n\nconst DidReg = new ethers.Contract(registryAddress, EthereumDIDRegistry.abi)\nDidReg.connect(yourSignerOrProvider)\n```\n\n## On-chain vs. Off-chain\n\nFor on-chain interactions, Ethereum has a built-in account abstraction that can\nbe used regardless of whether the account is a smart contract or a key pair.\nAny transaction has a `msg.sender` as the verified sender of the transaction.\n\nSince each Ethereum transaction must be funded, there is a growing trend of\non-chain transactions that are authenticated via an externally created\nsignature and not by the actual transaction originator. This allows for\nthird-party funding services, or for receivers to pay without any fundamental\nchanges to the underlying Ethereum architecture.\n\nThese kinds of transactions have to be signed by an actual key pair and thus\ncannot be used to represent smart-contract-based Ethereum accounts.\n\nWe propose a way of a smart contract or regular key pair delegating signing for\nvarious purposes to externally managed key pairs. This allows a smart contract\nto be represented, both on-chain as well as off-chain or in payment channels,\nthrough temporary or permanent delegates.\n\n## Identity Identifier\n\nAny Ethereum account, regardless of whether it is key-pair- or smart-contract-\nbased, is considered to be an account identifier.\n\nAn identity needs no registration.\n\n## Identity Ownership\n\nEach identity has a single address which maintains ultimate control over it. By\ndefault, each identity is controlled by itself. As ongoing technological and\nsecurity improvements occur, an owner can replace themselves with any other\nEthereum address, such as an advanced multi-signature contract.\n\nThere is only ever a single identity owner. More advanced ownership models are\nmanaged through a multi-signature contract.\n\n### Looking up Identity Ownership\n\nOwnership of an identity is verified by calling the\n`identityOwner(address identity) public view returns (address)` function. This\nreturns the address of the current identity owner.\n\n### Changing Identity Ownership\n\nThe account owner can replace themselves at any time by calling the\n`changeOwner(address identity, address newOwner)` function.\n\nThere is also a version of this function which is called with an externally\ncreated signature, passed to a transaction funding service.\n\nThe externally signed version has the following\nsignature: `changeOwnerSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, address newOwner)`.\n\nThe signature should be of the keccak256 hash of the following tightly packed\nparameters:\n\n`byte(0x19), byte(0), address of registry, nonce[currentOwner], identity, \"changeOwner\", newOwner`\n\n## Delegates\n\nDelegates are addresses that are delegated for a specific time to perform a\nfunction on behalf of an identity.\n\nThey can be accessed both on-chain and off-chain.\n\n### Delegate Types\n\nThe type of function is simply a string, determined by a protocol or\napplication higher up.\n\nExamples:\n\n- `'DID-JWT'`\n- `'Raiden'`\n\n### Validity\n\nDelegates expire. The expiration time is application-specific and dependent on\nthe security requirements of the identity owner.\n\nValidity is set using the number of seconds from the time that the delegate is\nadded.\n\n### Looking up a Delegate\n\nYou can check whether an address is a delegate for an identity using the\n`validDelegate(address identity, bytes32 delegateType, address delegate) returns (bool)`\nfunction. This returns `true` if the address is a valid delegate of the given\n`delegateType`.\n\n### Adding a Delegate\n\nAn identity can assign multiple delegates to manage signing on its behalf for\nspecific purposes.\n\nThe account owner can call the\n`addDelegate(address identity, bytes32 delegateType, address delegate, uint validity)`\nfunction.\n\nThere is also a version of this function which is called with an externally\ncreated signature, passed to a transaction funding service.\n\nThe externally signed version has the following\nsignature: `addDelegateSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes32 delegateType, address delegate, uint validity)`.\n\nThe signature should be of the keccak256 hash of the following tightly packed\nparameters:\n\n`byte(0x19), byte(0), address of registry, nonce[currentOwner], identity, \"addDelegate\", delegateType, delegate, validity`\n\n### Revoking a Delegate\n\nA delegate may be manually revoked by calling the\n`revokeDelegate(address identity, bytes32 delegateType, address delegate)`\nfunction.\n\nThere is also a version of this function which is called with an externally\ncreated signature, passed to a transaction funding service.\n\nThe externally signed version has the following\nsignature: `revokeDelegateSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes32 delegateType, address delegate)`.\n\nThe signature should be of the keccak256 hash of the following tightly packed\nparameters:\n\n`byte(0x19), byte(0), address of registry, nonce[currentOwner], identity, \"revokeDelegate\", delegateType, delegate`\n\n### Enumerating Delegates Off-chain\n\nAttributes are stored as `DIDDelegateChanged` events. A `validTo` of 0\nindicates a revoked delegate.\n\n```solidity\nevent DIDDelegateChanged(\n    address indexed identity,\n    bytes32 delegateType,\n    address delegate,\n    uint validTo,\n    uint previousChange\n);\n```\n\n## Adding Off-chain Attributes\n\nAn identity may need to publish information that is only needed off-chain but\nstill requires the security benefits of using a blockchain.\n\n### Setting Attributes\n\nThese attributes are set using the\n`setAttribute(address identity, bytes32 name, bytes value, uint validity)`\nfunction and published using events.\n\nThere is also a version of this function that is called with an externally\ncreated signature, passed to a transaction funding service.\n\nThe externally signed version has the following\nsignature: `setAttributeSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes32 name, bytes value, uint validity)`.\n\nThe signature should be of the keccak256 hash of the following tightly packed\nparameters:\n\n`byte(0x19), byte(0), address of registry, nonce[currentOwner], identity, \"setAttribute\", name, value, validity`\n\n### Revoking Attributes\n\nThese attributes are revoked using the\n`revokeAttribute(address identity, bytes32 name, bytes value)` function and\npublished using events.\n\nThere is also a version of this function that is called with an externally\ncreated signature, passed to a transaction funding service.\n\nThe externally signed version has the following\nsignature: `revokeAttributeSigned(address identity, uint8 sigV, bytes32 sigR, bytes32 sigS, bytes32 name, bytes value)`.\n\nThe signature should be of the keccak256 hash of the following tightly packed\nparameters:\n\n`byte(0x19), byte(0), address of registry, nonce[currentOwner], identity, \"revokeAttribute\", name, value`\n\n### Reading Attributes\n\nAttributes are stored as `DIDAttributeChanged` events. A `validTo` of 0\nindicates a revoked attribute.\n\n```solidity\nevent DIDAttributeChanged(\n    address indexed identity,\n    bytes32 name,\n    bytes value,\n    uint validTo,\n    uint previousChange\n);\n```\n\n### Delegate Types and Attribute Names Encoding\n\nFor gas cost reasons, the names of attributes and types of delegates are fixed\nsize `bytes32` values. In most situations, this is not a problem since most can\nbe represented by strings shorter than 32 bytes. To get a `bytes32` value from\nthem, the recommended approach is to use the byte array representation of your\nstring and right-pad it to 32 bytes.\n\n## Enumerating Linked Identity Events\n\nContract events are a useful feature for storing data from smart contracts\nexclusively for off-chain use. Unfortunately, current Ethereum implementations\nprovide a very inefficient lookup mechanism.\n\nBy using linked events that always link to the previous block with a change to\nthe identity, we can solve this problem with improved performance.\n\nEach identity has its previously changed block stored in the `changed` mapping.\n\n1. Look up the `previousChange` block for the identity\n2. Look up all events for a given identity address, but only for the `previousChange` block\n3. Do something with the event\n4. Find `previousChange` from the event and repeat\n\nExample code (ethers v6):\n\n```js\nconst history = []\nlet prevChange = await DidReg.changed(identityAddress)\nwhile (prevChange) {\n  const logs = await ethers.provider.getLogs({\n    topics: [null, `0x000000000000000000000000${identityAddress}`],\n    fromBlock: prevChange,\n    toBlock: prevChange,\n  })\n  prevChange = 0n\n  for (const log of logs) {\n    const logDescription = DidReg.interface.parseLog(log)\n    history.unshift(logDescription)\n    prevChange = logDescription.args.previousChange\n  }\n}\n```\n\n## Assemble a DID Document\n\nThe full spec describing how to interact with this registry to build a DID\ndocument can be found in the\n[did method spec](../../doc/did-method-spec.md).\n\nIn short, you would do something like this:\n\nThe primary owner key should be looked up using `identityOwner(identity)`. This\nshould be the first of the public keys listed.\n\nIterate through the `DIDDelegateChanged` events to build a list of additional\nkeys and authentication sections as needed. The list of delegate types to\ninclude is still to be determined.\n\nIterate through `DIDAttributeChanged` events for service entries, encrypted\npublic keys, and other public names. The attribute names are still to be\ndetermined.\n\n## Deploying the Contract\n\nThe package ships a plain deploy script that deploys the compiled artifact to\nany network and prints a complete **source-verification record** — the audit\ntrail of the deployment. See `docs/deploy.md` in this package for the full\nrunbook; the essentials:\n\n### Requirements\n\n- Node.js and pnpm (the monorepo toolchain)\n- An RPC endpoint for the target network\n- A funded account to pay for the deployment\n\n### One-time setup\n\n```sh\ncd packages/ethr-did-registry\ncp .env.example .env\n```\n\nFill in `.env` (gitignored — key material never enters the repository):\n\n| Variable             | Required | Meaning                                                      |\n|----------------------|----------|--------------------------------------------------------------|\n| `DEPLOY_RPC_URL`     | yes      | JSON-RPC endpoint of the network to deploy to.               |\n| `DEPLOY_PRIVATE_KEY` | no*      | Deploying account's private key (hex, `0x` prefix optional). |\n| `DEPLOY_CHAIN_ID`    | no       | Override the chain ID reported by the RPC endpoint.          |\n\n\\* When `DEPLOY_PRIVATE_KEY` is omitted, the RPC node's own accounts are used\n(via `eth_accounts`) — fine for a local `hardhat node`, not for public RPCs.\n\n### Deploying\n\n```sh\npnpm run deploy:registry   # == hardhat run scripts/deploy.ts --network deploy\n```\n\nThe `deploy` network is registered in `hardhat.config.ts` only when\n`DEPLOY_RPC_URL` is set. Running the script against the in-memory `hardhat`\nnetwork is refused: the deployment would vanish.\n\n> Note: the script is named `deploy:registry` because `pnpm deploy` is a\n> built-in pnpm command; `pnpm run deploy:registry` always works.\n\n### The verification record\n\nThe script prints a source-verification record — everything a block explorer\nneeds to source-verify the deployment, doubling as the audit trail that it\nhappened:\n\n- `contract` — the deployed contract address\n- `tx hash` — the deployment transaction hash\n- `chainId` — the network's chain ID (queried from the RPC endpoint)\n- `solc` — the exact compiler version used, read from the Hardhat build-info\n- `optimizer` — enabled/disabled and runs\n- `viaIR`, `evmVersion` — only when set\n- `source hash` — `keccak256` of the contract source file bytes\n- `license` — the SPDX identifier from the contract source\n- `bytecode` — integrity check that on-chain code matches the artifact\n\n### Hand-off: recording the deployment\n\n**This package does not own or publish deployments.** The canonical deployments\nlist lives in the resolver package\n(`packages/ethr-did-resolver/src/config/deployments.ts`), which this package\nnever writes. After a successful deployment:\n\n1. Open a PR against `packages/ethr-did-resolver/src/config/deployments.ts`\n   adding the new network, e.g.:\n\n   ```ts\n   { chainId: 11155111, registry: '0x…', name: '…', legacyNonce: false },\n   ```\n\n2. Paste the JSON verification record printed by the script into the PR\n   description as the audit trail.\n\nThe deploy script prints these hand-off instructions — the PR is the reviewable\nstep that records the deployment.\n\n## Development\n\nThe package is a member of the pnpm workspace at the monorepo root. From this\npackage directory (or from the root with `--filter ethr-did-registry`):\n\n| Command               | What it does                                                                   |\n|-----------------------|--------------------------------------------------------------------------------|\n| `pnpm install`        | Install dependencies (run once from the monorepo root).                        |\n| `pnpm build`          | Compile contracts (`hardhat compile`) and the TS entry (`tsc`).                |\n| `pnpm test`           | Compile contracts and run the hardhat suite against a local EDR network. |\n| `pnpm run test:ci`    | Same as `pnpm test`, with coverage (`--coverage`).                             |\n| `pnpm lint`           | `solhint` on contracts, `eslint` on TS sources and scripts.                    |\n| `pnpm format`         | `prettier` (with the solidity plugin) on contracts and TS sources.             |\n| `pnpm clean`          | Remove generated artifacts, caches, typechain types and dist output.           |\n\n## License\n\nMIT — see `LICENSE` in this package.\n","readmeFilename":"","keywords":["did:ethr","DID","EIP1056","ERC1056","ERC-1056","ethereum","registry","smart-contract","solidity"]}