{"_id":"@barnbridge/react-tenderly-fork-controls","_rev":"4-02e642a0b520d1ebbbf57a2da5e90f3f","name":"@barnbridge/react-tenderly-fork-controls","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@barnbridge/react-tenderly-fork-controls","version":"0.0.1","description":"React Component for controlling tenderly forks in a dapp","main":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"MIT","scripts":{"clean":"rm -rf dist","build":"tsc"},"devDependencies":{"@types/react":"^18.0.27","encoding":"^0.1.13","ethers":"^5.0.0","react":"^18.1.0","react-dom":"^18.1.0","typescript":"^4.7.2"},"dependencies":{"@nextui-org/react":"^1.0.0-beta.12","axios":"^1.3.4","zustand":"^4.3.6"},"peerDependencies":{"ethers":">=5.5.1 <6","react":">=17.0.0"},"repository":{"type":"git","url":"git+https://github.com/BarnBridge/react-tenderly-fork-controls.git"},"gitHead":"352c2bb788bc0cefdffb5110b3582e78d5653851","bugs":{"url":"https://github.com/BarnBridge/react-tenderly-fork-controls/issues"},"homepage":"https://github.com/BarnBridge/react-tenderly-fork-controls#readme","_id":"@barnbridge/react-tenderly-fork-controls@0.0.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-FoUF7rcuFPHFi1HwimZ3hbvrDsFBNOyc6RF05StyG3BwS2BECsh4xeI0CkK3C41Xt1qE6X/Brst7FSDODJNzPw==","shasum":"f1970074186a0eb3a28f852cec3fcb474da0ce6a","tarball":"https://registry.npmjs.org/@barnbridge/react-tenderly-fork-controls/-/react-tenderly-fork-controls-0.0.1.tgz","fileCount":11,"unpackedSize":28569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBs6klNW+vw576GqAvz7VevNkvUZ3pIGLLJ/9rbSOdIwAiEA5iMH4cTFhyG6sO5iB28f+CjFC1l+je09bIRWcDzJ1kI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkFjc2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmojYw//bFrN6O8BZnjUMMW14NTtx1Z/eQ3ZSv+fi/b5av+mRK3hzSO9\r\nkjO6xh4DdXLi6nu3/IO96QAVnwxZ1M4e4ZH0iRr089h/jvjH82gyWqfvpd8C\r\nHs/R6YWyLBvHh42VDEynM21TRZCHl9IM8omRp6BhTnycyiXuBgT4kYlHiPUy\r\n3eUgVXEvjy/GTaYvN4TI1g78bQsGfhi7QrQNSrcqf8yU3bCGcWApe2lnDKj3\r\ncs6ZYYGcR2BzuUluDBKaAVH3zRPiPT84YhbqLUoO188W3wyGU8My9HAFT94d\r\n01atkamwW6nUxsX6gZH8K408ksQrAN7ZJ/eDinZuAJ9bPndCaogUG+Cfsgdf\r\n25Y/VeNkq/iGa43wN4rv+8gqZPGR8TMdGkvpiJC7dKm0zufBxGjjithXBh1v\r\nSKUU4sefPhhFzQ57GI2odtWuOgwgdtsrA4jrw4r9SidFrK0Ai4k2Ev8S3yiQ\r\n+iuOYZvmh82j2Lz0A+3zlP4b2oFowj3yfnK20/1ZdJwwwb1d8MekrNOnWOPv\r\neXkAe9t+tfbVqjFSupOuQBprmUzANwTvxlDn4SwSAKAtmmQUsPTWjth3XT6F\r\nAWD5iZPlzUKtytb/r2TE/uvZow+tXGXgt1rtp+LTMR3C4zxeWqiPQ5oKPEgA\r\nBo6uaVzLK88H98Cy0r5RRhdtWmk7mFMxxPk=\r\n=g96H\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jfarms","email":"jfarmscrypto@gmail.com"},"directories":{},"maintainers":[{"name":"jfarms","email":"jfarmscrypto@gmail.com"},{"name":"barnbridgebot","email":"Barnbridgebot@barnbridge.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tenderly-fork-controls_0.0.1_1679177526317_0.8913395217304112"},"_hasShrinkwrap":false},"0.0.2":{"name":"@barnbridge/react-tenderly-fork-controls","version":"0.0.2","description":"React Component for controlling tenderly forks in a dapp","main":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"MIT","scripts":{"clean":"rm -rf dist","build":"tsc"},"devDependencies":{"@types/react":"^18.0.27","encoding":"^0.1.13","ethers":"^5.0.0","react":"^18.1.0","react-dom":"^18.1.0","typescript":"^4.7.2"},"dependencies":{"@nextui-org/react":"^1.0.0-beta.12","axios":"^1.3.4","zustand":"^4.3.6"},"peerDependencies":{"ethers":">=5.5.1 <6","react":">=17.0.0"},"repository":{"type":"git","url":"git+https://github.com/BarnBridge/react-tenderly-fork-controls.git"},"gitHead":"b19c6848bc2b45909b00236614ce65f7494dcae1","bugs":{"url":"https://github.com/BarnBridge/react-tenderly-fork-controls/issues"},"homepage":"https://github.com/BarnBridge/react-tenderly-fork-controls#readme","_id":"@barnbridge/react-tenderly-fork-controls@0.0.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-HEbQPJW2VjA87CAvvpvMPAjz27DyfbdoRjEMyrmhUSh5pwDQcAzHeMlscRfSd6aFOyrP0tPJbzZCUpQx3Pv1xw==","shasum":"142f6c5efb7dffbc004ae91af6080727d0bf2989","tarball":"https://registry.npmjs.org/@barnbridge/react-tenderly-fork-controls/-/react-tenderly-fork-controls-0.0.2.tgz","fileCount":11,"unpackedSize":28555,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAUcY9vQ6rXGB3Rr3Q3SAANBvi7ODcYoFOZnLZ32KQBpAiBFcIuBamGbo4EqzTiNs8QtFozEEK0Q6h9QykugEqNW6Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkH2YyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqjmw/9H1+3Q83xU3U3zJOPqheO3v+/5jGN9F3r9h/WaZh7gQckZz+G\r\nHjzwbSy4UGd0cb3Z4G0zJI7O7tdOsR0GthsGjqckWPwoWETxKz5KymMOi9nm\r\npMRDZvrFv99q8D12ublJpeDJ0ZMJiTGew45y54tHIvldqpZ/lDtcmSKr6dJ8\r\n0mA8RdmiLvzTCYAlRRt/lQH6Of2wRgC0xNGmflNePtb2IAg7VUPzwBTzuf3G\r\nxjMCL76iANHbQTpZIpQ9VQUZwEEI70tclJ06mn/Xkt96GPL4JJJ3yTJdgOMn\r\nBufw1hRTdkDekprpw2ooQsR3MH6KG9tL17f1raN6uV9vao3TQTQhvtmmqnPJ\r\nAZtzV4HcYqZrl+XJyD88ZcNnXTl/bVUk7POezCaKAa+3xahlkDY2K0AyLjAC\r\n6txqL0jLWfRBosSa27x6aDP1LQ7Mn517qYrs7u8hIbCO7zt1PagC+QiNoRem\r\n5Xa9P1ek8iKWmuqPpFlhxAVVQSPTNMT2aVKV4ltzAINAEbCUeQ9rwvpQ6A7H\r\n41+CA47SEQSjdqPu9F8HYkh/egmERyhkLKINpHu/hCSScORvAwQjW5LPGmDx\r\nKRbr8J9teKso+hlyUZDUAsnfCKJgxB0Nrq2iqDlpyB1vfcnNs3NmE0umpiIu\r\nbXVFVkTB1Zuotye+14D4jAtaBH7NAV70srA=\r\n=cPgz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jfarms","email":"jfarmscrypto@gmail.com"},"directories":{},"maintainers":[{"name":"jfarms","email":"jfarmscrypto@gmail.com"},{"name":"barnbridgebot","email":"Barnbridgebot@barnbridge.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tenderly-fork-controls_0.0.2_1679779377980_0.3606916208726234"},"_hasShrinkwrap":false},"0.0.3":{"name":"@barnbridge/react-tenderly-fork-controls","version":"0.0.3","description":"React Component for controlling tenderly forks in a dapp","main":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"MIT","scripts":{"clean":"rm -rf dist","build":"tsc"},"devDependencies":{"@types/react":"^18.0.27","encoding":"^0.1.13","ethers":"^5.0.0","react":"^18.1.0","react-dom":"^18.1.0","typescript":"^4.7.2"},"dependencies":{"@nextui-org/react":"^1.0.0-beta.12","axios":"^1.3.4","zustand":"^4.3.6"},"peerDependencies":{"ethers":">=5.5.1 <6","react":">=17.0.0"},"repository":{"type":"git","url":"git+https://github.com/BarnBridge/react-tenderly-fork-controls.git"},"gitHead":"3cb7163cc258bc6b37ff7893ae7efe3a9d326937","bugs":{"url":"https://github.com/BarnBridge/react-tenderly-fork-controls/issues"},"homepage":"https://github.com/BarnBridge/react-tenderly-fork-controls#readme","_id":"@barnbridge/react-tenderly-fork-controls@0.0.3","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-8xaIeV7lioIW4V6eYX0FYn4cu3jRUweYPOUfjEOyShIQsCuV8Zf3reIk51LQ6Y0gUqGeFWpVqzC3JcYAU1UDuw==","shasum":"f7128fae0b88a910249f2c08e331e884d676776a","tarball":"https://registry.npmjs.org/@barnbridge/react-tenderly-fork-controls/-/react-tenderly-fork-controls-0.0.3.tgz","fileCount":11,"unpackedSize":28602,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhThMKpa4g2ZRbHGuS0cEQFTttN/T74Kki2jaRXYdFFwIgb34cAgwTQVDVWfwgIIWnax44YMUtUK95sSYc/XkUVz8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkH3CKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpNiw/+PfN8o2g4CzzgGb1/rhsjrubp6FuxJx8PZNNTUDn/1C8UWcTC\r\ngIsjUsSMemSeTkyvIZ98jBTQ2mjPMf8+oL2Vvggebs3z0/LohacIhJ2C3OdK\r\nP5QlR1J89XqoI8pKO+I/hJh2QSD/ktZZJCgK5yYkPAj0Pd/knH5GBw+W2w5z\r\nrXfZIZnBWa1s6yINOYj8sSYzmLBJnJh1efYNu4VRokETWj/Ld5abiBkbRjqq\r\n9FFoMB7M4/UwVHlljMLaguJPGHlrV+psWD5lbcQ1/1i83JyghKVlT4mITBo+\r\nYHLnhJYpphXiLr1zMPD0eJqz0QoTPxNnNHA/OecrVM6fs5vV2h0+MowHDuGP\r\n+mLp6MUltMNpDW21VPRi/q2faJA0BwtK1cYA1SJ7cl/ygXYhQ9VJADY0vWFm\r\n+TTK2UYZyYYm1SZbm9QEHfRNCdag34trwh7+BzQ2cSnx/k+donjwEmjOC/wb\r\nZ4KW+dqvDrWWlOuDvKknMzSuxV2owIx+KeueRir7N4WgccsP4UO9oPiiQRKi\r\nJis3kpTmZLdA4PTa95VNVB/PbkiIi1RziwIQNTB84hu1hrMHHVYq6UteGIDn\r\nI4s5KOGibGZhimyhyEUTYFPRxC4fadiaoMlgYvCskv95sPMvMBuoFC/4yhvH\r\nddWgo2Eh0IiwohAVMq4ixW5CJlXywV4K0Uc=\r\n=+VLF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jfarms","email":"jfarmscrypto@gmail.com"},"directories":{},"maintainers":[{"name":"jfarms","email":"jfarmscrypto@gmail.com"},{"name":"barnbridgebot","email":"Barnbridgebot@barnbridge.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tenderly-fork-controls_0.0.3_1679782026259_0.10867388109789311"},"_hasShrinkwrap":false},"0.0.4":{"name":"@barnbridge/react-tenderly-fork-controls","version":"0.0.4","description":"React Component for controlling tenderly forks in a dapp","main":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"MIT","scripts":{"clean":"rm -rf dist","build":"tsc"},"devDependencies":{"@types/react":"^18.0.27","encoding":"^0.1.13","ethers":"^5.0.0","react":"^18.1.0","react-dom":"^18.1.0","typescript":"^4.7.2"},"dependencies":{"@nextui-org/react":"^1.0.0-beta.12","axios":"^1.3.4","zustand":"^4.3.6"},"peerDependencies":{"ethers":">=5.5.1 <6","react":">=17.0.0"},"repository":{"type":"git","url":"git+https://github.com/BarnBridge/react-tenderly-fork-controls.git"},"gitHead":"3cb7163cc258bc6b37ff7893ae7efe3a9d326937","bugs":{"url":"https://github.com/BarnBridge/react-tenderly-fork-controls/issues"},"homepage":"https://github.com/BarnBridge/react-tenderly-fork-controls#readme","_id":"@barnbridge/react-tenderly-fork-controls@0.0.4","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-tsqJUqynK6FTiwbD+kJK8NxkQl7uP5lsRqyR/Z5Pf0xsDvo2ZAn7LhAMzdmfgoUqfLZUTT9l4gPxI22lqMijNg==","shasum":"4c176fdc609687050a6bd9d6a101fd1c0be8cbd4","tarball":"https://registry.npmjs.org/@barnbridge/react-tenderly-fork-controls/-/react-tenderly-fork-controls-0.0.4.tgz","fileCount":11,"unpackedSize":28835,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOOdfY8+d+AopxFlcgi9MMWJzUxyRXydSIYsbIdKxe2AIgKSvNdwqTHP92fg85/jbMVP8Edh+YmazRQZDnwCQ3MYo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIJToACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrPwRAAmjhfWDgyJa23XRyb0X+Fm9KwBb8mO1D6L36VD5BvONt7BxxX\r\nybxoP+xeo/M3gV6hsJh/7bfdTprZ8P2fKcmKTlQqMcM9p20hU4ItCxmCernG\r\nOAhhZTPqlaAz0fMmLhg8dVXcopgzBEKu1ZX3+8V2wP3G0D9y8nL+RVSBj1TT\r\nqEsXMWRZOA6/mK1GC2310rBnfQ4y6Lor0xuLQCMd4SPM1kx7O47CVEYSFUzX\r\n7SoQESD6Zr9MrKQ0/6wdqBjxyiTboYrTyT+o2ErbIatkpodFWwwCyPPWtmE1\r\nIqghHuVhNw56vkULyLGyan6v+Hc1ajkqNqzG+28jiuILVOk0mVWaRFp99W0W\r\np1uLs6jx7g3KEtO5cWpPYfGTZSZ2fMD8Sd8E2bDGKfXgWvUNNe9F6LbhuVoo\r\nKQn2FkgqzzaXTh4J4lwtS3HfV2H/+8iO6mCUiiCasNFcd13MNaZGQ0wjG6SV\r\nOcj8O0D9nHoIrHrkOq33HHQfk2pS+aLu9INUZ3kqm/rlxKn00yxGhREvrd+t\r\nJByrHxLZFLbhlJpvn6t4R30nzocORAd11YEtUNC5CnGuJn6zJsvno+2cX/bF\r\nxd2NoLjVKnCJ1QZ3x3hbjAiwbSwRN9HrG4/Gf0eOGI/k9hIc5k+6lBJGvlDe\r\nKDiZZhwuF0jigRzy2v0gCzDQWZuwXGr+bpA=\r\n=mWLe\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jfarms","email":"jfarmscrypto@gmail.com"},"directories":{},"maintainers":[{"name":"jfarms","email":"jfarmscrypto@gmail.com"},{"name":"barnbridgebot","email":"Barnbridgebot@barnbridge.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tenderly-fork-controls_0.0.4_1679856872637_0.8803474854159303"},"_hasShrinkwrap":false},"0.0.5":{"name":"@barnbridge/react-tenderly-fork-controls","version":"0.0.5","description":"React Component for controlling tenderly forks in a dapp","main":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"MIT","scripts":{"clean":"rm -rf dist","build":"tsc"},"devDependencies":{"@types/react":"^18.0.27","encoding":"^0.1.13","ethers":"^5.0.0","react":"^18.1.0","react-dom":"^18.1.0","typescript":"^4.7.2"},"dependencies":{"@nextui-org/react":"^1.0.0-beta.12","axios":"^1.3.4","zustand":"^4.3.6"},"peerDependencies":{"ethers":">=5.5.1 <6","react":">=17.0.0"},"repository":{"type":"git","url":"git+https://github.com/BarnBridge/react-tenderly-fork-controls.git"},"gitHead":"f48a995d4066e918f484072defcb3f9167eb15f9","bugs":{"url":"https://github.com/BarnBridge/react-tenderly-fork-controls/issues"},"homepage":"https://github.com/BarnBridge/react-tenderly-fork-controls#readme","_id":"@barnbridge/react-tenderly-fork-controls@0.0.5","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-zc3tCytt/jnSxI8HHM2/dVx3B1jTOmGA2zqEqUIXBtYZv/XLByKM5S9HR2fP4wCLwkONf8XXqjkq7wenygBjJQ==","shasum":"cb4fefac64f7e8cbc2936fd277caece3cdfa1657","tarball":"https://registry.npmjs.org/@barnbridge/react-tenderly-fork-controls/-/react-tenderly-fork-controls-0.0.5.tgz","fileCount":11,"unpackedSize":28903,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF2qwuSOiQi9eTb1nEuS53+DDqW/+UD6Kep1RjkuuiAfAiAKJxCGkFPz72rhNIyA+TM3LiGCkRzsr60N9jTJ4eCxJw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIJcbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrFwA/+JnRWAelRQ0FnQ1uzs0/I/Eclmx0T7/2tVViPNeAnkFtj07xl\r\nYRKLIqJ81IISFhjAvHp+6KFdEscbjEffJ7GSdqiB9G+EyWUTnolbJtFGmw8V\r\nqJh/vSTQuZ0YQuTcs0+6pXZR9iNaiUpB4YwQQmxgs2CEKBER1EKZOIxx//fL\r\nSsPT52YDPtXnVICs/W7b7F1x2fczz0k6+Ue6LleVNpYDAURTX9D/fiMXVAbs\r\nn456Tk3f2Xq1mRiX+kO1irAfNuMcW7bDLgTgFZP5kYOrWYIlqj12Td532XXs\r\n/KEg4XC7BiI3egiBwaegUYOByc+GV22LOmVPH3LrYvw/IGZMTHIzjvCdz86c\r\noLNUl2rHZBL/W7dTf5gRlcViW2ScTkMNZ0HhnFt+Rnz88bh9mHLh5XGXRb6x\r\nw7glfztT/ByBJagWS97jWz1TGYMYkW5NVShIPJFcA5dLd3cg1q7dXOhn2oxY\r\nW9W+kjPT2UtTcgr/sDBV9f5e2JYDcLssMtTxwEXZfyo/nmQNAVAPiZ6YGMTz\r\nAtRNSzu5JHm2OLTQP8lGAdk9njFiK0noL5rm525ND/jgGZmtWHjdpPG0gjNu\r\n6sISDo1VHeZJLHaCgu19dlf5E4y5lKFJj90TfkzvHlY9/bNymkJ2uecSdZhz\r\nY4pGde3a/xV6lzucusPdBTPHQfrLLrY0LDc=\r\n=+j1j\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jfarms","email":"jfarmscrypto@gmail.com"},"directories":{},"maintainers":[{"name":"jfarms","email":"jfarmscrypto@gmail.com"},{"name":"barnbridgebot","email":"Barnbridgebot@barnbridge.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tenderly-fork-controls_0.0.5_1679857435571_0.6773039916020396"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-18T22:12:06.266Z","0.0.1":"2023-03-18T22:12:06.577Z","modified":"2023-03-26T19:03:55.958Z","0.0.2":"2023-03-25T21:22:58.165Z","0.0.3":"2023-03-25T22:07:06.479Z","0.0.4":"2023-03-26T18:54:32.799Z","0.0.5":"2023-03-26T19:03:55.813Z"},"maintainers":[{"name":"jfarms","email":"jfarmscrypto@gmail.com"},{"name":"barnbridgebot","email":"Barnbridgebot@barnbridge.com"}],"description":"React Component for controlling tenderly forks in a dapp","homepage":"https://github.com/BarnBridge/react-tenderly-fork-controls#readme","repository":{"type":"git","url":"git+https://github.com/BarnBridge/react-tenderly-fork-controls.git"},"bugs":{"url":"https://github.com/BarnBridge/react-tenderly-fork-controls/issues"},"license":"MIT","readme":"# React Tenderly Fork Controls\n\nThis package is can be added as part of your Web3 testing infrastructure. This package was inspired by [impersonator.xyx](https://www.impersonator.xyz/) and allows developers to impersonate wallet addresses while connected to a ganache or tenderly fork. The controls in this package allow you to set an address to impersonate, take snapshots of a fork, fast forward time, and revert the fork back to a previous snapshot.\n\nWe are using this package at [https://beta.fiatdao.com/](https://beta.fiatdao.com/) as a way to test entering bond positions and fast forward time to maturity to test redemptions for any wallet address. Using snapshots have been very helpful to prevent needing to recreate several transactions to test one transactions of the bond lifecycle.\n\n## Usage\n\n### JSX/TSX Fork Controls\n\n```jsx\nimport { ForkControls } from 'react-tenderly-fork-controls';\nimport { useNetwork, useProvider, useSwitchNetwork } from 'wagmi';\nimport { JsonRpcProvider } from '@ethersproject/providers';\n\nconst component = () => {\n  const provider = useProvider() as JsonRpcProvider;\n  const { switchNetwork } = useSwitchNetwork();\n  const { chain } = useNetwork();\n\n  return (\n    <div>\n      <ForkControls \n        provider={provider} \n        forkType='tenderly' // or 'ganache'\n        chain={chain} \n        switchNetwork={switchNetwork} />\n    </div>\n  );\n}\n```\n\n### Hooks\n\n#### useImpersonatingAddress\n\nGet the address set by the impersonate button + modal\n\n```jsx\nconst impersonatingAddress = useImpersonatingAddress();\n```\n\n#### useEnableForkMode\n\nGet true/false value if the toggle switch on the controls are on or off. This can be used to switch your wagmi client between a forked environment and a live chain.\n\n```jsx\nconst enableForkMode = useEnableForkMode();\n```\n\n#### useForkTimestamp\nReturns current timestamp of where your fork is in time, and a method to requery the block timestamp.\n\n```jsx\nconst {forkTimestamp, getForkTimestamp} = useForkTimestamp();\n```\n\n### Utility methods\n\n#### createTenderlyfork\n\nAsynchronous function to create a [Tenderly fork](https://docs.tenderly.co/simulations-and-forks/forks/using-forks-ui) using a post request to your tenderly rpc endpoint.\n```jsx\nconst tenderlyForkId = await createTenderlyFork(\n  tenderlyAccessKey, \n  tenderlyUser, \n  tenderlyProject);\n```\n\n#### controlsStore\n\nThis is a zustand store object and can be used to get and modify the internal state of the fork controls\n\nThe interface of the controls store:\n```jsx\ninterface ControlsState {\n  enableForkMode: boolean;\n  impersonatingAddress: string;\n  forkTimestamp: Date;\n  setEnableForkMode: (checked: boolean) => void;\n  setImpersonatingAddress: (address: string) => void;\n  getForkTimestamp: (provider: providers.JsonRpcProvider) => Promise<void>;\n}\n```\n\nUsage:\n```jsx\nimport { controlsStore } from 'react-tenderly-fork-controls';\nconst enableForkMode = controlsStore.getState().enableForkMode;\nconst impersonatingAddress = controlsStore.getState().impersonatingAddress;\nconst forkTimestamp = controlsStore.getState().forkTimestamp;\nconst setEnableForkMode = controlsStore.getState().setEnableForkMode;\nconst setImpersonatingAddress = controlsStore.getState().setImpersonatingAddress;\nconst getForkTimestamp = controlsStore.getState().getForkTimestamp;\n```\n\n### Next UI + Wagmi + RainbowKit Example Configuration\n\n\n```jsx\n\n// Helper method that uses createTenderlyfork and initializes a jsonRPCProvider instance to the tenderly fork\nconst configureTenderly = async (config: wagmiClientConfig) => {\n  if (!config.tenderlyAccessKey || !config.tenderlyProject || !config.tenderlyUser) {\n    console.error('Requires tenderly api access configuration');\n    return null;\n  }\n  const tenderlyForkId = await createTenderlyFork(config.tenderlyAccessKey, config.tenderlyUser, config.tenderlyProject);\n  if (!tenderlyForkId) return;\n  const providerConfig = [jsonRpcProvider({\n    rpc: () => ({ http: `https://rpc.tenderly.co/fork/${tenderlyForkId}` })\n  })];\n  return providerConfig;\n}\n\n// Creates a jsonRPCProvider instance to a local ganache instance\nconst configureGanache = () => {\n  return [jsonRpcProvider({ rpc: () => ({ http: 'http://127.0.0.1:8545' })})]\n}\n\n// Creates a wagmi client using a mock wallet and connector with the address that is impersonating\nconst configureForkedEnv = async (config: wagmiClientConfig) => {\n  const chainConfig = [chain.localhost] as Chain[];\n  const providerConfig = config.useTenderly ? await configureTenderly(config) : configureGanache();\n  if (!providerConfig) return;\n  const { chains, provider, webSocketProvider } = configureChains(chainConfig, providerConfig);\n  const providerInstance = provider(({chainId: 1337})) as any;\n  const signer = config.impersonateAddress ? providerInstance?.getSigner(config.impersonateAddress) : undefined;\n  const mockWallet = (): Wallet => ({\n    createConnector: () => ({\n      connector: new MockConnector({\n        chains: [chain.localhost],\n        options: {\n          chainId: chain.localhost.id,\n          flags: {\n            failConnect: false,\n            failSwitchChain: false,\n            isAuthorized: true,\n            noSwitchChain: false,\n          },\n          signer,\n        },\n      }),\n    }),\n    id: 'mock',\n    iconBackground: 'tomato',\n    iconUrl: 'http://placekitten.com/100/100',\n    name: 'Mock Wallet',\n  });\n  const connectors = connectorsForWallets([\n    { groupName: 'Fork And Impersonate', wallets: [mockWallet()] }\n    ]);\n  return  {\n    client: createClient({\n      autoConnect: signer ? true : false,\n      connectors,\n      provider,\n      webSocketProvider,\n    }),\n    chains,\n  }\n}\n\n// Creates a provider instance to a live chain\nconst configureLiveNetwork = (config: wagmiClientConfig) => {\n  const chainConfig = ((config.useTestnets) ? [chain.mainnet, chain.goerli] : [chain.mainnet]);\n  const { chains, provider, webSocketProvider } = configureChains(\n    chainConfig, \n    [alchemyProvider({ apiKey: config.alchemyAPIKey ?? \"\" })]\n  );\n  const { wallets } = getDefaultWallets({ appName: config.appName ?? \"My Dapp\", chains });\n  const connectors = connectorsForWallets([\n    ...wallets,\n    { \n      groupName: 'Other',\n      wallets: [argentWallet({ chains }), \n      trustWallet({ chains }), \n      ledgerWallet({ chains })] \n    }\n  ]);\n  return {\n    client: createClient({\n      autoConnect: false,\n      connectors,\n      provider,\n      webSocketProvider,\n    }),\n    chains\n  }\n}\n\n// Helper hook to allow switching between mainnet and forked envs\nexport const useWagmiClient = (config: wagmiClientConfig) => {\n  const [wagmiClient, setWagmiClient] = React.useState<any>({client: null, chains:[]});\n\n  React.useEffect(() => {\n    if (!config.useTenderly && !config.useGanache && config.alchemyAPIKey) {\n      const {client, chains} = configureLiveNetwork(config)\n      setWagmiClient({client, chains});\n    } else {\n      configureForkedEnv(config)\n        .then(setWagmiClient)\n        .catch(console.error);\n    }\n  }, [config]);\n\n  return wagmiClient;\n}\n\nfunction MyApp({ Component, pageProps }: AppProps) {\n\n  // Package hook usage\n  const impersonatingAddress = useImpersonatingAddress();\n  const enableForkMode = useEnableForkMode();\n\n  const config = React.useMemo(() => ({\n    useTenderly: enableForkMode, // Hook value\n    useGanache: false,\n    useTestnets: false,\n    impersonateAddress: impersonatingAddress, // Hook value\n    appName: APP_NAME,\n    alchemyAPIKey: ALCHEMY_API_KEY,\n    tenderlyAccessKey: TENDERLY_ACCESS_KEY,\n    tenderlyUser: TENDERLY_USER,\n    tenderlyProject: TENDERLY_PROJECT\n  }), [impersonatingAddress, enableForkMode]);\n\n  // Utility hook to manage switching between live chain and a fork\n  const {client: wagmiClient, chains} = useWagmiClient(config);\n\n  if (!wagmiClient) return <></>;\n\n  return (\n    <>\n      <Head>\n        <title>My App</title>\n      </Head>\n      <WagmiConfig client={wagmiClient}>\n        <RainbowKitProvider chains={chains}>\n            <Component {...pageProps} />\n        </RainbowKitProvider>\n      </WagmiConfig>\n    </>\n  );\n}\n```","readmeFilename":"README.md"}