{"_id":"@conflux-/aragon-id","_rev":"8-4b8c5d879b4aeb5a485d3a3ffb3d8607","name":"@conflux-/aragon-id","dist-tags":{"latest":"2.0.6"},"versions":{"2.0.3":{"name":"@conflux-/aragon-id","version":"2.0.3","description":"Verifiably safe ENS registrations.","scripts":{"compile":"cfxtruffle compile --verbose","coverage":"cross-env SOLIDITY_COVERAGE=true ./test.sh","develop":"truffle develop","lint":"solium --dir contracts","migrate":"truffle migrate","test":"./test.sh","deploy:devnet":"cfxtruffle compile --all --verbose; cfxtruffle exec --network cfx-development  scripts/deploy-beta-aragonid.js --verbose","prepublishOnly":"cfxtruffle compile --all --verbose"},"author":{"name":"Aragon Institution MTU","email":"contact@aragon.one"},"contributors":[{"name":"Brett Sun","email":"brett@aragon.one"},{"name":"Jorge Izquierdo","email":"jorge@aragon.one"}],"devDependencies":{"babel-polyfill":"^6.26.0","babel-preset-env":"^1.6.1","babel-register":"^6.26.0","coveralls":"^3.0.0","cross-env":"^5.1.1","eslint":"^4.11.0","eslint-config-standard":"^10.2.1","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^5.2.1","eslint-plugin-promise":"^3.6.0","eslint-plugin-standard":"^3.0.1","eth-ens-namehash":"^2.0.0","ethereumjs-testrpc":"^6.0.1","homedir":"^0.6.0","js-sha3":"^0.7.0","solidity-coverage":"^0.5.8","solium":"^1.1.8","truffle":"4.1.14","truffle-hdwallet-provider":"0.0.3"},"dependencies":{"@conflux-/aragon-os":"^4.4.0","@aragon/truffle-config-v4":"^1.0.1"},"gitHead":"eebf66a566f9da3998b4e741d90af3c92d8cf62c","_id":"@conflux-/aragon-id@2.0.3","_nodeVersion":"14.16.0","_npmVersion":"7.9.0","dist":{"integrity":"sha512-nbAzI7iJ9FedET8cLl3sU2h+vvTdqzHJH6VLy9a7YoB9dBCEbN1m8tyuHDSlrkO/PdoSJ9+ReWXz3Kbu7HAthg==","shasum":"11f7ddc5cb7e329c9830a60ee96b7b4cf4e3ee23","tarball":"https://registry.npmjs.org/@conflux-/aragon-id/-/aragon-id-2.0.3.tgz","fileCount":46,"unpackedSize":6750476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggBHcCRA9TVsSAnZWagAAzH8P/0zf0YDYaNk4tltY+NhA\nQ219ZjxHIAoZDiZynXPVxjPFPrXvkaou58DcaLfJHETceI+z3Mbbw5nLGjAc\nPV7mgJYHrRqJrzG2lVG8Rvv8CKRmdgdFrrBrCKwd2E1dreC2GeKeuGgxd0SY\njuLXz+R5weUH9KcOPRUEBDql3rRGRp6R7kjPXhLoGvdLByeZ2t08rVH/rQ57\n32DjTQKo1Dfp+A4HhsLZUD26zaWcVMXJOeQ1IAWBZB9FpLiAY7TSjmFEVNf2\nmGh1ppsmXg5jG5XOzno2G4lekZjQWq4WqqLwmuLNNUJf21LXACB5prpx2/1p\n4+bi5+PWdiWFW2AtioO1DXpXpvle2nPhCFKWYOJpW4iLyE36TNc7aEHDGQyG\nXNpKoyOCtIskKUMEsxSjsS7Nu0OBmb9tk5wfRxjkiLsQFG1vUSRjvc2xp6w2\nCoBa7yFgsfjcAqYeAIwH5mKxCaddStMDm6AmBzB3lHO9oYKzP58Z83is5C7s\nWOSVJVu6ps7VeUsJkpR2ztnBu5Gkqf04bMAF7aoxgqaf8+LuLBcWV8Aifynh\nOlXRqB0NLvNro+rlehB43bzSXJMcgOvPGGtSZAm8hAa3ePY/Qwu1P44gqorE\nC8dIbHBYxe5My9PdIZOAKiAlAl6jTydEmiu1rlW8XPMa6SSLpccespSNMXIq\nXXtL\r\n=BjXb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDSx5t0/K71qhSlIpXnOpPC7EYgd6I3WXGhVFQlEiaTaAIhAIqTsPqvRO0LOb1RwJrCaCqQn6Fl0viKx8T2W5lRDO1F"}]},"_npmUser":{"name":"esraajbara","email":"jbesraa@gmail.com"},"directories":{},"maintainers":[{"name":"esraajbara","email":"jbesraa@gmail.com"},{"name":"sgerske","email":"sebastian.gerske@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aragon-id_2.0.3_1619005916070_0.19380698751378778"},"_hasShrinkwrap":false},"2.0.4":{"name":"@conflux-/aragon-id","version":"2.0.4","description":"Verifiably safe ENS registrations.","scripts":{"compile":"cfxtruffle compile --verbose","coverage":"cross-env SOLIDITY_COVERAGE=true ./test.sh","develop":"truffle develop","lint":"solium --dir contracts","migrate":"truffle migrate","test":"./test.sh","deploy:devnet":"cfxtruffle compile --all --verbose; cfxtruffle exec --network cfx-development  scripts/deploy-beta-aragonid.js --verbose","prepublishOnly":"cfxtruffle compile --all --verbose"},"author":{"name":"Aragon Institution MTU","email":"contact@aragon.one"},"contributors":[{"name":"Brett Sun","email":"brett@aragon.one"},{"name":"Jorge Izquierdo","email":"jorge@aragon.one"}],"devDependencies":{"babel-polyfill":"^6.26.0","babel-preset-env":"^1.6.1","babel-register":"^6.26.0","coveralls":"^3.0.0","cross-env":"^5.1.1","eslint":"^4.11.0","eslint-config-standard":"^10.2.1","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^5.2.1","eslint-plugin-promise":"^3.6.0","eslint-plugin-standard":"^3.0.1","eth-ens-namehash":"^2.0.0","ethereumjs-testrpc":"^6.0.1","homedir":"^0.6.0","js-sha3":"^0.7.0","solidity-coverage":"^0.5.8","solium":"^1.1.8","truffle":"4.1.14","truffle-hdwallet-provider":"0.0.3"},"dependencies":{"@conflux-/aragon-os":"^4.4.1","@aragon/truffle-config-v4":"^1.0.1"},"gitHead":"8c5faa6c9d3a532e9e168fb4e1051ca40e083777","_id":"@conflux-/aragon-id@2.0.4","_nodeVersion":"14.16.0","_npmVersion":"7.9.0","dist":{"integrity":"sha512-JYwMPXD3LQZvfFZHbyWxcjxgbl7wpvRxZQcciHz0shGn3fnA5/ryNuLEhN+/PTxuGiknT/H7vsJCYtcwJFJbOw==","shasum":"6aaecfe14f28cc7170352081dae2fd4d53b52857","tarball":"https://registry.npmjs.org/@conflux-/aragon-id/-/aragon-id-2.0.4.tgz","fileCount":46,"unpackedSize":6750476,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggqCzCRA9TVsSAnZWagAAbZIQAI+kwGcRaYUE+LrySmIi\nVNiEDWKvxR2L7xsPueMWR0IJk/820maM44XevRLb3ga+q1c6pclNwvWp0pWK\nrBfOYwPbgqkv8LOVP2+HQLVKpdCHnkZr9bGpR6SmLN54BzNbKKWONzUbF0+6\nCNA8c1CkV2aoyyvZNFwcGsWgjoYRhRaUMbGgOvj/HFmIieGSNHWIFVYy/jfI\nAL/2JP04G9FYq020r13njvW3gBJd6aDChcBPiqv5iAxso3xQKy846BC/8xj8\n6hgrOBsz2aKbomh6YC6cO05cwBBboUjAhUeNKbyAkI/4HzizlFLnIfHGa3qI\n5/rDA4JwWc/S4MGVsE3EDmPObTSWbKwcCMvHxRW6OPQrc9X+tl1A8mQJvxg+\nN7DdJuES0YOr5Gdbu+NYo5MrtH8jiYhlcFbVLJoKc4quoFo7sUTRTlnosGy0\nyH5WHDn1aryatyyxooo+hz2gqcHWanJihdI5N+0e50/+UxQKv6AYb5Fiwnzs\nXBWr0QKDOG945qJ+ua+53h9nT767mzi8ZEbP+pyTdsnJZyfWD9q4tuA+wi+G\nU172KgIxRTwfBupzInNzcV91KRUfjpirJr3sUQVB0qQyBld7rbeXIuCmdUk9\n7yjgLhYSv8rcCndSzjKhqnU6e26qbCRKehb5ThVZ6mHYwkidvUDACnQueeqz\nLAZF\r\n=akcb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKk7RBU8i6HboIFLI1LPGhDwyeOquRkzT2OSygsIzerwIhAKq6cscTp52eceXlKuKkSWY1zrhWTkjaUxN3eM+174nz"}]},"_npmUser":{"name":"esraajbara","email":"jbesraa@gmail.com"},"directories":{},"maintainers":[{"name":"esraajbara","email":"jbesraa@gmail.com"},{"name":"sgerske","email":"sebastian.gerske@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aragon-id_2.0.4_1619173553031_0.92772288050738"},"_hasShrinkwrap":false},"2.0.5":{"name":"@conflux-/aragon-id","version":"2.0.5","description":"Verifiably safe ENS registrations.","scripts":{"compile":"cfxtruffle compile --verbose","coverage":"cross-env SOLIDITY_COVERAGE=true ./test.sh","develop":"truffle develop","lint":"solium --dir contracts","migrate":"truffle migrate","test":"./test.sh","deploy:devnet":"cfxtruffle compile --all --verbose; cfxtruffle exec --network cfx-development  scripts/deploy-beta-aragonid.js --verbose","prepublishOnly":"cfxtruffle compile --all --verbose"},"author":{"name":"Aragon Institution MTU","email":"contact@aragon.one"},"contributors":[{"name":"Brett Sun","email":"brett@aragon.one"},{"name":"Jorge Izquierdo","email":"jorge@aragon.one"}],"devDependencies":{"babel-polyfill":"^6.26.0","babel-preset-env":"^1.6.1","babel-register":"^6.26.0","coveralls":"^3.0.0","cross-env":"^5.1.1","eslint":"^4.11.0","eslint-config-standard":"^10.2.1","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^5.2.1","eslint-plugin-promise":"^3.6.0","eslint-plugin-standard":"^3.0.1","eth-ens-namehash":"^2.0.0","ethereumjs-testrpc":"^6.0.1","homedir":"^0.6.0","js-sha3":"^0.7.0","solidity-coverage":"^0.5.8","solium":"^1.1.8","truffle":"4.1.14","truffle-hdwallet-provider":"0.0.3"},"dependencies":{"@aragon/truffle-config-v4":"^1.0.1","@conflux-/aragon-os":"4.4.2","dotenv":"^8.2.0"},"gitHead":"46fee4204c12796ddfeedd2510eff1fa4e25cf8a","_id":"@conflux-/aragon-id@2.0.5","_nodeVersion":"12.22.1","_npmVersion":"7.10.0","dist":{"integrity":"sha512-w1p5Lr0ZbYAyZM999siEt83C+9vHuej6UHu7n37Xys6IbRE4s9lQIp7+YvdvT+sVhhJSTzfJdICcnXphug/oFw==","shasum":"2b269c9d2be3e650c95605e35b0474f2aace13a4","tarball":"https://registry.npmjs.org/@conflux-/aragon-id/-/aragon-id-2.0.5.tgz","fileCount":47,"unpackedSize":6753023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkpCMCRA9TVsSAnZWagAA0B8P/iM+2M/ZWnj1sEnlxAq1\nN/5oCnPSGkx2AFIiD9dleU3lFT0FLGJw1QfMoRGc2X/UHw83o+FgbZUklp6R\n8a4AnEWN3R+yMeCZag/jgeKdYvQP1vFLWjSQk6M/i57BHyq2PENEzerWrugK\nCbHYGATUHKRjIT9WNx4mxPH4POzEQ1VVP6nrptlURuCywRVXHtWe/ioc3eRw\nbgXLexJs/pc55YmcacVoCJx2P+JMn90aaiHRfxxfBwmFGtoAi307/Nh0LgIg\nyxr0c8hzEDg3HXn5SjuxixJS2CPY/MmBb8GLwLk8IJGZ7+lxussjGuFbbz35\nyxSR+8KEMpc8bJVc+KIGFHc2FCS+7iJkAUSEeMoFP/EgDTgJ29MyB0xcu5YF\nkmROZ+0WuUGgN9iAmIRmGoEbs4l/o07/vAIHCOBr02RAl9RXe813aXebg1DC\nrdh7RRHFA5g0xA/JkppDy/jfbh0m3ZyhYsi+CrQYpHXfBDHzNYDrDyhxxi4/\nYQ0W4mzF5t5w+6q5dDrzDthusTxj9FN/jEcOYgk478pQ8Faa/b90jZ+fR0jS\n3BGiUIOM+tHRnVHDv0xPtN+cVykoz5sbs7uuRyCodgh61IRz4b+9MZOJqocD\nXVGkxru4/x9Ed4rRVb73KOBlWnAQkd+B9S1i6OsA1H80XjGRnP7JPNLegJOe\nu4Cz\r\n=I9Bj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEDR4t/fWT5HYHSt19kVsLKprFX/fvqFGzj+mMCqbE8dAiEAxGqEWa6AgCnsK/5HeqE4VW+2sfdC7Tl5oAJIYDcKgQM="}]},"_npmUser":{"name":"sgerske","email":"sebastian.gerske@gmail.com"},"directories":{},"maintainers":[{"name":"esraajbara","email":"jbesraa@gmail.com"},{"name":"sgerske","email":"sebastian.gerske@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aragon-id_2.0.5_1620217995688_0.20558757468601674"},"_hasShrinkwrap":false},"2.0.6":{"name":"@conflux-/aragon-id","version":"2.0.6","description":"Verifiably safe ENS registrations.","scripts":{"compile":"cfxtruffle compile --verbose","coverage":"cross-env SOLIDITY_COVERAGE=true ./test.sh","develop":"truffle develop","lint":"solium --dir contracts","migrate":"truffle migrate","test":"./test.sh","deploy:devnet":"cfxtruffle compile --all --verbose; cfxtruffle exec --network cfx-development  scripts/deploy-beta-aragonid.js --verbose","prepublishOnly":"cfxtruffle compile --all --verbose"},"author":{"name":"Aragon Institution MTU","email":"contact@aragon.one"},"contributors":[{"name":"Brett Sun","email":"brett@aragon.one"},{"name":"Jorge Izquierdo","email":"jorge@aragon.one"}],"devDependencies":{"babel-polyfill":"^6.26.0","babel-preset-env":"^1.6.1","babel-register":"^6.26.0","coveralls":"^3.0.0","cross-env":"^5.1.1","eslint":"^4.11.0","eslint-config-standard":"^10.2.1","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^5.2.1","eslint-plugin-promise":"^3.6.0","eslint-plugin-standard":"^3.0.1","eth-ens-namehash":"^2.0.0","ethereumjs-testrpc":"^6.0.1","homedir":"^0.6.0","js-sha3":"^0.7.0","solidity-coverage":"^0.5.8","solium":"^1.1.8","truffle":"4.1.14","truffle-hdwallet-provider":"0.0.3"},"dependencies":{"@aragon/truffle-config-v4":"^1.0.1","@conflux-/aragon-os":"4.4.4","dotenv":"^8.2.0"},"gitHead":"1bc72052709cec71bfdf27bb7c5730167df6bdb3","_id":"@conflux-/aragon-id@2.0.6","_nodeVersion":"12.22.1","_npmVersion":"7.10.0","dist":{"integrity":"sha512-QlJhi9goh/gfWNRljjB+WnOd3hUdvsgUZZWd7M259cMXjr+eqgck1U+yMkR56fPaL9XM+5XbqdXksHxAK7xz2w==","shasum":"b7cd2b79b3a6c47c9dd62e70d55b5f12224d5285","tarball":"https://registry.npmjs.org/@conflux-/aragon-id/-/aragon-id-2.0.6.tgz","fileCount":47,"unpackedSize":6753023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgk64iCRA9TVsSAnZWagAA/BEP/j8PiBIOCcF9KVitVACk\nmgwlsOEesm03eCVInTbAfDUQtVwD656BRaiH2ANHYPt59A+VrjTFHbG1vSpO\n2eTea5xW/WPFhaQtMi0xTsdA0dNIgRjgqyFm/LpsCQHE8s6SeWDKa1YrsIO6\neJBx/XbjL0zJwUiYT9z7jHRW3tB1K6mR8ErwGVi7wgFzx4+kcTNSsTZvlF4C\nan2PWo744H234xFnUP1PZI+dQY221dJAyCPtWIsUpiPhsKKzeJaDIGpU1W0N\ns6cp9yItyTw+GfWfFA2qvb21W6KTqLs5xux13ZIVaV+R9pWFBGcVQ0jlG7rh\nNOAisXrn8Eweo2uYhW2ukb2q2BG3kD/59oPf77FZu12f8itOUrI+swDKEtGM\new1Gs9PIxwTDMAfRKtKd41gZ42NqsyQ3MqbnN1HDdYn6DjBmmH/aNjW7/8Ei\nmYOEZseGH2gYUILObZDieVL8OTfSfaqp17haaMhcZJIUkxl2u2AbeFYCpH3c\nAbE9gMkX/Bcu20L4J8mCU9LtKKrPLRHyqQbOKfkf0Q7Eo2V0QebSwYI0ZePI\nP2BSuBCvVcs9s+UBMCX7dXypLAAzFvpi0Zn2qM1OPD1g+t9AxDggddtpcbUY\nv8KHeIOFbi2MSFLUo3UOIM+UAWBWgzLJwJYDTM1S3r4WYrOf+WTx9FyZyXoQ\nNhvE\r\n=MGJQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFDubUWldb1xfJvp7F///jg0ovk+fker5XxZ+bm95y74AiEAiOT4qtD/OLUbFNHnpKvINTMfK/aPT++yFlDLYFrfmo4="}]},"_npmUser":{"name":"sgerske","email":"sebastian.gerske@gmail.com"},"directories":{},"maintainers":[{"name":"esraajbara","email":"jbesraa@gmail.com"},{"name":"sgerske","email":"sebastian.gerske@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aragon-id_2.0.6_1620291105587_0.537885417126917"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-21T11:51:55.720Z","2.0.3":"2021-04-21T11:51:56.241Z","modified":"2022-04-05T00:54:12.538Z","2.0.4":"2021-04-23T10:25:53.298Z","2.0.5":"2021-05-05T12:33:15.914Z","2.0.6":"2021-05-06T08:51:45.809Z"},"maintainers":[{"email":"peter@confluxnetwork.org","name":"peter-conflux"},{"email":"jbesraa@gmail.com","name":"esraajbara"}],"description":"Verifiably safe ENS registrations.","contributors":[{"name":"Brett Sun","email":"brett@aragon.one"},{"name":"Jorge Izquierdo","email":"jorge@aragon.one"}],"author":{"name":"Aragon Institution MTU","email":"contact@aragon.one"},"readme":"# Aragon ID\n\nVerifiably safe ENS registrations.\n\n#### 🚨 Everything in this repo is highly experimental software.\n\nIt is not secure to use any of this code in production (mainnet) until proper security audits have\nbeen conducted. It can result in irreversible loss of funds.\n\n## Why\n\nAragon users, as well as most blockchain users in general, are plagued by [Zooko's Triangle](https://en.wikipedia.org/wiki/Zooko%27s_triangle)—\naddresses are secure and decentralized, but not human-friendly. Aside from being the most important\nof the three for wide-adoption, it should also be noted that human-friendliness may be considered an\naspect of security: cryptographic addresses have been shown to be easy for users to innocently\nmistake and [attackers to maliciously spoof](https://blog.gridplus.io/hardware-wallet-vulnerabilities-f20688361b88).\n\nAlthough several projects are building services to address this problem, such as [uPort](https://www.uport.me/)\nand [Civic](https://www.civic.com/), none are yet mature or readily available for mass-market\nadoption. In light of this, Aragon ID is a simple identity system to bridge the gap until such\nprojects are ready. It leverages the existing [ENS](https://ens.domains/) infrastructure to securely\nprovide two-way, first-in-first-served mappings of addresses to `<name>.aragonid.eth` identifiers.\nAfterwards, users will be able to resolve and reverse-resolve any `<name>.aragonid.eth` to an\naddress and trust that their name registrations are safely in their own control.\n\n## Usage\n\nAs summarized by [Dan Finlay](https://medium.com/@danfinlay/the-future-of-ens-subdomain-markets-e5b7d98a18d3)\nand [Nick Johnson](https://medium.com/the-ethereum-name-service/results-of-the-first-ens-workshop-ab5e8d39fb79)\nas part of the first ENS workshop, ENS subnode registrations are, by default, liable to be changed\nby the owner of the node at any time. The node owner has the power to change the details of any\nsubnodes and can even transfer ownership of the node back to themselves by calling the auction\nregistrar's [`finalizeAuction()`](https://github.com/ethereum/ens/blob/master/contracts/HashRegistrarSimplified.sol#L458)\nor [`transfer()`](https://github.com/ethereum/ens/blob/master/contracts/HashRegistrarSimplified.sol#L475)\nat any time. This problem persists all the down way to TLDs, as the ENS root is controlled by the\nENS multisig.\n\nAt its heart, Aragon ID is a collection of contracts that mitigate this lack of security for\nregistrants of a subnode. It is heavily influenced by [prior work from Nick Johnson](https://gist.github.com/Arachnid/3acaf6ed437ee79e8e894b2ce5e82441).\n\n### In an Aragon Client\n\nNew users of Aragon should be recommended to register a human-friendly name under\n`<name>.aragonid.eth` if they don't already have an ENS identifier associated with their address.\nWhile the registration process is initially free and first-in-first-served, in the event of bad\nactors or high demand, Aragon may require users to burn a number of [Aragon Network Tokens](https://github.com/aragon/aragon-network-token)\nor another token as a cost of registration.\n\nTo fully register a name, two transactions from the user are required; unfortunately, there is no\nsecure way to to create a two-way registration (both address-to-name and name-to-address resolvable)\nfor a user in one transaction. As such, registration should first occur in the \"forward\" direction,\nthrough the deployed [FIFSBurnableRegistrar](#fifsburnableregistrar-is-fifsresolvingregistrar) for\n`aragonid.eth`, to secure a name. On its success, the \"reverse\" registration should be then be sent\nto the existing [ENS Reverse Registrar](http://docs.ens.domains/en/latest/userguide.html#reverse-name-resolution).\n\nNote that users have full control of their `<name>.aragonid.eth` subnode, and their registration may\nbe altered in the event of a transfer. Before using an identifier, Aragon clients should first check\nthat the address it resolves to has not changed.\n\n## Future work\n\nAlthough Aragon previously [integrated with Keybase](https://blog.aragon.one/how-aragon-approaches-identity-and-the-ethereum-keybase-resolver-d548133e4a26),\nthe existence of ENS now allows us to build an identity system that avoids relying on a centralized\n3rd party. In doing so, we lost a number of features that were previously provided by Keybase, such\nas off-chain storage (e.g. profile photos or other service identitifers). In the future, we plan to\nintegrate Aragon ID with decentralized off-chain storage services, such as [Swarm](https://github.com/ethersphere/swarm)\nor [IPFS](https://ipfs.io/), to provide such functionality.\n\nFinally, in the wake of upcoming identity services like uPort and Civic, it should be noted that\nAragon ID works at the most basic level of Ethereum identities: account addresses. This means that\nusers in the future will be able to associate their Aragon ID identifier to any identity that would\nbe provided through a service, and vice-versa. Future users who come to Aragon with an existing\nidentity may even opt to skip the Aragon ID registration process altogether.\n\nAs an example, in the case of the ongoing [standardization of Ethereum identities](https://github.com/ethereum/EIPs/issues/725),\na user of Aragon could be represented by an ERC725 identity contract that is registered to an Aragon\nID identifier. This identity contract would have a resolvable name and address, be allowed to\ninteract with an Aragon organization via its `ACTION` keys, and be able to prove various details\nabout itself to an organization via its held [claims](https://github.com/ethereum/EIPs/issues/735).\nIn the future, an Aragon organization, possibly through a future [Aragon app](http://wiki.aragon.one/dev/apps/),\ncould also be a claims issuer for identities—the most basic of which could be claims about\nmembership or administration (e.g. \"Brett Sun is the general director of Aradentity Inc.\").\n\n## Contracts\n\n#### DeedHolder\n\nSlightly modified version of [Nick Johnson's `DeedHolder`](https://gist.github.com/Arachnid/3acaf6ed437ee79e8e894b2ce5e82441).\n\nThe `DeedHolder` acts as a holding repository for deeds (created by the auction registrar for each\nregistration). Once transferred, deeds, and their corresponding ENS nodes, are locked to the\n`DeedHolder` until the original registrar is replaced. This prevents the node owner from being able\nto control the ENS node directly and also disables their ability to call the registrar's\n`finalizeAuction()` or `transfer()` to re-gain full control of the node.\n\nGiven that the migration process to the new registrar is unknown at this time and may require\nmultiple operations, ownership of the deed will need to be transferred to a contract whose logic is\nlikewise unknown. This new owner in charge of the migration would ideally be decided via some\ngovernance mechanism, such as a community multisig. Once the migration is complete, the deed should\nagain be locked to ensure that the node cannot be tampered with.\n\nFunctions:\n\n- `claim(bytes32 node)`: Re-claim the deed from the `DeedHolder` when the original registrar has\n  been replaced by a new registrar\n- `owner(bytes32 node) returns(address)`: Returns the current owner of the deed\n- `transfer(bytes32 node, address newOwner)`: Transfer ownership of the deed (note that the\n  new \"owner\" still has no access to the deed until it becomes claimable)\n\n#### DelegatingDeedHolder (is DeedHolder)\n\nA `DeedHolder` that allows the owner of the deed to set a \"manager\" for the node (i.e. become the\nowner of the ENS node) to allow an external party or contract to manage subnode registrations.\n\nUsing the `DeedHolder` by itself makes it impossible for any future changes to be made to the held\nENS node, as the process of transferring the deed also sets the `DeedHolder` as the owner of the\nnode.\n\nFunctions:\n\n- `setManager(bytes32 node, address manager)`: Set the manager for the ENS node tied to the\n  deed. Preferrably a registrar contract (see below).\n\n#### FIFSResolvingRegistrar\n\nA [`FIFSRegistrar`](https://github.com/ethereum/ens/blob/master/contracts/FIFSRegistrar.sol)\nimplementation that also sets the resolver (and the corresponding address mapping, if the registry\nsupports the address interface) when a subnode is claimed.\n\nFunctions:\n\n- `register(bytes32 subnode, address owner)`: Register the subnode with the default resolver, if\n  not already claimed\n- `registerWithResolver(bytes32 subnode, address owner, AbstractPublicResolver resolver)`:\n  Register the subnode with the given resolver, which must conform to the [Resolver spec](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-137.md#resolver-specification)\n\n#### FIFSBurnableRegistrar (is FIFSResolvingRegistrar)\n\nA ownable `FIFSResolvingRegistrar` that allows the owner to set a price (in a token) for registering\nsubnodes. Tokens used in this way will be burned by being sent to `0xdead`. Supports the\n`ApproveAndCallReceiver` interface.\n\nFunctions:\n\n- `register(bytes32 subnode, address owner)`: Register the subnode with the default resolver, if\n  the `owner` has pre-approved the contract for at least the registration cost. This operation\n  will fail if burning the token through `token.transferFrom(owner, \"0xdead\") fails.\n- `registerWithResolver(bytes32 subnode, address owner, AbstractPublicResolver resolver)`:\n  Register the subnode with the given resolver, which must conform to the [Resolver spec](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-137.md#resolver-specification),\n  if the `owner` has pre-approved the contract for at least the registration cost\n- `setBurningToken(ERC20 burningToken)`: Set the token to be burned when there is a registration\n  cost\n- `setRegistrationCost(uint256 cost)`: Set the cost of registering a subnode\n- `receiveApproval(address from, uint256 amount, address token, bytes data)`:\n  `ApproveAndCallReceiver` implementation, for tokens that support the `ApproveAndCall`\n  interface\n\n### Example\n\nThe `DeedHolder` and `DelegatingDeedHolder` contracts are meant to be used for the initially\ndeployed set of ENS contracts (specifically, the [auction registrar](https://github.com/ethereum/ens/blob/master/contracts/HashRegistrarSimplified.sol#L103)).\nAssuming those are available, your flow will probably be something like (in pseudo-JS):\n\n```js\n// Contract instances\nconst ens = '...'\nconst publicResolver = '...'\nconst auctionRegistrar = '...'\nconst token = '...'\n\n// Deploy contracts\nconst deedHolder = DelegatingDeedHolder.new(ens.address, namehash('eth'))\nconst nodeRegistrar = FIFSBurnableRegistrar.new(\n  ens.address,\n  publicResolver.address,\n  namehash('node.eth'),\n  token.address,\n  10\n)\n\n// Transfer deed ownership to the deed holder and set up the nodeRegistrar as the manager\nauctionRegistrar.transfer(web3.sha3('node'), deedHolder.address)\ndeedHolder.setManager(web3.sha3('node'), nodeRegistrar.address)\n\n// Register via token.approve()\ntoken.approve(nodeRegistrar.address, 10, { from: '<owner address>' })\nnodeRegistrar.register(web3.sha3('subnode'), '<owner address>')\n\n// Register via token.approveAndCall()\ntoken.approveAndCall(nodeRegistrar.address, 10, '<call data for register(bytes32,address)>')\n\n// Eventually reclaim ownership of deed, when the registrar has been updated\ndeedHolder.claim(web3.sha3('node'))\n```\n\n## Installing (for Web3 projects)\n\n**Note**: Exported ABIs are coming, so hang tight :)\n\n## Developing\n\n```sh\nnpm install\nnpm test\n```\n","readmeFilename":"README.md"}