{"_id":"@0xdievardump/niftyforge","_rev":"2-d899fd4c6e921337385ee20b76834224","name":"@0xdievardump/niftyforge","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.1":{"name":"@0xdievardump/niftyforge","description":"Package to import and use the contracts of NiftyForge.io","version":"0.1.1","scripts":{"prepare":"bash ../scripts/package/prepare.sh","test":"echo \"No test specified\""},"repository":{"type":"git","url":"git+https://github.com/niftyforge/contracts.git"},"keywords":["solidity","ethereum","smart","contracts","security","niftyforge"],"author":{"name":"dievardump","email":"dievardump@gmail.com","url":"Simon Fremaux"},"license":"MIT","bugs":{"url":"https://github.com/niftyforge/contracts/issues"},"homepage":"https://niftyforge.io","publishConfig":{"access":"public"},"devDependencies":{"@openzeppelin/contracts":"^4.3.2","@openzeppelin/contracts-upgradeable":"^4.3.2"},"gitHead":"3c7de1d87c2fed23252da478cd97c0eec5d4a198","_id":"@0xdievardump/niftyforge@0.1.1","_nodeVersion":"16.9.1","_npmVersion":"7.22.0","dist":{"integrity":"sha512-YMOItWx6MObdlmT7CmP1RjIRxBdePiAvM6hBvzuJUKZiMBLk+lqSYpba6CPpAafK+yeSPEtWljXKetH1WaaLGw==","shasum":"a81660093b79a831c3d9475a019a4b4a9c5411aa","tarball":"https://registry.npmjs.org/@0xdievardump/niftyforge/-/niftyforge-0.1.1.tgz","fileCount":81,"unpackedSize":2555307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCooICRA9TVsSAnZWagAABD4P/i1EQteECtuAZVUua2Jn\nuNBHbzOh0EX72EOaffVt80d8pFpDTNs4EI8mSHyjDkpZTbrxQfaHzhpBm5AX\n+zSJb1SgrCrScFa0pua5hPYJXHsP01Mg3Rhp6Gc1fRn+Zi74pJoVEXkx9aBY\nIcHUdloxBXw/K9pTPp6bp8eA9lbxkbUL7E9ih92MN26A306gVmfL7W7DRIck\nb0vSNxdS6YiDPVggZBa6TnRFuMIm4K4LljqVXsjwr+HLXQOpFjf5e9StMDSJ\n80xAAsa1PDlTF+z/WjsoWhb98MgMsmNSvChd8wQ9NDwm35rdBhvlEMyEwkg+\nMLFzm6F8uW9UzQjZqa5tOmFp9vO+Jzq71uVcEe9PaLunBoRWNe0inroCb5K8\njSvfB4hYbCDyyD6OcToAEELqyfwaJNP48GWeZJBu3laCyr6on6LrBSVAMvfm\nbat+OGPa3R3gRyCNxp3+no3/Qzqkp8hS4va2vnL9md5TZmrjsTnL2twxGPb9\nZ6hUZKxIeNf5cxQGGpjeTFY+soyPommPGLzeaVmULgi2+zaegUby+CM99cUK\nWfHXNCLDxpyS7DTzfRa7lZpiPFHbnNsGzqFOi+JPRQSfwORkscEjLoptljSt\n5PyW/6zqyCIbfJJhQOanelnkSCeRLMbI2pA0hyN+ql6hcohHeqr97tnmYi46\nltD+\r\n=5CgY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECROIDYIkRZzheIwPVX6tc64MnabH9Id40SMgRkTwI8AiEA95SL6aa9EzJobe/dyrI6BFGbPm5wVNgnnsf9V2CcPak="}]},"_npmUser":{"name":"dievardump","email":"dievardump@gmail.com"},"directories":{},"maintainers":[{"name":"dievardump","email":"dievardump@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/niftyforge_0.1.1_1644857864449_0.6060798731334258"},"_hasShrinkwrap":false},"1.0.0":{"name":"@0xdievardump/niftyforge","description":"Package to import and use the contracts of NiftyForge.io","version":"1.0.0","scripts":{"test":"echo \"No test specified\""},"repository":{"type":"git","url":"git+https://github.com/niftyforge/contracts.git"},"keywords":["solidity","ethereum","smart","contracts","security","niftyforge"],"author":{"name":"dievardump","email":"dievardump@gmail.com","url":"Simon Fremaux"},"license":"MIT","bugs":{"url":"https://github.com/niftyforge/contracts/issues"},"homepage":"https://niftyforge.io","publishConfig":{"access":"public"},"devDependencies":{"@openzeppelin/contracts":"^4.3.2","@openzeppelin/contracts-upgradeable":"^4.3.2"},"gitHead":"d94b723de438488ccd606ed8c60ee0783b3f89c5","_id":"@0xdievardump/niftyforge@1.0.0","_nodeVersion":"16.9.1","_npmVersion":"7.22.0","dist":{"integrity":"sha512-RwExmd2VhOHtKzhZ8KgsXR9y3JOJ3DQuTFAECaF0360I5tN5+pvAjvZxGoYF53jDTbaesBYvioMKZ4RERlbrdQ==","shasum":"5d4e08b1367488a652da2bc367a5271cbe502925","tarball":"https://registry.npmjs.org/@0xdievardump/niftyforge/-/niftyforge-1.0.0.tgz","fileCount":98,"unpackedSize":4399695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiQyd6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp4/Q/+ML4SYnAQ2Y3B6EnNfEdXxQI/J5iPgU71cQqDnslIX3gK3OFR\r\n/xVtPV+K7L93J56+I2PjTM4NCxiqU/AzUDXNxUGOgeSbHqVl+hl2+w0d+VVT\r\nXIZPFoj/V8aQF/VMpkzyAf0+YwHVpultJo/Qc5XqdrZ1JsTRAskg2yna4zTX\r\nZFkkmnnox7hz4focIOTDguhBJlZZ+buTVrZ3pfun/GhZGPK7ud6Lv254ZyTn\r\nqJ8jj60eZMjuF261IliU+NDjmUGjF27W7cbU8KvqV1AJl0Ibh/JWYYJE3GV2\r\nfK9fQpdCPkygobCQgN1r7ZKis4nuqmmYhORuTkcAJMIhQ1HHVXANsvRF7eSL\r\no6IrftT/y7yNODqaxyqqIiyJQaorfZY849h0SXWyIefL9qcCgOtSqzlRXUBa\r\nn9nZEs9senf6F3sva5hnj8ecnkyrbkof9cTbY7FvgtMLgbtY6ix+RpcrZ4mY\r\nFnxI6HgSnlJ7hbz42+mH0+bhghA/Glik8fxghfbBveuVxnNZNvRB68K1ogzL\r\nthS4jjsrGC7c13heJbHgJNvMTe7Kja4U06Li8E/XP0ffkmSkUAdhK+EiwHIy\r\ndtPcRl6hRwLqmWqvzMz9mkJIuc/1G6LjxdZgaxEbLhx8Peik5QyQSx3GlaNu\r\nLBA2/rMg64PtjaBWfrMfOvKGT8tv+e57agE=\r\n=EG1G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAvNKDvv8wjw84PnoGAc86lu7jgPbV10zzENvIg7OyoPAiBk6yb0VYn1FHVvEBmJ8dHq/Mz3CUhmGizKbLcghytiig=="}]},"_npmUser":{"name":"dievardump","email":"dievardump@gmail.com"},"directories":{},"maintainers":[{"name":"dievardump","email":"dievardump@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/niftyforge_1.0.0_1648568186275_0.6705379897649333"},"_hasShrinkwrap":false}},"time":{"created":"2022-02-14T16:57:44.400Z","0.1.1":"2022-02-14T16:57:44.633Z","modified":"2022-04-04T10:28:55.593Z","1.0.0":"2022-03-29T15:36:26.574Z"},"maintainers":[{"name":"dievardump","email":"dievardump@gmail.com"}],"description":"Package to import and use the contracts of NiftyForge.io","homepage":"https://niftyforge.io","keywords":["solidity","ethereum","smart","contracts","security","niftyforge"],"repository":{"type":"git","url":"git+https://github.com/niftyforge/contracts.git"},"author":{"name":"dievardump","email":"dievardump@gmail.com","url":"Simon Fremaux"},"bugs":{"url":"https://github.com/niftyforge/contracts/issues"},"license":"MIT","readme":"# NiftyForge contracts\n\nA very easy way to launch your own contracts with few efforts, lots of goodies.\n\nDeploy using the minimal proxy pattern, making deployments of a full NFT contract for around 0.025 eth at 50gwei.\n\n## Full loaded contracts:\n\n- Roles Management\n- Module Pattern very advances: delegates tokenURI, royaltyInfo and other stuff to the module that minted a token\n- Permits (EIP 4494 - draft)\n- On chain Royalties (EIP 2981)\n- mint / mintBatch with consecutive or arbitrary ids\n- Events Listeners sent to modules for specific behaviors on Mint/Burn/Transfer\n\n# Install\n\npnpm\n\n```bash\npnpm add @0xdievardump/niftyforge\n```\n\nnpm\n\n```bash\nnpm install @0xdievardump/niftyforge\n```\n\n# Two types of contracts\n\nFull or Slim depending on your needs and use:\n\n-  Slim will be more series / pfp-like minting in a consecutive order (only one minter)\n-  Full will give lots of flexibility while still being easy to use it in a simple way\n\n# hardhat-deploy\n\nEasily load the current deployments in your hardhat config and deploy new contracts using hardhat-deploy\n\n```js\nexternal: {\n    deployments: {\n      mainnet: ['node_modules/@0xdievardump/niftyforge/deployments/mainnet'],\n      rinkeby: ['node_modules/@0xdievardump/niftyforge/deployments/rinkeby']\n    }\n  }\n```\n\nthen in your scripts\n\n\n```js\n  // scripts/deployERC721.js\n  const forgeMaster = await ethers.getContract('ForgeMaster');\n  const tx = await forgeMaster.createERC721(\n      \"My NFT Contract\", // name\n      \"MNC\", // ticker\n      'ipfs://QmYxUtFnPFntZsrxRTCT3rJZUWC7ti949f1hxnnfnzNB2u', // contract URI\n      'https://mybaseuri.com/',  // baseURI\n      ethers.constants.AddressZero, // owner\n      [], // modules\n      ethers.constants.AddressZero, // royaltiesRecipient\n      0, // royalties amount 0-10000 (2 decimals)\n      'my-nft-contract', // slug on niftyforge.io\n      '' // context, blank if you don't know what is context ;)\n  );\n\n  const receipt = await tx.wait();\n  console.log(receipt.logs);\n```\n\n# Module Pattern\n\nCreate modules that you add as Minter on your contract. Those module can contain `tokenURI` `royaltyInfo` and a few other data specific to the NFTs they minted. This way: One contract, multiple sources for your NFTs, multiple royalties\n\n\n```js\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\n\nimport \"@0xdievardump/niftyforge/contracts/Modules/NFBaseModule.sol\";\nimport \"@0xdievardump/niftyforge/contracts/Modules/INFModuleTokenURI.sol\";\nimport \"@0xdievardump/niftyforge/contracts/Modules/INFModuleWithRoyalties.sol\";\n\n\n/// @notice Simple Module exemple that manages its own tokenURI and royaltyInfo\n/// @author Simon Fremaux (@dievardump)\ncontract MyModuleWithSomeMonsterNFT is\n    Ownable,\n    NFBaseModule,\n    INFModuleTokenURI,\n    INFModuleWithRoyalties\n{\n    /// @notice the nftContract on which MyModule will Mint\n    address public nftContract;\n\n    /// @notice the baseURI for this module\n    string public baseURI;\n\n    function supportsInterface(bytes4 interfaceId)\n        public\n        view\n        virtual\n        override\n        returns (bool)\n    {\n        return\n            interfaceId == type(INFModuleTokenURI).interfaceId ||\n            interfaceId == type(INFModuleWithRoyalties).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /// @inheritdoc\tINFModuleWithRoyalties\n    function royaltyInfo(address, uint256 tokenId)\n        public\n        view\n        override\n        returns (address receiver, uint256 basisPoint)\n    {\n\t\t\t\t// manage your own royalties.\n        receiver = owner();\n        // gets 10% royalties\n        basisPoint = 1000;\n    }\n\n    /// @inheritdoc\tINFModuleTokenURI\n    function tokenURI(address, uint256 tokenId)\n        public\n        view\n        override\n        returns (string memory)\n    {\n        // manage your own tokenURI.\n        return string(abi.encodePacked(baseURI, tokenId.toString(), '.json'));\n    }\n\n    function mint() {\n        // mint the next nft to msg.sender\n        // there is no URI because it's managed in this contract\n        // there are no royaltiesRecipient nor royaltieSamount because it's manage in this contract\n        INiftyForge721(nftContract).mint(msg.sender, '', address(0), 0, address(0));\n    }\n}\n```","readmeFilename":"README.md"}