diff --git a/.github/scripts/comment.js b/.github/scripts/comment.js deleted file mode 100644 index 3ae05ed..0000000 --- a/.github/scripts/comment.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = async ({ github, context, header, body }) => { - const comment = [header, body].join("\n"); - - const { data: comments } = await github.rest.issues.listComments({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.payload.number, - }); - - const botComment = comments.find( - (comment) => - // github-actions bot user - comment.user.id === 41898282 && comment.body.startsWith(header) - ); - - const commentFn = botComment ? "updateComment" : "createComment"; - - await github.rest.issues[commentFn]({ - owner: context.repo.owner, - repo: context.repo.repo, - body: comment, - ...(botComment - ? { comment_id: botComment.id } - : { issue_number: context.payload.number }), - }); -}; \ No newline at end of file diff --git a/.github/workflows/hardhat.js.yml b/.github/workflows/hardhat.js.yml deleted file mode 100644 index d0eb6c9..0000000 --- a/.github/workflows/hardhat.js.yml +++ /dev/null @@ -1,144 +0,0 @@ -name: Smart contracts - -on: - pull_request: - branches: - - "**" - -defaults: - run: - working-directory: contracts/ - -jobs: - slither: - name: 🐍 Slither - runs-on: ubuntu-latest - permissions: write-all - env: - PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} - POLYGON_ALCHEMY_KEY: ${{ secrets.POLYGON_ALCHEMY_KEY }} - ETH_ALCHEMY_KEY: ${{ secrets.ETH_ALCHEMY_KEY }} - steps: - - name: 🛑 Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.11.0 - - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 - - - name: ⎔ Setup node ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - name: 🐢 Cache node modules - id: cache-npm - uses: actions/cache@v3 - env: - cache-name: cache-node-modules - with: - # npm cache files are stored in `~/.npm` on Linux/macOS - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} - name: 📚 List the state of node modules - continue-on-error: true - run: npm list - - - name: 🐍 Run Slither - uses: crytic/slither-action@v0.3.0 - id: slither - with: - node-version: 16 - sarif: results.sarif - fail-on: none - target: "contracts/" - slither-args: --checklist --markdown-root ${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/ - - - name: 🗣️ Create/update checklist as PR comment - uses: actions/github-script@v6 - if: github.event_name == 'pull_request' - with: - script: | - const script = require('.github/scripts/comment') - const header = '# Slither report' - const body = `${{ steps.slither.outputs.stdout }}` - await script({ github, context, header, body }) - - - name: ☁️ Upload SARIF file - uses: github/codeql-action/upload-sarif@v2 - if: always() - with: - sarif_file: ${{ steps.slither.outputs.sarif }} - test: - name: ✅ Test - runs-on: ubuntu-latest - env: - PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} - POLYGON_ALCHEMY_KEY: ${{ secrets.POLYGON_ALCHEMY_KEY }} - ETH_ALCHEMY_KEY: ${{ secrets.ETH_ALCHEMY_KEY }} - steps: - - name: 🛑 Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.11.0 - - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 - - - name: ⎔ Setup node ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - name: 🐢 Cache node modules - id: cache-npm - uses: actions/cache@v3 - env: - cache-name: cache-node-modules - with: - # npm cache files are stored in `~/.npm` on Linux/macOS - path: ~/.npm - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} - name: 📚 List the state of node modules - continue-on-error: true - run: npm list - - - name: 📥 Download deps - run: npm install - - - name: 🤔 Run smart contract tests - run: MINING=true npx hardhat test - - - name: 🏗️ Save build - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "fix: gas report" - audit: - name: 👁️ Audit - runs-on: ubuntu-latest - steps: - - name: 🛑 Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.11.0 - - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 - - - name: 📥 Download deps - run: cd build && git clone https://github.com/byterocket/c4udit && cd c4udit && go build . - - - name: 😡 Run contract auditor - run: cd build && ./c4udit/c4udit -s ../contracts/ - - - name: 🏗️ Save build - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "fix: contract audit" diff --git a/.github/workflows/inactive.yml b/.github/workflows/inactive.yml deleted file mode 100644 index d5cd3cf..0000000 --- a/.github/workflows/inactive.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Close inactive issues -on: - schedule: - - cron: "30 1 * * *" - -jobs: - close-issues: - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - steps: - - uses: actions/stale@v5 - with: - days-before-issue-stale: 30 - days-before-issue-close: 14 - stale-issue-label: "stale" - stale-issue-message: "This issue is stale because it has been open for 30 days with no activity." - close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale." - days-before-pr-stale: -1 - days-before-pr-close: -1 - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/react.js.yml b/.github/workflows/react.js.yml new file mode 100644 index 0000000..afbe8c6 --- /dev/null +++ b/.github/workflows/react.js.yml @@ -0,0 +1,39 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: React Build + +on: + push: + branches: + - '**' # matches every branch + pull_request: + branches: + - '**' # matches every branch + +defaults: + run: + working-directory: frontend/ + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [16.x] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Set up Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build diff --git a/.vscode/settings.json b/.vscode/settings.json index 5297a76..4eebeb0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "solidity.packageDefaultDependenciesDirectory": "contracts/node_modules", + "solidity.packageDefaultDependenciesDirectory": "contracts/node_modules" } \ No newline at end of file diff --git a/LICENSE b/LICENSE index f288702..99c9351 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,21 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +MIT License + +Copyright (c) 2022 masonchain + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 3470c62..a5b9558 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,44 @@ -![opengraph](./frontend/public/opengraph.png) +![opengraph](frontend/src/static/images/opengraph.png) -# Badger +# Badger Primitive & Protocol -Badger is a primitive driving seamless onchain creation of Organizations and Badges that can be used to turbocharge the granular power of onchain access for every member. With a unique model in place, an Organization can mint Badges that act as keys to access all of the existing Web3 gates and locks using a forward-looking and secure access policy implementation. +In this repository is contained the base primitive of Badger (`BadgerOrganization.sol`) as well as the Badger protocol (`Badger.sol`) on top of it. -Built on the standard [ERC-1155](https://eips.ethereum.org/EIPS/eip-1155), Badges allow for middle-out management of any onchain organization. With this capability, every consumer of Badger has the ability to choose if their organization will be top-down, middle-out or bottom-up in nature. +## Badger Primitive + +The Badger primitive is a simple contract that allows for the creation of a collection of NFTs that are all owned by the same address. This is useful for organizations that want to issue NFTs to their members, but don't want to have to manage a collection of NFTs for each member. + +With the unique model in place an on-chain Organization can generate the keys needed to access all of the existing Web3 gates and locks. + +Built on the standard ERC-1155, Badges allow for top-down management of any on-chain organization. + +* The tokens can be account bound, but they don't have to be. +* There can be custom signers. + * This unlocks first-party claim gates and external development under the control of the Organization owner. +* The tokens can be minted and burned. +* The tokens can operate with trie-like permissions. + * Achieved without breaking the composability of any standard or any of the existing locks in the market. Anyone that conforms to already released standards will be able to use Badger as keys. +* The tokens can be used as a way to bootstrap on-chain roles and token-gated areas for their members. ## Running The Dapp -Getting up and running with Badger is simple, although there are many pieces to get running. We've included a docker-compose file that will get you up and running with the Badger dapp and all of its dependencies such as: - -* Local Hardhat Node -* Database running on Postgres -* Redis enabling the use of Websockets -* Backend running on Django -* Frontend running on React - -Packed into a single command, you can get up and running with Badger in no time. - -### Prerequisites - -Running Badger is simple due to the use of Docker, but there are a few things you'll need to get started; primarily the things needed to run a Docker container. - - Node.js - Docker -#### Paid services - -- [FontAwesomePro Account](https://fontawesome.com/account#pro-package-tokens) (for icons) -- [Pinata Account](https://docs.pinata.cloud/pinata-api/authentication) (for IPFS) - -### Running the Dapp - -- [Fork the repository](https://github.com/flipsidecrypto/badger/fork). -- Setup `.env` to reflect `example.env`. - - To run Badger locally you only need to set: - - `NPM_TOKEN` - - `API_PINATA_API_KEY` - - `API_PINATA_API_SECRET_KEY` -- Run `docker compose up --build --remove-orphans` in an active terminal within the root directory. +### Prerequisites +- fork the repo +- setup `.env` to reflect `example.env` with your choosing of keys +- terminal: `docker compose build` (let everything build) +- grab the contract addresses that were just deployed with docker (the address will remain the same) in `.env` +- terminal: `docker compose up --build` ### Helpers -Although everything has been bundled into a single command, there are a few helpers to make your life easier. Hopefully, you never need to run these but if you are making changes or working on a pull request, you likely will need one of them. +- Migrating the database: The Badger backend is built using Django. Anytime there are changes to the database schema the migrations need to be made and applied. If you're just forking, we've already pre-built the migrations, you just need to apply them to your database. Migrations are automatically applied when you build using Docker, but if you have an issue this is how you can migrate the database manually. + - terminal: `docker compose run --rm web python manage.py migrate` -#### Database Migrations - -The Badger backend is built using Django. Anytime there are changes to the database schema the migrations need to be made and applied. - -> If you're just forking, we've already pre-built the migrations, you just need to apply them to your database. Migrations are automatically applied when you build using Docker, but if you have an issue this is how you can migrate the database manually. - -- terminal: `docker compose run --rm badger_server python manage.py migrate` - -#### Testing The Contract - -Testing contracts is a critical step before deployment. We've included a few helpers to make this process easier. - -- terminal: `docker compose run --rm badger_node node npx hardhat coverage --network localhost` +To run the tests with coverage included: +- terminal: `npx hardhat coverage --network localhost` ## Contract Tests diff --git a/TODO b/TODO new file mode 100644 index 0000000..292762a --- /dev/null +++ b/TODO @@ -0,0 +1,35 @@ +This todo is using Kanban format. Every number next to it is the priority. Just choose what you want and knock it out: + +[] Todo +[2] - API Endpoint that returns which "tutorial state" should be shown on a users profile page. +[1] - Enable SSL on Netlify + + [] Design + [1] Error message + [1] Check box design + +[] Starting +[5] - You can sometimes get to the distribute badge page even though an org has no badges. +[9] - ENS name not being put into user/wallet obj on creation + +[] In Progress +[9] - Loading indicator +[9] - Data validation for contract writing + +[] Review +[2] - Possibly use local cache for org and user data instead of context + +[] Done +[9] - Improve UX and contracct interaction BS nuances. +[9] - Add delegates back to post requests when functional in serializer +[2] - Contract integration +[6] - Standing API to process base requests of v2. @chance +[10]- Finish the static implementation of the Dashboard pages. @mason + - Determine placement of API post and get requests + - Determine when we're running the transactions + - Post request after a transaction is completed to show that the obj in database is not a ghost obj. +[3] - Wallet integration. + - Pending completion of contract integration. +[3] - Setup redirecting of the actual deployment. + - This will take just a few seconds. It would be nice to go ahead and get namespace. Should just do this next time someone hits a wall. + - Reminder that FontAwesome is going to be bad when deploying due to it's key management process. \ No newline at end of file diff --git a/api/.dockerignore b/api/.dockerignore new file mode 100644 index 0000000..21719f5 --- /dev/null +++ b/api/.dockerignore @@ -0,0 +1,10 @@ +# Ignore the following in Docker context transfer ++**/.git ++**/.gitignore ++**/.gitmodules ++**/.dockerignore ++**/Dockerfile ++**/README.md ++**/LICENSE + +***/database/ diff --git a/api/Dockerfile.dev b/api/Dockerfile.dev index 78c3d98..22e9d2c 100644 --- a/api/Dockerfile.dev +++ b/api/Dockerfile.dev @@ -1,16 +1,6 @@ FROM python:3.9 - -ARG NODE_IP - ENV PYTHONUNBUFFERED=1 - WORKDIR /code - COPY requirements.txt /code/ - RUN pip install -r requirements.txt - -COPY . /code/ - -ENV NODE_IP=$NODE_IP - +COPY . /code/ \ No newline at end of file diff --git a/api/README.md b/api/README.md deleted file mode 100644 index 7c7de3a..0000000 --- a/api/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Badger API - -The interface backend of Badger is driven by Django, Redis and Postgres. The database is prepared to support simple HTTP requests and WebSockets. - -## The Indexer Checking The Chain - -There are many types of EVM listeners available, each with their own purpose. Badger includes 2 key types of listeners: -* `backfill` - A one-time listener that will backfill the database with all events of a given type. -* `listen_for` - A listener that will listen for new events of a given type. - -A `backfill` is used to populate/seed the database with all events of a given type. For Badger, in the local configuration this is not required as the node will always start at block `0`. In a production environment, backfill should be ran on a regular basis to ensure that even when blocks are missed, the database will be up to date. - -Given a long horizon, a backfill can take a long time to complete. To mitigate this, the `backfill` command is designed to be run in parallel. The `backfill` command will spawn a number of processes equal to the number of cores on the machine. Each process will listen for events of a given type and write them to the database. The `backfill` command will not exit until all processes have completed. - -The `listen_for` command is designed to be run in a long-running process. It will listen for new events of a given type and write them to the database. The `listen_for` command will not exit until the process is killed and if it crashes, it will be restarted by Docker. - -By default, everything is configured for you in the `docker-compose.yml` file. - -**When using management commands, the available types are:** - -* `organization` -* `badge` - -in place of the `` - -```bash -docker-compose run --rm badger_server python manage.py backfill_ -``` - -```bash -docker-compose run --rm badger_server python manage.py listen_for_ -``` \ No newline at end of file diff --git a/api/abis.py b/api/abis.py index 7ec77e6..cc52e61 100644 --- a/api/abis.py +++ b/api/abis.py @@ -1,46 +1,1778 @@ -import json -import os +FACTORY_EVENTS = [ + "event OrganizationCreated(address indexed,address indexed,address indexed)", + # "event OwnershipTransferred(address indexed,address indexed)", + "event VersionUpdated(address indexed,address indexed,bytes32 indexed,uint256,bool)", +] -from web3 import Web3 +ORGANIZATION_EVENTS = [ + "event BadgeUpdated(uint256 indexed,uint256 indexed,bytes32 indexed,uint256)", + "event BadgeForfeited(uint256 indexed,uint256 indexed,bytes indexed)", + "event DelegateUpdated(uint256 indexed,address indexed,bool indexed)", + "event OrganizationUpdated(string)", + "event OwnershipTransferred(address indexed,address indexed)", + "event PaymentTokenDeposited(uint256 indexed,address indexed,uint256 indexed)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", +] -FACTORY_ABI = None -ORGANIZATION_ABI = None -FACTORY_ABI_FULL = None -ORGANIZATION_ABI_FULL = None -BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +FACTORY = [ + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "organization", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "OrganizationCreated", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": True, + "internalType": "bytes32", + "name": "licenseKey", + "type": "bytes32" + }, + { + "indexed": False, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": False, + "internalType": "bool", + "name": "locked", + "type": "bool" + } + ], + "name": "VersionUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_deployer", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "string", + "name": "_organizationURI", + "type": "string" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "createOrganization", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "execTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_versionKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "getLicenseKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "getVersionKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_locked", + "type": "bool" + } + ], + "name": "setVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "versionKeyToFunded", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "versions", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "licenseKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "locked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] -# Load the JSON ABI for the Factory and Organization contracts -with open(os.path.join(BASE_DIR, "abis", "Badger.json")) as f: - FACTORY_ABI = json.load(f) - -with open(os.path.join(BASE_DIR, "abis", "BadgerOrganization.json")) as f: - ORGANIZATION_ABI = json.load(f) - -with open(os.path.join(BASE_DIR, "abis/full", "Badger.json")) as f: - FACTORY_ABI_FULL = json.load(f) - -with open(os.path.join(BASE_DIR, "abis/full", "BadgerOrganization.json")) as f: - ORGANIZATION_ABI_FULL = json.load(f) - -# Establish the events that we are watching for -FACTORY_EVENTS = [event for event in FACTORY_ABI if event.startswith("event")] - -ORGANIZATION_EVENTS = [event for event in ORGANIZATION_ABI if event.startswith("event")] - -def calculate_signatures(EVENTS): - CLEANED_TOPICS = [ - topic.replace("event ", "").replace(" indexed", "") for topic in EVENTS - ] - - def hex_signature(string): - return Web3.keccak(text=string).hex() - - TOPIC_SIGNATURES = {hex_signature(topic): topic for topic in CLEANED_TOPICS} - - return TOPIC_SIGNATURES - -FACTORY_TOPIC_SIGNATURES = calculate_signatures(FACTORY_EVENTS) - -ORGANIZATION_TOPIC_SIGNATURES = calculate_signatures(ORGANIZATION_EVENTS) \ No newline at end of file +ORGANIZATION = [ + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": False, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": True, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": True, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "BadgeForfeited", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": True, + "internalType": "uint256", + "name": "config", + "type": "uint256" + }, + { + "indexed": True, + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "indexed": False, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadgeUpdated", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": True, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": True, + "internalType": "bool", + "name": "isDelegate", + "type": "bool" + } + ], + "name": "DelegateUpdated", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": False, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": False, + "internalType": "string", + "name": "organizationURI", + "type": "string" + } + ], + "name": "OrganizationUpdated", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": True, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": True, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "PaymentTokenDeposited", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": False, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": False, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": True, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": False, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": False, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": False, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": True, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [], + "name": "DOLPHIN_ETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "badgeDelegateKeyToIsDelegate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "badges", + "outputs": [ + { + "internalType": "uint256", + "name": "config", + "type": "uint256" + }, + { + "internalType": "string", + "name": "uri", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct BadgerScoutInterface.PaymentToken", + "name": "paymentToken", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "claimMint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "depositERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "execTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "forfeit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getAccountBound", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getClaimable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "string", + "name": "_organizationURI", + "type": "string" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "name": "isDelegate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "leaderMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_tos", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "leaderMintBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_tos", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "leaderMintFullBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "organizationURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_froms", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "revokeBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_froms", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "revokeFullBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_accountBound", + "type": "bool" + } + ], + "name": "setAccountBound", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_claimable", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_accountBound", + "type": "bool" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct BadgerScoutInterface.PaymentToken", + "name": "_paymentToken", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "_delegates", + "type": "address[]" + } + ], + "name": "setBadge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + } + ], + "name": "setBadgeURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_claimable", + "type": "bool" + } + ], + "name": "setClaimable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "_delegates", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "_isDelegate", + "type": "bool[]" + } + ], + "name": "setDelegates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "_delegates", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "_isDelegate", + "type": "bool[]" + } + ], + "name": "setDelegatesBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + } + ], + "name": "setOrganizationURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct BadgerScoutInterface.PaymentToken", + "name": "_paymentToken", + "type": "tuple" + } + ], + "name": "setPaymentToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + } + ], + "name": "setSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] diff --git a/api/abis/Badger.json b/api/abis/Badger.json deleted file mode 100644 index d2fb139..0000000 --- a/api/abis/Badger.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - "constructor(address)", - "event OrganizationCreated(address indexed,address indexed,uint256 indexed)", - "function createOrganization(tuple(address,string,string,string,string)) returns (address, uint256)", - "function getOrganization(uint256) view returns (address)", - "function implementation() view returns (address)", - "function organizations() view returns (uint256)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerForfeitForbidden.json b/api/abis/BadgerForfeitForbidden.json deleted file mode 100644 index 7a13727..0000000 --- a/api/abis/BadgerForfeitForbidden.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function forbidden(address,uint256) view returns (bool)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerForfeitHook.json b/api/abis/BadgerForfeitHook.json deleted file mode 100644 index b942126..0000000 --- a/api/abis/BadgerForfeitHook.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerHook.json b/api/abis/BadgerHook.json deleted file mode 100644 index b942126..0000000 --- a/api/abis/BadgerHook.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerHookBlocklist.json b/api/abis/BadgerHookBlocklist.json deleted file mode 100644 index f2851db..0000000 --- a/api/abis/BadgerHookBlocklist.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function blocked(address,address) view returns (bool)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerHookHook.json b/api/abis/BadgerHookHook.json deleted file mode 100644 index b942126..0000000 --- a/api/abis/BadgerHookHook.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerHooked.json b/api/abis/BadgerHooked.json deleted file mode 100644 index 74680d1..0000000 --- a/api/abis/BadgerHooked.json +++ /dev/null @@ -1,10 +0,0 @@ -[ - "event HookConfigured(bytes32 indexed,bytes)", - "event HookUpdated(bytes32 indexed,address,bool indexed)", - "function BEFORE_FORFEIT() view returns (bytes32)", - "function BEFORE_MINT() view returns (bytes32)", - "function BEFORE_REVOKE() view returns (bytes32)", - "function BEFORE_SET_HOOK() view returns (bytes32)", - "function BEFORE_TRANSFER() view returns (bytes32)", - "function getHooks(bytes32) view returns (address[])" -] diff --git a/api/abis/BadgerManaged.json b/api/abis/BadgerManaged.json deleted file mode 100644 index ad364b1..0000000 --- a/api/abis/BadgerManaged.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - "event ManagerConfigured(bytes32 indexed,bytes)", - "event ManagerUpdated(bytes32 indexed,bool indexed)", - "function managerKeyToIsManager(bytes32) view returns (bool)" -] diff --git a/api/abis/BadgerManager.json b/api/abis/BadgerManager.json deleted file mode 100644 index dd86501..0000000 --- a/api/abis/BadgerManager.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function config(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerManagerClaimable.json b/api/abis/BadgerManagerClaimable.json deleted file mode 100644 index df02187..0000000 --- a/api/abis/BadgerManagerClaimable.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function amounts(address,uint256) view returns (uint256)", - "function config(bytes)", - "function mint(address,uint256,bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerManagerSignature.json b/api/abis/BadgerManagerSignature.json deleted file mode 100644 index 0d7970c..0000000 --- a/api/abis/BadgerManagerSignature.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function config(bytes)", - "function mint(address,uint256,uint256,bytes,bytes,uint256,uint256)", - "function signers(address,uint256) view returns (address)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerMintHook.json b/api/abis/BadgerMintHook.json deleted file mode 100644 index b942126..0000000 --- a/api/abis/BadgerMintHook.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerMintMax.json b/api/abis/BadgerMintMax.json deleted file mode 100644 index b851ee2..0000000 --- a/api/abis/BadgerMintMax.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function maxMint(address,uint256) view returns (uint256)", - "function minted(address,uint256,address) view returns (uint256)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerMintMaxAllowance.json b/api/abis/BadgerMintMaxAllowance.json deleted file mode 100644 index b851ee2..0000000 --- a/api/abis/BadgerMintMaxAllowance.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function maxMint(address,uint256) view returns (uint256)", - "function minted(address,uint256,address) view returns (uint256)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerMintMaxSupply.json b/api/abis/BadgerMintMaxSupply.json deleted file mode 100644 index 12613fc..0000000 --- a/api/abis/BadgerMintMaxSupply.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function maxSupply(address,uint256) view returns (uint256)", - "function supportsInterface(bytes4) view returns (bool)", - "function totalSupply(address,uint256) view returns (uint256)" -] diff --git a/api/abis/BadgerMintSelf.json b/api/abis/BadgerMintSelf.json deleted file mode 100644 index d2a51b6..0000000 --- a/api/abis/BadgerMintSelf.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function selfOperated(address,uint256) view returns (bool)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerOrganization.json b/api/abis/BadgerOrganization.json deleted file mode 100644 index f90298c..0000000 --- a/api/abis/BadgerOrganization.json +++ /dev/null @@ -1,53 +0,0 @@ -[ - "event ApprovalForAll(address indexed,address indexed,bool)", - "event HookConfigured(bytes32 indexed,bytes)", - "event HookUpdated(bytes32 indexed,address,bool indexed)", - "event Initialized(uint8)", - "event ManagerConfigured(bytes32 indexed,bytes)", - "event ManagerUpdated(bytes32 indexed,bool indexed)", - "event OrganizationUpdated(string)", - "event OwnershipTransferred(address indexed,address indexed)", - "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", - "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", - "event URI(string,uint256 indexed)", - "function BEFORE_FORFEIT() view returns (bytes32)", - "function BEFORE_MINT() view returns (bytes32)", - "function BEFORE_REVOKE() view returns (bytes32)", - "function BEFORE_SET_HOOK() view returns (bytes32)", - "function BEFORE_TRANSFER() view returns (bytes32)", - "function balanceOf(address,uint256) view returns (uint256)", - "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", - "function configHook(bytes32,address,bytes)", - "function configManager(address,bytes)", - "function configManager(uint256,address,bytes)", - "function contractURI() view returns (string)", - "function forfeit(uint256,uint256,bytes)", - "function getHooks(bytes32) view returns (address[])", - "function initialize(tuple(address,string,string,string,string))", - "function isApprovedForAll(address,address) view returns (bool)", - "function isBadgeManager(uint256,address) view returns (bool)", - "function isOrganizationManager(address) view returns (bool)", - "function managerKeyToIsManager(bytes32) view returns (bool)", - "function mint(address,uint256,uint256,bytes)", - "function mintBatch(address[],uint256,uint256[],bytes)", - "function multicall(bytes[]) payable returns (bytes[])", - "function name() view returns (string)", - "function organizationURI() view returns (string)", - "function owner() view returns (address)", - "function renounceOwnership()", - "function revoke(address,uint256,uint256)", - "function revokeBatch(address[],uint256,uint256[])", - "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", - "function safeTransferFrom(address,address,uint256,uint256,bytes)", - "function setApprovalForAll(address,bool)", - "function setBadgeURI(uint256,string)", - "function setHooks(bytes32,address[],bool[])", - "function setManagers(address[],bool[])", - "function setManagers(uint256,address[],bool[])", - "function setOrganizationURI(string)", - "function supportsInterface(bytes4) view returns (bool)", - "function symbol() view returns (string)", - "function transferOwnership(address)", - "function uri(uint256) view returns (string)", - "function uris(uint256) view returns (string)" -] diff --git a/api/abis/BadgerOrganizationLogic.json b/api/abis/BadgerOrganizationLogic.json deleted file mode 100644 index f5f29a8..0000000 --- a/api/abis/BadgerOrganizationLogic.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - "constructor()", - "event ApprovalForAll(address indexed,address indexed,bool)", - "event HookConfigured(bytes32 indexed,bytes)", - "event HookUpdated(bytes32 indexed,address,bool indexed)", - "event Initialized(uint8)", - "event ManagerConfigured(bytes32 indexed,bytes)", - "event ManagerUpdated(bytes32 indexed,bool indexed)", - "event OrganizationUpdated(string)", - "event OwnershipTransferred(address indexed,address indexed)", - "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", - "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", - "event URI(string,uint256 indexed)", - "function BEFORE_FORFEIT() view returns (bytes32)", - "function BEFORE_MINT() view returns (bytes32)", - "function BEFORE_REVOKE() view returns (bytes32)", - "function BEFORE_SET_HOOK() view returns (bytes32)", - "function BEFORE_TRANSFER() view returns (bytes32)", - "function balanceOf(address,uint256) view returns (uint256)", - "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", - "function configHook(bytes32,address,bytes)", - "function configManager(address,bytes)", - "function configManager(uint256,address,bytes)", - "function getHooks(bytes32) view returns (address[])", - "function initialize(tuple(address,string,string,string,string))", - "function isApprovedForAll(address,address) view returns (bool)", - "function isBadgeManager(uint256,address) view returns (bool)", - "function isOrganizationManager(address) view returns (bool)", - "function managerKeyToIsManager(bytes32) view returns (bool)", - "function name() view returns (string)", - "function organizationURI() view returns (string)", - "function owner() view returns (address)", - "function renounceOwnership()", - "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", - "function safeTransferFrom(address,address,uint256,uint256,bytes)", - "function setApprovalForAll(address,bool)", - "function setBadgeURI(uint256,string)", - "function setHooks(bytes32,address[],bool[])", - "function setManagers(address[],bool[])", - "function setManagers(uint256,address[],bool[])", - "function setOrganizationURI(string)", - "function supportsInterface(bytes4) view returns (bool)", - "function symbol() view returns (string)", - "function transferOwnership(address)", - "function uri(uint256) view returns (string)", - "function uris(uint256) view returns (string)" -] diff --git a/api/abis/BadgerRevokeForbidden.json b/api/abis/BadgerRevokeForbidden.json deleted file mode 100644 index 7a13727..0000000 --- a/api/abis/BadgerRevokeForbidden.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function forbidden(address,uint256) view returns (bool)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerRevokeHook.json b/api/abis/BadgerRevokeHook.json deleted file mode 100644 index b942126..0000000 --- a/api/abis/BadgerRevokeHook.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerTransferBlocklist.json b/api/abis/BadgerTransferBlocklist.json deleted file mode 100644 index f2851db..0000000 --- a/api/abis/BadgerTransferBlocklist.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function blocked(address,address) view returns (bool)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerTransferBound.json b/api/abis/BadgerTransferBound.json deleted file mode 100644 index 16ccda2..0000000 --- a/api/abis/BadgerTransferBound.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function accountBound(address,uint256) view returns (bool)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerTransferBoundManaged.json b/api/abis/BadgerTransferBoundManaged.json deleted file mode 100644 index 16ccda2..0000000 --- a/api/abis/BadgerTransferBoundManaged.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function accountBound(address,uint256) view returns (bool)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/BadgerTransferHook.json b/api/abis/BadgerTransferHook.json deleted file mode 100644 index b942126..0000000 --- a/api/abis/BadgerTransferHook.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)", - "function supportsInterface(bytes4) view returns (bool)" -] diff --git a/api/abis/IBadger.json b/api/abis/IBadger.json deleted file mode 100644 index 7aa0bce..0000000 --- a/api/abis/IBadger.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - "event OrganizationCreated(address indexed,address indexed,uint256 indexed)", - "function createOrganization(tuple(address,string,string,string,string)) returns (address, uint256)", - "function getOrganization(uint256) view returns (address)" -] diff --git a/api/abis/IBadgerConfigured.json b/api/abis/IBadgerConfigured.json deleted file mode 100644 index a723d1a..0000000 --- a/api/abis/IBadgerConfigured.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function config(bytes)" -] diff --git a/api/abis/IBadgerHook.json b/api/abis/IBadgerHook.json deleted file mode 100644 index b04cf0d..0000000 --- a/api/abis/IBadgerHook.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - "function CONFIG_SCHEMA() view returns (string)", - "function EXECUTE_SCHEMA() view returns (string)", - "function config(bytes)", - "function execute(bytes)" -] diff --git a/api/abis/IBadgerHooked.json b/api/abis/IBadgerHooked.json deleted file mode 100644 index e7e5281..0000000 --- a/api/abis/IBadgerHooked.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - "event HookConfigured(bytes32 indexed,bytes)", - "event HookUpdated(bytes32 indexed,address,bool indexed)", - "function getHooks(bytes32) view returns (address[])" -] diff --git a/api/abis/IBadgerManaged.json b/api/abis/IBadgerManaged.json deleted file mode 100644 index a0f39ca..0000000 --- a/api/abis/IBadgerManaged.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - "event ManagerConfigured(bytes32 indexed,bytes)", - "event ManagerUpdated(bytes32 indexed,bool indexed)" -] diff --git a/api/abis/IBadgerOrganization.json b/api/abis/IBadgerOrganization.json deleted file mode 100644 index d1bc8d6..0000000 --- a/api/abis/IBadgerOrganization.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - "function forfeit(uint256,uint256,bytes)", - "function mint(address,uint256,uint256,bytes)", - "function mintBatch(address[],uint256,uint256[],bytes)", - "function revoke(address,uint256,uint256)", - "function revokeBatch(address[],uint256,uint256[])" -] diff --git a/api/abis/IBadgerOrganizationLogic.json b/api/abis/IBadgerOrganizationLogic.json deleted file mode 100644 index 6cf60c2..0000000 --- a/api/abis/IBadgerOrganizationLogic.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - "event OrganizationUpdated(string)", - "function configHook(bytes32,address,bytes)", - "function configManager(address,bytes)", - "function configManager(uint256,address,bytes)", - "function isBadgeManager(uint256,address) view returns (bool)", - "function isOrganizationManager(address) view returns (bool)", - "function setBadgeURI(uint256,string)", - "function setHooks(bytes32,address[],bool[])", - "function setManagers(address[],bool[])", - "function setManagers(uint256,address[],bool[])", - "function setOrganizationURI(string)" -] diff --git a/api/abis/Multicallable.json b/api/abis/Multicallable.json deleted file mode 100644 index 18696a7..0000000 --- a/api/abis/Multicallable.json +++ /dev/null @@ -1,3 +0,0 @@ -[ - "function multicall(bytes[]) payable returns (bytes[])" -] diff --git a/api/abis/full/Badger.json b/api/abis/full/Badger.json deleted file mode 100644 index d3bf573..0000000 --- a/api/abis/full/Badger.json +++ /dev/null @@ -1,153 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract BadgerOrganization", - "name": "organization", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "name": "OrganizationCreated", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organizationStruct", - "type": "tuple" - } - ], - "name": "createOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "badgerOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_organizationId", - "type": "uint256" - } - ], - "name": "getOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizations", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerForfeitForbidden.json b/api/abis/full/BadgerForfeitForbidden.json deleted file mode 100644 index 431277b..0000000 --- a/api/abis/full/BadgerForfeitForbidden.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "forbidden", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerForfeitHook.json b/api/abis/full/BadgerForfeitHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/api/abis/full/BadgerForfeitHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerHook.json b/api/abis/full/BadgerHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/api/abis/full/BadgerHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerHookBlocklist.json b/api/abis/full/BadgerHookBlocklist.json deleted file mode 100644 index 1019c9a..0000000 --- a/api/abis/full/BadgerHookBlocklist.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "blocked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerHookHook.json b/api/abis/full/BadgerHookHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/api/abis/full/BadgerHookHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerHooked.json b/api/abis/full/BadgerHooked.json deleted file mode 100644 index b622e63..0000000 --- a/api/abis/full/BadgerHooked.json +++ /dev/null @@ -1,130 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerManaged.json b/api/abis/full/BadgerManaged.json deleted file mode 100644 index bab180e..0000000 --- a/api/abis/full/BadgerManaged.json +++ /dev/null @@ -1,59 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerManager.json b/api/abis/full/BadgerManager.json deleted file mode 100644 index f672285..0000000 --- a/api/abis/full/BadgerManager.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerManagerClaimable.json b/api/abis/full/BadgerManagerClaimable.json deleted file mode 100644 index 953eac0..0000000 --- a/api/abis/full/BadgerManagerClaimable.json +++ /dev/null @@ -1,94 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "amounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerManagerSignature.json b/api/abis/full/BadgerManagerSignature.json deleted file mode 100644 index 8e4da36..0000000 --- a/api/abis/full/BadgerManagerSignature.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "signers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerMintHook.json b/api/abis/full/BadgerMintHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/api/abis/full/BadgerMintHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerMintMax.json b/api/abis/full/BadgerMintMax.json deleted file mode 100644 index 1ba288f..0000000 --- a/api/abis/full/BadgerMintMax.json +++ /dev/null @@ -1,126 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "minted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerMintMaxAllowance.json b/api/abis/full/BadgerMintMaxAllowance.json deleted file mode 100644 index 1ba288f..0000000 --- a/api/abis/full/BadgerMintMaxAllowance.json +++ /dev/null @@ -1,126 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "minted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerMintMaxSupply.json b/api/abis/full/BadgerMintMaxSupply.json deleted file mode 100644 index 4c34b58..0000000 --- a/api/abis/full/BadgerMintMaxSupply.json +++ /dev/null @@ -1,121 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerMintSelf.json b/api/abis/full/BadgerMintSelf.json deleted file mode 100644 index 49d64ae..0000000 --- a/api/abis/full/BadgerMintSelf.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "selfOperated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerOrganization.json b/api/abis/full/BadgerOrganization.json deleted file mode 100644 index cba49e7..0000000 --- a/api/abis/full/BadgerOrganization.json +++ /dev/null @@ -1,1034 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_slotHook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "contractURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "forfeit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organization", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tos", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mintBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizationURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "revoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_froms", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - } - ], - "name": "revokeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uris", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerOrganizationLogic.json b/api/abis/full/BadgerOrganizationLogic.json deleted file mode 100644 index 13fbd46..0000000 --- a/api/abis/full/BadgerOrganizationLogic.json +++ /dev/null @@ -1,882 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_slotHook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organization", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizationURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uris", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerRevokeForbidden.json b/api/abis/full/BadgerRevokeForbidden.json deleted file mode 100644 index 431277b..0000000 --- a/api/abis/full/BadgerRevokeForbidden.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "forbidden", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerRevokeHook.json b/api/abis/full/BadgerRevokeHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/api/abis/full/BadgerRevokeHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerTransferBlocklist.json b/api/abis/full/BadgerTransferBlocklist.json deleted file mode 100644 index 1019c9a..0000000 --- a/api/abis/full/BadgerTransferBlocklist.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "blocked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerTransferBound.json b/api/abis/full/BadgerTransferBound.json deleted file mode 100644 index 014b4cb..0000000 --- a/api/abis/full/BadgerTransferBound.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountBound", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerTransferBoundManaged.json b/api/abis/full/BadgerTransferBoundManaged.json deleted file mode 100644 index 014b4cb..0000000 --- a/api/abis/full/BadgerTransferBoundManaged.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountBound", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/BadgerTransferHook.json b/api/abis/full/BadgerTransferHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/api/abis/full/BadgerTransferHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/ContextUpgradeable.json b/api/abis/full/ContextUpgradeable.json deleted file mode 100644 index a4152bb..0000000 --- a/api/abis/full/ContextUpgradeable.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/api/abis/full/ERC1155Upgradeable.json b/api/abis/full/ERC1155Upgradeable.json deleted file mode 100644 index 283c185..0000000 --- a/api/abis/full/ERC1155Upgradeable.json +++ /dev/null @@ -1,327 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/ERC165.json b/api/abis/full/ERC165.json deleted file mode 100644 index 53fa000..0000000 --- a/api/abis/full/ERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/ERC165Upgradeable.json b/api/abis/full/ERC165Upgradeable.json deleted file mode 100644 index fcf0494..0000000 --- a/api/abis/full/ERC165Upgradeable.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IBadger.json b/api/abis/full/IBadger.json deleted file mode 100644 index 3558d82..0000000 --- a/api/abis/full/IBadger.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract BadgerOrganization", - "name": "organization", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "name": "OrganizationCreated", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organizationStruct", - "type": "tuple" - } - ], - "name": "createOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "badgerOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_organizationId", - "type": "uint256" - } - ], - "name": "getOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IBadgerConfigured.json b/api/abis/full/IBadgerConfigured.json deleted file mode 100644 index d4b85a1..0000000 --- a/api/abis/full/IBadgerConfigured.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/api/abis/full/IBadgerHook.json b/api/abis/full/IBadgerHook.json deleted file mode 100644 index ab60ba5..0000000 --- a/api/abis/full/IBadgerHook.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/api/abis/full/IBadgerHooked.json b/api/abis/full/IBadgerHooked.json deleted file mode 100644 index 3ac90b8..0000000 --- a/api/abis/full/IBadgerHooked.json +++ /dev/null @@ -1,65 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IBadgerManaged.json b/api/abis/full/IBadgerManaged.json deleted file mode 100644 index dec65d1..0000000 --- a/api/abis/full/IBadgerManaged.json +++ /dev/null @@ -1,40 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - } -] diff --git a/api/abis/full/IBadgerOrganization.json b/api/abis/full/IBadgerOrganization.json deleted file mode 100644 index e704b62..0000000 --- a/api/abis/full/IBadgerOrganization.json +++ /dev/null @@ -1,127 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "forfeit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tos", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mintBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "revoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_froms", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - } - ], - "name": "revokeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/api/abis/full/IBadgerOrganizationLogic.json b/api/abis/full/IBadgerOrganizationLogic.json deleted file mode 100644 index 9049b98..0000000 --- a/api/abis/full/IBadgerOrganizationLogic.json +++ /dev/null @@ -1,217 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_hook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/api/abis/full/IERC1155MetadataURIUpgradeable.json b/api/abis/full/IERC1155MetadataURIUpgradeable.json deleted file mode 100644 index a4d8e9c..0000000 --- a/api/abis/full/IERC1155MetadataURIUpgradeable.json +++ /dev/null @@ -1,314 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IERC1155ReceiverUpgradeable.json b/api/abis/full/IERC1155ReceiverUpgradeable.json deleted file mode 100644 index 66694c4..0000000 --- a/api/abis/full/IERC1155ReceiverUpgradeable.json +++ /dev/null @@ -1,99 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC1155BatchReceived", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC1155Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IERC1155Upgradeable.json b/api/abis/full/IERC1155Upgradeable.json deleted file mode 100644 index f8391d5..0000000 --- a/api/abis/full/IERC1155Upgradeable.json +++ /dev/null @@ -1,295 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IERC165.json b/api/abis/full/IERC165.json deleted file mode 100644 index 53fa000..0000000 --- a/api/abis/full/IERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/IERC165Upgradeable.json b/api/abis/full/IERC165Upgradeable.json deleted file mode 100644 index 53fa000..0000000 --- a/api/abis/full/IERC165Upgradeable.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/api/abis/full/Initializable.json b/api/abis/full/Initializable.json deleted file mode 100644 index a4152bb..0000000 --- a/api/abis/full/Initializable.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/api/abis/full/Multicallable.json b/api/abis/full/Multicallable.json deleted file mode 100644 index 0950753..0000000 --- a/api/abis/full/Multicallable.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/api/abis/full/OwnableUpgradeable.json b/api/abis/full/OwnableUpgradeable.json deleted file mode 100644 index a5fdc5e..0000000 --- a/api/abis/full/OwnableUpgradeable.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/api/api/asgi.py b/api/api/asgi.py index c79b90d..4214d20 100644 --- a/api/api/asgi.py +++ b/api/api/asgi.py @@ -1,18 +1,16 @@ +""" +ASGI config for api project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ +""" + import os -from channels.routing import ProtocolTypeRouter, URLRouter -from channels.auth import AuthMiddlewareStack -from channels.security.websocket import AllowedHostsOriginValidator - from django.core.asgi import get_asgi_application -from api.routing import websocket_urlpatterns - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api.settings') application = get_asgi_application() - -application = ProtocolTypeRouter({ - "http": application, - "websocket": AllowedHostsOriginValidator(AuthMiddlewareStack(URLRouter(websocket_urlpatterns))), -}) \ No newline at end of file diff --git a/api/api/mixins.py b/api/api/mixins.py deleted file mode 100644 index f10d5cc..0000000 --- a/api/api/mixins.py +++ /dev/null @@ -1,55 +0,0 @@ -import datetime -import uuid - -from djangochannelsrestframework.mixins import ( - ListModelMixin, - RetrieveModelMixin, - PatchModelMixin, - UpdateModelMixin, - CreateModelMixin, - DeleteModelMixin, -) -from djangochannelsrestframework.generics import GenericAsyncAPIConsumer - -class SerializerRepresentationMixin: - # convert all datetimes to strings - def to_representation(self, instance): - ret = super().to_representation(instance) - for field in ret: - if isinstance(ret[field], datetime.datetime): - ret[field] = ret[field].isoformat() - if isinstance(ret[field], uuid.UUID): - ret[field] = str(ret[field]) - - return ret - -class ConnectedMixin: - async def connect(self, *args, **kwargs): - await super().accept(**kwargs) - print("Connecting to ", self.scope['user']) - - if self.scope['user'].is_anonymous: - await self.send_json({ - 'action': 'disconnected', - 'message': 'You must be logged in to connect.' - }) - await self.close() - return - - await self.send_json({ - 'action': 'connected', - }) - -class ManagedModelMixin( - ConnectedMixin, - ListModelMixin, - RetrieveModelMixin, - PatchModelMixin, - UpdateModelMixin, - CreateModelMixin, - DeleteModelMixin, - GenericAsyncAPIConsumer -): - async def connect(self, **kwargs): - await self.model_change.subscribe() - await super().connect() \ No newline at end of file diff --git a/api/api/permissions.py b/api/api/permissions.py index 78b11c4..ddf8b97 100644 --- a/api/api/permissions.py +++ b/api/api/permissions.py @@ -3,6 +3,7 @@ from rest_framework.permissions import ( IsAuthenticated ) + def generator(existing_permissions=None): permission_classes = [IsAuthenticated] @@ -31,8 +32,6 @@ class CanManageOrganization(permissions.BasePermission): class CanManageBadge(permissions.BasePermission): def has_object_permission(self, request, view, obj): - print('checking if can manage badge') - organization = obj.organization return ( organization.owner == request.user diff --git a/api/api/routing.py b/api/api/routing.py deleted file mode 100644 index 6f30a9c..0000000 --- a/api/api/routing.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.urls import re_path - -from badge.consumers import BadgeConsumer -from organization.consumers import OrganizationConsumer - -websocket_urlpatterns = [ - re_path(r"^ws/badge/$", BadgeConsumer.as_asgi()), - re_path(r"^ws/organization/$", OrganizationConsumer.as_asgi()), -] \ No newline at end of file diff --git a/api/api/settings/base.py b/api/api/settings/base.py index 5f4dbba..67a9734 100644 --- a/api/api/settings/base.py +++ b/api/api/settings/base.py @@ -1,64 +1,62 @@ import os -import json from dotenv import load_dotenv from pathlib import Path +from siwe_auth.custom_groups.erc721 import ERC721OwnerManager + load_dotenv() from abis import ( - FACTORY_ABI, - FACTORY_ABI_FULL, - FACTORY_EVENTS, - FACTORY_TOPIC_SIGNATURES, - ORGANIZATION_ABI, - ORGANIZATION_ABI_FULL, - ORGANIZATION_EVENTS, - ORGANIZATION_TOPIC_SIGNATURES, -) + FACTORY, + ORGANIZATION, +) +# Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent -DEBUG = bool(os.getenv("API_DEBUG", True)) +DEBUG = os.getenv('API_DEBUG', False) -SECRET_KEY = os.getenv("API_SECRET_KEY", "SECRET_KEY") +SECRET_KEY = os.getenv("API_SECRET_KEY", "secret") # Application definition INSTALLED_APPS = [ - "daphne", - "siwe_auth.apps.SiweAuthConfig", - "django.contrib.admin", - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.messages", - "django.contrib.staticfiles", - "django_apscheduler", - "rest_framework", - "corsheaders", - "django_filters", - "channels", - "badge", - "balance", - "ipfs", - "indexer", - "organization", - "wallet", + 'siwe_auth.apps.SiweAuthConfig', + + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + 'rest_framework', + 'corsheaders', + 'django_filters', + 'django_apscheduler', + + 'badge', + 'balance', + 'feedback', + 'ipfs', + 'job', + 'organization', + 'wallet', ] MIDDLEWARE = [ - "corsheaders.middleware.CorsMiddleware", - "django.middleware.security.SecurityMiddleware", - "whitenoise.middleware.WhiteNoiseMiddleware", - "django.contrib.sessions.middleware.SessionMiddleware", - "django.middleware.common.CommonMiddleware", - "django.middleware.csrf.CsrfViewMiddleware", - "django.contrib.auth.middleware.AuthenticationMiddleware", - "django.contrib.messages.middleware.MessageMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", + 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.security.SecurityMiddleware', + 'whitenoise.middleware.WhiteNoiseMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = "api.urls" +ROOT_URLCONF = 'api.urls' AUTH_USER_MODEL = "siwe_auth.Wallet" @@ -66,133 +64,95 @@ LOGIN_URL = "/api/auth/login" TEMPLATES = [ { - "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [BASE_DIR / "templates"], - "APP_DIRS": True, - "OPTIONS": { - "context_processors": [ - "django.template.context_processors.debug", - "django.template.context_processors.request", - "django.contrib.auth.context_processors.auth", - "django.contrib.messages.context_processors.messages", + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', ], }, }, ] -WSGI_APPLICATION = "api.wsgi.application" -ASGI_APPLICATION = "api.asgi.application" - -CHANNEL_LAYERS = { - "default": { - "BACKEND": "channels_redis.core.RedisChannelLayer", - "CONFIG": { - "hosts": [("redis", 6379)], - }, - }, -} +WSGI_APPLICATION = 'api.wsgi.application' # Database DATABASES = { - "default": { - "ENGINE": "django.db.backends.sqlite3", - "NAME": BASE_DIR / "db.sqlite3", + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', } } -# Cache +# Cache SESSION_COOKIE_AGE = 3 * 60 * 60 # Password validation AUTH_PASSWORD_VALIDATORS = [ - {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"}, - {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"}, - {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, - {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, + {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, + {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'}, + {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, + {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] # Internationalization -LANGUAGE_CODE = "en-us" -TIME_ZONE = "UTC" +LANGUAGE_CODE = 'en-us' +TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) -STATIC_URL = "/static/" +STATIC_URL = '/static/' # Default primary key field type -DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # Rest framework settings REST_FRAMEWORK = { - # 'DEFAULT_PERMISSION_CLASSES': [ - # 'rest_framework.permissions.DjangoModelPermissions' - # ], - # 'DEFAULT_AUTHENTICATION_CLASSES': ( - # 'rest_framework.authentication.TokenAuthentication', - # 'rest_framework.authentication.SessionAuthentication', - # ), - "DEFAULT_FILTER_BACKENDS": ( - "django_filters.rest_framework.DjangoFilterBackend", - "rest_framework.filters.OrderingFilter", + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.DjangoModelPermissions' + ], + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework.authentication.TokenAuthentication', + 'rest_framework.authentication.SessionAuthentication', ), - "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", - "PAGE_SIZE": 100, + 'DEFAULT_FILTER_BACKENDS': ( + 'django_filters.rest_framework.DjangoFilterBackend', + 'rest_framework.filters.OrderingFilter', + ), + 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', + 'PAGE_SIZE': 100 } # Cors headers settings CORS_ALLOW_CREDENTIALS = True CORS_ALLOW_ALL_ORIGINS = True -# Provider settings -NODE_IP = os.getenv("NODE_IP", "0.0.0.0") -ALCHEMY_API_KEY = os.getenv("REACT_APP_ALCHEMY_API_KEY") -CHAIN_ID = int(os.getenv("REACT_APP_CHAIN_ID", 1337)) -PROVIDERS = { - 1: os.getenv("PROVIDER", f"https://eth-mainnet.g.alchemy.com/v2/{ALCHEMY_API_KEY}"), - 137: os.getenv("POLYGON_PROVIDER", f"https://polygon-mainnet.g.alchemy.com/v2/{ALCHEMY_API_KEY}"), - 1337: os.getenv("LOCAL_PROVIDER", f"http://{NODE_IP}:8545/"), -} -CHAIN_PROVIDER = PROVIDERS[CHAIN_ID] -PROVIDER = PROVIDERS[1] - -# Blockchain based authentication +# Web3 settings +ALCHEMY_API_KEY = os.getenv("API_ALCHEMY_API_KEY") AUTHENTICATION_BACKENDS = ["siwe_auth.backend.SiweBackend"] -# Onchain schema settings -FACTORY_ABI = FACTORY_ABI -FACTORY_ABI_FULL = FACTORY_ABI_FULL -FACTORY_EVENTS = FACTORY_EVENTS -FACTORY_TOPIC_SIGNATURES = FACTORY_TOPIC_SIGNATURES +CREATE_GROUPS_ON_AUTHN = False +CREATE_ENS_PROFILE_ON_AUTHN = True +CUSTOM_GROUPS = [ + ('ens_owners', ERC721OwnerManager( + config={'contract': '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85'})), +] +PROVIDER = os.getenv("PROVIDER", f"https://eth-mainnet.g.alchemy.com/v2/{ALCHEMY_API_KEY}") -ORGANIZATION_ABI = ORGANIZATION_ABI -ORGANIZATION_ABI_FULL = ORGANIZATION_ABI_FULL -ORGANIZATION_EVENTS = ORGANIZATION_EVENTS -ORGANIZATION_TOPIC_SIGNATURES = ORGANIZATION_TOPIC_SIGNATURES - -# Listener settings -LISTENER_INIT_BLOCK = os.getenv("LISTENER_INIT_BLOCK", 0) -LISTENER_INIT_BLOCK_BUFFER = os.getenv("LISTENER_INIT_BLOCK_BUFFER", 60) -LISTENER_CHAIN_ID = os.getenv("LISTENER_CHAIN_ID", 1337) -LISTENER_POLL_INTERVAL = os.getenv("LISTENER_POLL_INTERVAL", 5) - -# Onchain reference data -BADGER_ADDRESSES = os.getenv("REACT_APP_BADGER_ADDRESSES", None) -if BADGER_ADDRESSES is None: - raise Exception("BADGER_ADDRESSES not set") - -BADGER_ADDRESSES = {int(k): v for k, v in json.loads(BADGER_ADDRESSES).items()} - -if CHAIN_ID not in BADGER_ADDRESSES: - raise Exception(f"Chain ID {CHAIN_ID} not found in BADGER_ADDRESSES") - -FACTORY_ADDRESS = BADGER_ADDRESSES[CHAIN_ID] +WS_POLYGON_PROVIDER = os.getenv("POLYGON_PROVIDER", f"wss://polygon-mainnet.g.alchemy.com/v2/{ALCHEMY_API_KEY}") # IPFS settings PINATA_API_KEY = os.getenv("API_PINATA_API_KEY") PINATA_API_SECRET_KEY = os.getenv("API_PINATA_API_SECRET_KEY") -PINATA_INDEXER_URL = os.getenv( - "API_PINATA_INDEXER_URL", "https://badger.mypinata.cloud/ipfs/" -) +PINATA_INDEXER_URL = os.getenv("API_PINATA_INDEXER_URL", "https://badger.mypinata.cloud/ipfs/") +# ABI settings +FACTORY_ADDRESS = "0x218B3C623FfB9c5E4DBb9142E6Ca6f6559F1c2D6" +FACTORY_ABI = FACTORY +ORGANIZATION_ABI = ORGANIZATION \ No newline at end of file diff --git a/api/api/settings/production.py b/api/api/settings/production.py index 7ca4763..8cfa02c 100644 --- a/api/api/settings/production.py +++ b/api/api/settings/production.py @@ -28,11 +28,7 @@ CSRF_TRUSTED_ORIGINS = [ CSRF_COOKIE_DOMAIN = ".trybadger.com" SESSION_COOKIE_DOMAIN = ".trybadger.com" -ALLOWED_HOSTS = [ - "https://www.trybadger.com", - "https://trybadger.com", - "https://*.trybadger.com", -] +ALLOWED_HOSTS = ['*'] STATIC_URL = "/static/" STATICFILES_DIRS = [ diff --git a/api/api/templates/docs.html b/api/api/templates/docs.html deleted file mode 100644 index ef481ea..0000000 --- a/api/api/templates/docs.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - API Documentation | Badger - - - - - -
- - {% block logo %} - - {% endblock %} - - - - - diff --git a/api/api/urls.py b/api/api/urls.py index d4a5d02..85fea97 100644 --- a/api/api/urls.py +++ b/api/api/urls.py @@ -1,40 +1,26 @@ from rest_framework import routers -from rest_framework.schemas import get_schema_view from django.contrib import admin from django.urls import include, path -from django.views.generic import TemplateView from badge.urls import router as badges_router +from feedback.urls import router as feedback_router from ipfs.urls import router as ipfs_router +from job.urls import router as jobs_router from organization.urls import router as organizations_router from wallet.urls import router as wallets_router - from .views import get_nonce router = routers.DefaultRouter() router.registry.extend(badges_router.registry) +router.registry.extend(feedback_router.registry) router.registry.extend(ipfs_router.registry) +router.registry.extend(jobs_router.registry) router.registry.extend(organizations_router.registry) router.registry.extend(wallets_router.registry) -schema_view = get_schema_view( - title="Badger", - description="Badger is a primitive driving seamless onchain creation of Organizations and Badges that can be used to turbocharge the granular power of onchain access for every member. With a unique model in place, an Organization can mint Badges that act as keys to access all of the existing Web3 gates and locks using a forward-looking and secure access policy implementation.", - version="6.0", - public=True, -) - urlpatterns = router.urls + [ - # Admin urls - path("admin/", admin.site.urls), - # Authentication urls + path('admin/', admin.site.urls), path("api/auth/", include("siwe_auth.urls")), - path("api/auth/get-nonce", get_nonce, name="get-nonce"), - # Documentation urls - path('api/docs/', TemplateView.as_view( - template_name='docs.html', - extra_context={'schema_url': 'openapi-schema'} - ), name='docs'), - path('api/openapi', schema_view, name='openapi-schema'), + path('api/auth/get-nonce', get_nonce, name="get-nonce") ] diff --git a/api/badge/consumers.py b/api/badge/consumers.py deleted file mode 100644 index 10ef26c..0000000 --- a/api/badge/consumers.py +++ /dev/null @@ -1,26 +0,0 @@ -from djangochannelsrestframework import permissions -from djangochannelsrestframework.observer import model_observer - -from api.mixins import ManagedModelMixin -from api.permissions import CanManageBadge - -from .models import Badge -from .serializers import BadgeSerializer - -class WrappedCanManageBadge(permissions.WrappedDRFPermission): - def has_object_permission(self, request, view, obj): - return CanManageBadge().has_object_permission(request, view, obj) - -class BadgeConsumer(ManagedModelMixin): - queryset = Badge.objects.all() - serializer_class = BadgeSerializer - - permissions = (permissions.IsAuthenticated, CanManageBadge) - - @model_observer(Badge) - async def model_change(self, message, observer=None, **kwargs): - await self.send_json(message) - - @model_change.serializer - def model_serialize(self, instance, action, **kwargs): - return dict(data=BadgeSerializer(instance=instance).data, action=action.value) \ No newline at end of file diff --git a/api/badge/migrations/0015_remove_badge_account_bound_remove_badge_claimable_and_more.py b/api/badge/migrations/0015_remove_badge_account_bound_remove_badge_claimable_and_more.py deleted file mode 100644 index 3303540..0000000 --- a/api/badge/migrations/0015_remove_badge_account_bound_remove_badge_claimable_and_more.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 4.1.1 on 2023-03-06 00:35 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ("badge", "0014_badge_claimable"), - ] - - operations = [ - migrations.RemoveField( - model_name="badge", - name="account_bound", - ), - migrations.RemoveField( - model_name="badge", - name="claimable", - ), - migrations.RemoveField( - model_name="badge", - name="signer_ethereum_address", - ), - migrations.AlterField( - model_name="badge", - name="users", - field=models.ManyToManyField(to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/api/badge/migrations/0016_alter_badge_is_active.py b/api/badge/migrations/0016_alter_badge_is_active.py deleted file mode 100644 index 2b19299..0000000 --- a/api/badge/migrations/0016_alter_badge_is_active.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.1 on 2023-03-07 00:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('badge', '0015_remove_badge_account_bound_remove_badge_claimable_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='badge', - name='is_active', - field=models.BooleanField(default=True), - ), - ] diff --git a/api/badge/models.py b/api/badge/models.py index ac513cd..9e1bdf0 100644 --- a/api/badge/models.py +++ b/api/badge/models.py @@ -1,18 +1,24 @@ from django.db import models -class Badge(models.Model): - is_active = models.BooleanField(default=True) +from siwe_auth.models import validate_ethereum_address - token_id = models.PositiveIntegerField(default=0) +class Badge(models.Model): + is_active = models.BooleanField(default=False) name = models.CharField(max_length=128, blank=True, null=True) description = models.TextField(blank=True, null=True) + token_id = models.PositiveIntegerField(default=0) image_hash = models.CharField(max_length=256, blank=True, null=True) token_uri = models.CharField(max_length=256, blank=True, null=True) delegates = models.ManyToManyField('siwe_auth.Wallet', related_name='delegates', blank=True) - users = models.ManyToManyField('siwe_auth.Wallet') + users = models.ManyToManyField('siwe_auth.Wallet', blank=True, null=True) + + claimable = models.BooleanField(blank=False, default=False) + account_bound = models.BooleanField(blank=False, default=False) + + signer_ethereum_address = models.CharField(max_length=50, blank=True, validators=[validate_ethereum_address]) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) @@ -20,5 +26,10 @@ class Badge(models.Model): def __str__(self): return self.name + @property + def organization(self): + from organization.models import Organization + return Organization.objects.filter(badges__in=[self]).first() + class Meta: ordering = ['-created'] \ No newline at end of file diff --git a/api/badge/serializers.py b/api/badge/serializers.py index 6f7904f..a30152b 100644 --- a/api/badge/serializers.py +++ b/api/badge/serializers.py @@ -2,73 +2,46 @@ from django.contrib.auth import get_user_model from rest_framework import serializers -from api.mixins import SerializerRepresentationMixin - from .models import Badge User = get_user_model() -class BadgeUserSerializer( - SerializerRepresentationMixin, - serializers.ModelSerializer -): + +class BadgeUserSerializer(serializers.ModelSerializer): ens_name = serializers.CharField(read_only=True) ens_avatar = serializers.CharField(read_only=True) - amount = serializers.SerializerMethodField(read_only=True) - - def get_amount(self, obj): - # get badge from context - badge = self.context.get('badge', None) - - if not badge: return None - - # get balance - balance = badge.balances.filter(user=obj).first() - - if not balance: return None - - return balance.amount - class Meta: model = User fields = ( + 'url', 'ethereum_address', 'ens_name', 'ens_avatar', - 'amount' ) -class BadgeSerializer( - SerializerRepresentationMixin, - serializers.ModelSerializer -): + +class BadgeSerializer(serializers.ModelSerializer): id = serializers.IntegerField(read_only=True) delegates = BadgeUserSerializer(many=True, read_only=True) - users = serializers.SerializerMethodField(read_only=True) - - def get_users(self, obj): - return BadgeUserSerializer( - obj.users.all(), - many=True, - context={ - 'request': self.context.get('request'), - 'badge': obj - } - ).data + users = BadgeUserSerializer(many=True, read_only=True) class Meta: model = Badge fields = ( 'id', + 'url', 'is_active', - 'token_id', 'name', 'description', + 'token_id', 'image_hash', 'token_uri', 'delegates', + 'claimable', + 'account_bound', + 'signer_ethereum_address', 'users', 'created', 'updated' - ) \ No newline at end of file + ) diff --git a/api/indexer/management/__init__.py b/api/badge/tests/__init__.py similarity index 100% rename from api/indexer/management/__init__.py rename to api/badge/tests/__init__.py diff --git a/api/badge/tests/test_db.py b/api/badge/tests/test_db.py new file mode 100644 index 0000000..82d17ad --- /dev/null +++ b/api/badge/tests/test_db.py @@ -0,0 +1,29 @@ +from django.db.utils import IntegrityError +from django.test import TestCase + +from badge.models import Badge + +from utils.tests.organization import create_organization +from utils.tests.user import create_user + +class BadgeTestCase(TestCase): + def setUp(self): + self.user = create_user() + self.organization = create_organization(self.user) + self.badge = Badge.objects.create(name="Test Badge", description="Test Description", image_hash="0x0") + self.organization.badges.add(self.badge) + self.organization.save() + + def test_badge_creation(self): + badge = Badge.objects.create(name="Test Badge", description="Test Description", image_hash="0x0") + self.assertEqual(badge.name, "Test Badge") + self.assertEqual(badge.description, "Test Description") + self.assertEqual(badge.image_hash, "0x0") + + def test_cannot_create_badge_with_no_name(self): + with self.assertRaises(IntegrityError): + Badge.objects.create(description="Test Description", image_hash="0x0") + + def test_cannot_create_badge_with_no_image_hash(self): + with self.assertRaises(IntegrityError): + Badge.objects.create(name="Test Badge", description="Test Description") \ No newline at end of file diff --git a/api/badge/tests/test_http.py b/api/badge/tests/test_http.py new file mode 100644 index 0000000..0b3d296 --- /dev/null +++ b/api/badge/tests/test_http.py @@ -0,0 +1,57 @@ +# import datetime +# import django +# import time + +# from django.contrib.auth.models import Permission + +# from rest_framework import status +# from rest_framework.reverse import reverse +# from rest_framework.test import APITestCase + +# from utils.tests.user import PASSWORD, create_user + +# from coin.models import Coin + +# from org.permission_constants import org_permissions +# from org.utils import load_permissions + +# class HttpTest(APITestCase): +# def setUp(self): +# self.user = create_user() +# response = self.client.post( +# reverse("log-in"), +# data={ +# "username": self.user.username, +# "password": PASSWORD, +# }, +# ) + +# # Parse payload data from access token. +# self.access= response.data["access"] + +# load_permissions("org", org_permissions) + +# def test_can_create_proposal(self): +# response = self.client.post( +# reverse("proposal-list"), +# data={ +# "title": "Test Proposal", +# "description": "Test proposal", +# "proposed_by": self.user.id, +# }, +# HTTP_AUTHORIZATION=f"Bearer {self.access}" +# ) + +# print(response.data) +# self.assertEqual(status.HTTP_201_CREATED, response.status_code) + +# proposal = Proposal.objects.get(title="Test Proposal") + +# self.assertEqual(response.data.get('id'), proposal.id) + +# self.assertEqual(response.data["description"], proposal.description) +# self.assertEqual(response.data["status"], proposal.get_status()) +# self.assertEqual(response.data["votes_for"], 0) +# self.assertEqual(response.data["votes_against"], 0) +# self.assertEqual(response.data["votes_abstain"], 0) +# self.assertEqual(response.data["votes_total"], 0) \ No newline at end of file diff --git a/api/badge/views.py b/api/badge/views.py index ba74412..8876752 100644 --- a/api/badge/views.py +++ b/api/badge/views.py @@ -19,6 +19,7 @@ from .serializers import BadgeSerializer User = get_user_model() + class ArtViewSet(viewsets.ViewSet): permission_classes = [IsAuthenticated] @@ -57,23 +58,18 @@ class ArtViewSet(viewsets.ViewSet): smudge % 2 == 0, ] - def _handle_fingerprint(self, address, badge_name): + def _handle_fingerprint(self, address, badge_id): fingerprint = [] - for char in f"{address}{badge_name}": + for char in f"{address}{badge_id}": fingerprint.append(self._encode(char)) return fingerprint - @action( - detail=False, - methods=['get'], - url_name='pfp', - url_path='pfp/(?P[a-zA-Z])/(?P
[a-zA-Z0-9]+)' - ) - def pfp_art(self, request, **kwargs): - char = kwargs.get('char', None) - address = kwargs.get('address', None) + @action(detail=False, methods=['get'], url_path='pfp', url_name='pfp') + def pfp_art(self, request): + char = request.query_params.get('char', None) + address = request.query_params.get('address', None) fill = "#fff" @@ -156,6 +152,7 @@ class ArtViewSet(viewsets.ViewSet): """ + # return base64 encoded svg image = base64.b64encode(svg.encode('utf-8')).decode('utf-8') url_ready_base64 = f"data:image/svg+xml;base64,{image}" @@ -164,20 +161,18 @@ class ArtViewSet(viewsets.ViewSet): "image": url_ready_base64, }) - @action( - detail=False, - methods=['get'], - url_name='badge', - url_path="pfp/(?P[a-zA-Z0-9]+)/(?P
[a-zA-Z0-9]+)/(?P[a-zA-Z0-9]+)" - ) - def badge_art(self, request, **kwargs): - organization = kwargs.get('organization_name', None) - address = kwargs.get('address', None) - badge_name = kwargs.get('badge_name', None) + # create a custom action for badge art + @action(detail=False, methods=['get'], url_path='badge', url_name='badge') + def badge_art(self, request, pk=None): + organization = request.query_params.get('organization', None) + organization_ethereum_address = request.query_params.get( + 'organization_ethereum_address', None) + badge_name = request.query_params.get('badge_name', None) invert = request.query_params.get('inverse', False) - fingerprint = self._handle_fingerprint(address, badge_name) + fingerprint = self._handle_fingerprint( + organization_ethereum_address, badge_name) fill = "#fff" if invert: diff --git a/api/balance/admin.py b/api/balance/admin.py index 580bba1..f93b96e 100644 --- a/api/balance/admin.py +++ b/api/balance/admin.py @@ -1,14 +1,27 @@ from django.contrib import admin -from .models import Balance, Transaction - -@admin.register(Transaction) -class TransactionAdmin(admin.ModelAdmin): - list_display = ('tx_hash', 'created') +from .models import Balance @admin.register(Balance) class BalanceAdmin(admin.ModelAdmin): - list_display = ('badge', 'user', 'amount', 'created') - list_filter = ('badge', 'user', 'amount') - search_fields = ('badge', 'user') - ordering = ('-created',) \ No newline at end of file + list_display = ( + 'user', + 'organization', + 'token_id', + 'amount', + ) + list_filter = ( + 'user', + 'organization', + 'token_id', + ) + search_fields = ( + 'user', + 'organization', + 'token_id', + ) + ordering = ( + 'user', + 'organization', + 'token_id', + ) \ No newline at end of file diff --git a/api/balance/migrations/0004_remove_balance_token_id_balance_badge.py b/api/balance/migrations/0004_remove_balance_token_id_balance_badge.py deleted file mode 100644 index d07df09..0000000 --- a/api/balance/migrations/0004_remove_balance_token_id_balance_badge.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 4.1.1 on 2022-11-04 02:47 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("badge", "0013_alter_badge_description_alter_badge_image_hash_and_more"), - ("balance", "0003_remove_balance_balance_balance_amount"), - ] - - operations = [ - migrations.RemoveField( - model_name="balance", - name="token_id", - ), - migrations.AddField( - model_name="balance", - name="badge", - field=models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="balances", - to="badge.badge", - ), - ), - ] diff --git a/api/balance/migrations/0005_alter_balance_options_and_more.py b/api/balance/migrations/0005_alter_balance_options_and_more.py deleted file mode 100644 index 62c41bd..0000000 --- a/api/balance/migrations/0005_alter_balance_options_and_more.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 4.1.1 on 2023-03-06 00:35 - -from django.conf import settings -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - dependencies = [ - ("badge", "0015_remove_badge_account_bound_remove_badge_claimable_and_more"), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ("balance", "0004_remove_balance_token_id_balance_badge"), - ] - - operations = [ - migrations.AlterModelOptions( - name="balance", - options={"ordering": ["-created"]}, - ), - migrations.RenameField( - model_name="balance", - old_name="created_at", - new_name="created", - ), - migrations.RenameField( - model_name="balance", - old_name="updated_at", - new_name="updated", - ), - migrations.AddField( - model_name="transaction", - name="created", - field=models.DateTimeField( - auto_now_add=True, default=django.utils.timezone.now - ), - preserve_default=False, - ), - migrations.AlterUniqueTogether( - name="balance", - unique_together={("badge", "user")}, - ), - migrations.RemoveField( - model_name="balance", - name="organization", - ), - ] diff --git a/api/balance/models.py b/api/balance/models.py index 6cbc77b..94276c3 100644 --- a/api/balance/models.py +++ b/api/balance/models.py @@ -1,24 +1,30 @@ from django.db import models -from badge.models import Badge +from organization.models import Organization class Transaction(models.Model): tx_hash = models.CharField(max_length=66, unique=True) - created = models.DateTimeField(auto_now_add=True) - class Balance(models.Model): - badge = models.ForeignKey(Badge, blank=True, null=True, related_name='balances', on_delete=models.CASCADE) + user = models.ForeignKey( + 'siwe_auth.Wallet', + on_delete=models.CASCADE, + related_name='balances' + ) - user = models.ForeignKey('siwe_auth.Wallet', related_name='balances', on_delete=models.CASCADE) + organization = models.ForeignKey( + Organization, + on_delete=models.CASCADE, + related_name='balances' + ) + + token_id = models.CharField(max_length=255) amount = models.BigIntegerField(default=0) - transactions = models.ManyToManyField(Transaction) + transactions = models.ManyToManyField( + Transaction + ) - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) - - class Meta: - ordering = ['-created'] - unique_together = ('badge', 'user') \ No newline at end of file + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) \ No newline at end of file diff --git a/api/balance/tests.py b/api/balance/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/api/balance/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/balance/views.py b/api/balance/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/api/balance/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/api/indexer/management/commands/__init__.py b/api/datatables/__init__.py similarity index 100% rename from api/indexer/management/commands/__init__.py rename to api/datatables/__init__.py diff --git a/api/datatables/admin.py b/api/datatables/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/api/datatables/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/api/datatables/apps.py b/api/datatables/apps.py new file mode 100644 index 0000000..3250544 --- /dev/null +++ b/api/datatables/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class DatatablesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'datatables' diff --git a/frontend/src/style/Button/LogoutButton.css b/api/datatables/migrations/__init__.py similarity index 100% rename from frontend/src/style/Button/LogoutButton.css rename to api/datatables/migrations/__init__.py diff --git a/api/datatables/models.py b/api/datatables/models.py new file mode 100644 index 0000000..bcaebdc --- /dev/null +++ b/api/datatables/models.py @@ -0,0 +1,41 @@ +from django.db import models + +""" + +Table --- Rows --- Columns + +a table is a collection of rows and columns + +a row is a collection of columns + +a column is a collection of rows (???) + +a row may or may not have data for every column + +a row should be able to have its full stack pulled in one query + -- column specifity will be a rare need and we are already data-dense in transfer + +to filter to a columns values one would do row.column_set.filter(column__name='name') +""" + +class Column(models.Model): + TYPE_CHOICES = ( + ('text', 'Text'), + ('number', 'Number'), + ) + + name = models.CharField(max_length=100) + type = models.CharField(max_length=100, choices=TYPE_CHOICES) + + +class Row(models.Model): + column = models.ForeignKey(Column, on_delete=models.CASCADE) + + +class Table(models.Model): + organization = models.ForeignKey('Organization', on_delete=models.CASCADE) + badge = models.ForeignKey('Badge', on_delete=models.CASCADE) + + # global state of table -- all rows have every column they just may not have data in that column + columns = models.ManyToManyField(Column) + rows = models.ManyToManyField(Row) \ No newline at end of file diff --git a/api/datatables/tests.py b/api/datatables/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/api/datatables/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/datatables/views.py b/api/datatables/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/api/datatables/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/frontend/src/style/pages/Page.css b/api/feedback/__init__.py similarity index 100% rename from frontend/src/style/pages/Page.css rename to api/feedback/__init__.py diff --git a/api/feedback/admin.py b/api/feedback/admin.py new file mode 100644 index 0000000..e679c2f --- /dev/null +++ b/api/feedback/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from .models import Feedback + +@admin.register(Feedback) +class FeedbackAdmin(admin.ModelAdmin): + list_display = ('feedback_url', 'liked', 'comment', 'created_at', 'updated_at') + list_filter = ('created_at', 'updated_at') + search_fields = ('feedback_url', 'comment') \ No newline at end of file diff --git a/api/feedback/apps.py b/api/feedback/apps.py new file mode 100644 index 0000000..d26ac3c --- /dev/null +++ b/api/feedback/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class FeedbackConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "feedback" diff --git a/api/feedback/migrations/0001_initial.py b/api/feedback/migrations/0001_initial.py new file mode 100644 index 0000000..fe2e13a --- /dev/null +++ b/api/feedback/migrations/0001_initial.py @@ -0,0 +1,44 @@ +# Generated by Django 4.1.1 on 2022-10-15 21:16 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Feedback", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("feedback_url", models.CharField(max_length=255)), + ("liked", models.BooleanField()), + ("comment", models.TextField(blank=True, null=True)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "author", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="feedbacks", + to=settings.AUTH_USER_MODEL, + ), + ), + ], + ), + ] diff --git a/api/feedback/migrations/0002_alter_feedback_author.py b/api/feedback/migrations/0002_alter_feedback_author.py new file mode 100644 index 0000000..ac9c9c3 --- /dev/null +++ b/api/feedback/migrations/0002_alter_feedback_author.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1.1 on 2022-10-15 22:31 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("feedback", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="feedback", + name="author", + field=models.ForeignKey( + blank=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="feedbacks", + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/api/feedback/migrations/0003_alter_feedback_author.py b/api/feedback/migrations/0003_alter_feedback_author.py new file mode 100644 index 0000000..7532c7e --- /dev/null +++ b/api/feedback/migrations/0003_alter_feedback_author.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1.1 on 2022-10-15 22:41 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("feedback", "0002_alter_feedback_author"), + ] + + operations = [ + migrations.AlterField( + model_name="feedback", + name="author", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="feedbacks", + to=settings.AUTH_USER_MODEL, + ), + ), + ] diff --git a/api/feedback/migrations/__init__.py b/api/feedback/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/feedback/models.py b/api/feedback/models.py new file mode 100644 index 0000000..bff369f --- /dev/null +++ b/api/feedback/models.py @@ -0,0 +1,22 @@ +from django.contrib.auth import get_user_model +from django.db import models + +User = get_user_model() + +class Feedback(models.Model): + author = models.ForeignKey( + 'siwe_auth.Wallet', + on_delete=models.CASCADE, + related_name='feedbacks', + null=True + ) + + feedback_url = models.CharField(max_length=255) + liked = models.BooleanField() + comment = models.TextField(blank=True, null=True) + + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + def __unicode__(self): + return self.url diff --git a/api/feedback/serializers.py b/api/feedback/serializers.py new file mode 100644 index 0000000..be4b1b6 --- /dev/null +++ b/api/feedback/serializers.py @@ -0,0 +1,40 @@ +from django.contrib.auth import get_user_model + +from rest_framework import serializers + +from .models import Feedback + +User = get_user_model() + + +class FeedbackUserSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ( + 'url', + 'ethereum_address', + 'ens_name', + 'ens_avatar', + ) + + +class FeedbackSerializer(serializers.ModelSerializer): + author = FeedbackUserSerializer(read_only=True) + + def create(self, validated_data): + validated_data['author'] = self.context['request'].user + return super().create(validated_data) + + class Meta: + model = Feedback + fields = ( + 'url', + 'id', + 'author', + 'feedback_url', + 'liked', + 'comment', + 'created_at', + 'updated_at' + ) + depth = 1 diff --git a/api/feedback/urls.py b/api/feedback/urls.py new file mode 100644 index 0000000..532a2e5 --- /dev/null +++ b/api/feedback/urls.py @@ -0,0 +1,10 @@ +from rest_framework import routers + +from .views import ( + FeedbackViewSet, +) + +router = routers.DefaultRouter() +router.register(r'feedback', FeedbackViewSet) + +urlpatterns = router.urls \ No newline at end of file diff --git a/api/feedback/views.py b/api/feedback/views.py new file mode 100644 index 0000000..d32bf24 --- /dev/null +++ b/api/feedback/views.py @@ -0,0 +1,29 @@ +from rest_framework import viewsets +from rest_framework.permissions import ( + IsAuthenticated, + IsAdminUser +) + +from api.permissions import generator + +from .models import Feedback +from .serializers import FeedbackSerializer + +class FeedbackViewSet(viewsets.ModelViewSet): + serializer_class = FeedbackSerializer + queryset = Feedback.objects.all() + + permission_classes = [IsAuthenticated] + + def get_queryset(self): + if not self.request.user.is_admin: + return self.queryset.filter(author=self.request.user) + return self.queryset + + def get_permissions(self): + permission_classes = [] + + if self.action in ['update', 'partial_update', 'destroy']: + permission_classes = [IsAdminUser] + + return generator(self.permission_classes + permission_classes) \ No newline at end of file diff --git a/api/indexer/backfill/__init__.py b/api/indexer/backfill/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/indexer/backfill/backfill.py b/api/indexer/backfill/backfill.py new file mode 100644 index 0000000..a8bfe0c --- /dev/null +++ b/api/indexer/backfill/backfill.py @@ -0,0 +1,71 @@ +import django +from django.conf import settings + +from .transformer import Transformer +from .loader import Loader +from .extractor import Extractor +from abis import ( + FACTORY as FACTORY_ABI, + ORGANIZATION as ORGANIZATION_ABI, + FACTORY_EVENTS, + ORGANIZATION_EVENTS +) +from job.models import ContractListener +from organization.models import Organization + +class Backfill: + def __init__(self): + self.extractor = Extractor() + self.transformer = Transformer() + self.loader = Loader() + + def etl(self, queryset, abi, contract_events): + contracts = [ + [ + contract.chain.lower(), + contract.ethereum_address, + contract.last_block + ] for contract in queryset + ] + + [ + events, + last_block + ] = self.extractor.handle_contracts(contracts, abi, contract_events) + events = self.transformer.handle_events(events) + event_responses = self.loader.handle_events(events) + + # refresh queryset from database + queryset = queryset.model.objects.filter(pk__in=[contract.pk for contract in queryset]) + + for contract in queryset: + contract.last_block = last_block + contract.save() + + if settings.DEBUG: + for response in event_responses: + print(response) + + return event_responses + + def backfill_factories(self): + return self.etl( + ContractListener.objects.filter(is_active=True), + FACTORY_ABI, + FACTORY_EVENTS + ) + + def backfill_organizations(self): + return self.etl( + Organization.objects.filter( + is_active=True, + updated__gte=django.utils.timezone.now() - django.utils.timezone.timedelta(days=30) + ), + ORGANIZATION_ABI, + ORGANIZATION_EVENTS + ) + +# if __name__ == '__main__': +# backfill = Backfill() +# backfill.backfill_factories() +# backfill.backfill_organizations() \ No newline at end of file diff --git a/api/indexer/backfill/extractor.py b/api/indexer/backfill/extractor.py new file mode 100644 index 0000000..ad9b8d2 --- /dev/null +++ b/api/indexer/backfill/extractor.py @@ -0,0 +1,75 @@ +# This Extractor looks at a smart contract and filters for specific events on specific contracts. +from web3 import Web3 + +from django.conf import settings + +w3 = Web3(Web3.WebsocketProvider(settings.WS_POLYGON_PROVIDER)) + +class Extractor: + def __init__(self): + self.contracts = {} + self.only_latest = [ + "OrganizationUpdated", + "OwnershipTransferred", + "BadgeUpdated", + "URI", + ] + + def handle_contracts(self, contracts, abi, events, end_block=None): + _events = [] + + if not end_block: + end_block = w3.eth.block_number + + for contract in contracts: + _contract = self.handle_contract(contract[0], contract[1], contract[2], abi, events) + _events += self.extract(_contract, end_block) + + return [ + _events, + end_block + ] + + def handle_contract(self, network, contract_address, start_block, abi, events): + self.contracts[contract_address] = { + "network": network, + "contract_address": contract_address, + "start_block": start_block, + "abi": abi, + "events": [], + } + + for event in events: + self.contracts[contract_address]["events"].append(self.handle_event(event)) + + return self.contracts[contract_address] + + def handle_event(self, event): + event_name = event.replace("event ", "").split("(")[0] + + return { + "event_name": event_name, + } + + def extract(self, contract, end_block=None): + if "connected_contract" not in self.contracts[contract["contract_address"]]: + self.contracts[contract["contract_address"]]["connected_contract"] = w3.eth.contract( + address=contract["contract_address"], + abi=contract["abi"] + ) + + events = [] + for event in contract['events']: + if settings.DEBUG: + print(f"Extracting {event['event_name']} events for {contract['contract_address']}") + + # if the event doesnt have a tuple in it use normal get_all_entries, but if the + # event has a tuple in it, retrieve the event data with the topic + events_appendage = self.contracts[contract['contract_address']]['connected_contract'].events[event['event_name']].createFilter( + fromBlock=contract['start_block'], + toBlock=end_block + ).get_all_entries() + + events.append(events_appendage) + + return events \ No newline at end of file diff --git a/api/indexer/backfill/loader.py b/api/indexer/backfill/loader.py new file mode 100644 index 0000000..c5a7f9f --- /dev/null +++ b/api/indexer/backfill/loader.py @@ -0,0 +1,347 @@ +import requests +from web3 import Web3 + +from django.conf import settings +from django.contrib.auth import get_user_model + +from balance.models import Balance, Transaction +from organization.models import Organization + +from abis import ORGANIZATION as ORGANIZATION_ABI + +w3 = Web3(Web3.WebsocketProvider(settings.WS_POLYGON_PROVIDER)) + +User = get_user_model() + +class Loader: + def __init__(self): + self.loader_mapping = { + # Factory events + "OrganizationCreated": [self.handle_organization_created], + "BadgeUpdated": [self.handle_badge_updated], + "DelegateUpdated": [self.handle_delegate_updated], + "OrganizationUpdated": [self.handle_organization_updated], + "OwnershipTransferred": [self.handle_ownership_transferred], + "PaymentTokenDeposited": [self.handle_payment_token_deposited], + "TransferSingle": [self.handle_transfer_single], + "TransferBatch": [self.handle_transfer_batch], + "URI": [self.handle_uri], + } + self.contracts = {} + + def _handle_users(self, ethereum_address): + if not Web3.isChecksumAddress(ethereum_address): + ethereum_address = Web3.toChecksumAddress(ethereum_address) + + if not User.objects.filter(ethereum_address=ethereum_address).exists(): + return User.objects.create_user( + ethereum_address=ethereum_address) + return User.objects.get( + ethereum_address=ethereum_address) + + def _handle_badge_user_balance_changes(self, badge, user, balance): + if balance.amount > 0: + if user.ethereum_address != "0x0000000000000000000000000000000000000000": + badge.users.add(user) + badge.save() + elif user in badge.users.all(): + badge.users.remove(user) + else: + return + + badge.save() + + def _handle_user_balance(self, i, event, organization, address_field): + # get the from user + user = self._handle_users(event['args'][address_field]) + + # get the balance + if event['event'] == "TransferSingle": + token_ids = [event['args']['id']] + values = [event['args']['value']] + else: + token_ids = event['args']['ids'] + values = event['args']['values'] + + for i, token_id in enumerate(token_ids): + balance, created = Balance.objects.get_or_create( + user=user, + organization=organization, + token_id=token_id + ) + + # check if transaction is not already in balance + transaction, created = Transaction.objects.get_or_create( + tx_hash=event['transactionHash'].hex(), + ) + + if transaction not in balance.transactions.all(): + # apply the balance change if not a mint from 0x0 + change = values[i] + if address_field == "from": + change *= - 1 + if event['args']['from'] == "0x0000000000000000000000000000000000000000": + change = -0 + + balance.transactions.add(transaction) + balance.amount += change + balance.save() + + # Add the user to the badge if not already in it if the balance is > 0 + badge = organization.badges.get(token_id=token_id) + + if badge is None: + badge = self.handle_badge_created(event, None) + + # Add the user to the badge if not already in it if the balance is > 0 + # or remove them if the balance is 0 + self._handle_badge_user_balance_changes(badge, user, balance) + + def get_organization_contract(self, ethereum_address): + if not Web3.isChecksumAddress(ethereum_address): + ethereum_address = Web3.toChecksumAddress(ethereum_address) + + if ethereum_address not in self.contracts: + self.contracts[ethereum_address] = w3.eth.contract( + address=ethereum_address, + abi=ORGANIZATION_ABI + ) + return self.contracts[ethereum_address] + + def handle_organization_created(self, event, chained_response): + created = False + + organization = event['args']['organization'] + if not Web3.isChecksumAddress(organization): + organization = Web3.toChecksumAddress(organization) + + if not Organization.objects.filter(ethereum_address=organization).exists(): + organization, created = Organization.objects.get_or_create( + ethereum_address=organization, + ) + response = "Organization created" + else: + organization = Organization.objects.get( + ethereum_address=organization + ) + response = "Organization already exists" + + if created or not organization.owner: + organization.is_active = True + organization.chain = "Polygon" + organization.owner = self._handle_users(event["args"]["owner"]) + organization.save() + + response = "Organization management setup" + + return (response, event['args']) + + def handle_organization_updated(self, event, chained_response): + # Use the organization that was created in the OrganizationCreated event + address = event['address'] + if chained_response is not None: + address = chained_response[1]["organization"] + + if not Web3.isChecksumAddress(address): + address = Web3.toChecksumAddress(address) + + organization, created = Organization.objects.get_or_create( + ethereum_address=address + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + organization_contract = self.get_organization_contract(organization.ethereum_address) + + organization.symbol = organization_contract.functions.symbol().call() + + uri = organization_contract.functions.contractURI().call() + organization.contract_uri_hash = uri.split("/ipfs/")[1] + organization.save() + + url = f"{settings.PINATA_INDEXER_URL}{organization.contract_uri_hash}" + + response = requests.get(url) + if response.status_code == 200: + data = response.json() + organization.name = data["name"] + organization.description = data["description"] + organization.image_hash = data["image"].split("/ipfs/")[1] + + organization.save() + + return ("Organization details updated", event['args']) + + def handle_ownership_transferred(self, event, chained_response): + # get the address of the organization + organization = Organization.objects.get( + ethereum_address=event["address"] + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + organization.owner = self._handle_users(event["args"]["newOwner"]) + organization.save() + + return ("Need to update the organization owner", event['args']) + + def handle_payment_token_deposited(self, event, chained_response): + pass + + def handle_transfer_batch(self, event, chained_response): + # get the address of the organization + organization = Organization.objects.get( + ethereum_address=event["address"] + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + # Update the balance of the `to` and `from` addresses + for i in range(len(event['args']['ids'])): + self._handle_user_balance(i, event, organization, "from") + self._handle_user_balance(i, event, organization, "to") + + return ("Balance updated", event['args']) + + def handle_transfer_single(self, event, chained_response): + # get the address of the organization + organization = Organization.objects.get( + ethereum_address=event["address"] + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + # Update the balance of the `to` and `from` addresses + self._handle_user_balance(0, event, organization, "from") + self._handle_user_balance(0, event, organization, "to") + + return ("Balance updated", event['args']) + + def handle_badge_updated(self, event, chained_response): + changed = False + organization = Organization.objects.get( + ethereum_address=event["address"] + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + token_id = event['args']['badgeId'] if 'badgeId' in event['args'] else event['args']['id'] + + badge, created = organization.badges.get_or_create( + token_id=token_id + ) + + response = "Badge updated" + + if created or not badge.token_uri: + badge.is_active = True + + organization_contract = self.get_organization_contract(organization.ethereum_address) + badge.token_uri = organization_contract.functions.uri(token_id).call() + badge.account_bound = organization_contract.functions.getAccountBound(token_id).call() + badge.claimable = organization_contract.functions.getClaimable(token_id).call() + badge.signer_ethereum_address = organization_contract.functions.getSigner(token_id).call() + + changed = True + + response = "Badge created" + + if not badge.name or not badge.description or not badge.image_hash: + # use the 1155 uri spec to replace id with the token id + url = f"{badge.token_uri}".replace("{id}", str(token_id)) + + if "http" not in url: + url = f"{settings.PINATA_INDEXER_URL}{url}" + + response = requests.get(url) + if response.status_code == 200: + data = response.json() + badge.name = data["name"] + badge.description = data["description"] + badge.image_hash = data["image"].split("/ipfs/")[1] + + changed = True + + response = "Badge details updated" + + if changed: + badge.save() + + return (response, event['args']) + + def handle_delegate_updated(self, event, chained_response): + # get the address of the organization + organization = Organization.objects.get( + ethereum_address=event["address"] + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + token_id = event['args']['badgeId'] if 'badgeId' in event['args'] else event['args']['id'] + + # get the badge that was updated + badge = organization.badges.get(token_id=token_id) + + if badge is None: + return ("Badge does not exist", event['args']) + + # get the user that was updated + user = self._handle_users(event["args"]["delegate"]) + + if user is None: + return ("User does not exist", event['args']) + + # add the user to the badge delegates if the args are true + if event['args']['isDelegate']: + badge.delegates.add(user) + else: + badge.delegates.remove(user) + + badge.save() + + return ("Delegate updated", event['args']) + + def handle_uri(self, event, chained_response): + # get the address of the organization + organization = Organization.objects.get( + ethereum_address=event["address"] + ) + + if organization is None: + return ("Organization does not exist", event['args']) + + # get the badge that was updated + badge = organization.badges.get(token_id=event['args']['id']) + + if badge is None: + return ("Badge does not exist", event['args']) + + badge.token_uri = event['args']['value'] + badge.save() + + return ("Badge uri updated", event['args']) + + def handle_events(self, events): + event_responses = [] + + response = None + for event in events: + response = None + if 'event' in event: + if event['event'] in self.loader_mapping: + for handler in self.loader_mapping[event['event']]: + response = handler(event, response) + event_responses.append(response) + else: + event_responses.append( + ("Event not handled", event['event'], event['args'])) + else: + event_responses.append(("Event not decoded", event)) + + return event_responses diff --git a/api/indexer/backfill/transformer.py b/api/indexer/backfill/transformer.py new file mode 100644 index 0000000..db9a657 --- /dev/null +++ b/api/indexer/backfill/transformer.py @@ -0,0 +1,5 @@ +class Transformer: + def handle_events(self, events): + events = [event for event_bundle in events for event in event_bundle] + + return events diff --git a/api/indexer/management/commands/event_signatures.py b/api/indexer/event_signatures.py similarity index 67% rename from api/indexer/management/commands/event_signatures.py rename to api/indexer/event_signatures.py index 37f4f45..e159c92 100644 --- a/api/indexer/management/commands/event_signatures.py +++ b/api/indexer/event_signatures.py @@ -3,8 +3,6 @@ import json from web3 import Web3 -from django.core.management.base import BaseCommand - EVENT_TOPICS = [ "event OrganizationCreated(address indexed,address indexed,address indexed)", "event OwnershipTransferred(address indexed,address indexed)", @@ -20,15 +18,14 @@ EVENT_TOPICS = [ "event URI(string,uint256 indexed)", ] -class Command(BaseCommand): - def handle(self, **options): - CLEANED_TOPICS = [ - topic.replace("event ", "").replace(" indexed", "") for topic in EVENT_TOPICS - ] +CLEANED_TOPICS = [ + topic.replace("event ", "").replace(" indexed", "") for topic in EVENT_TOPICS +] - def hex_signature(string): - return Web3.keccak(text=string).hex() +def hex_signature(string): + return Web3.keccak(text=string).hex() - TOPIC_SIGNATURES = {topic: hex_signature(topic) for topic in CLEANED_TOPICS} +TOPIC_SIGNATURES = {topic: hex_signature(topic) for topic in CLEANED_TOPICS} - print(json.dumps(TOPIC_SIGNATURES, indent=4, sort_keys=True)) \ No newline at end of file +# print formatted json +print(json.dumps(TOPIC_SIGNATURES, indent=4, sort_keys=True)) \ No newline at end of file diff --git a/api/indexer/extractor.py b/api/indexer/extractor.py deleted file mode 100644 index e1b159b..0000000 --- a/api/indexer/extractor.py +++ /dev/null @@ -1,51 +0,0 @@ -from utils.web3 import w3 - -class Extractor: - def __init__(self): - self.contracts = {} - - def extract(self, contract_addresses, abi, topics, from_block, to_block): - events = w3.eth.get_logs({ - 'address': contract_addresses, - 'fromBlock': from_block, - 'toBlock': to_block - }) - - if not contract_addresses or len(contract_addresses) == 0: - return [] - - if not events or len(events) == 0: - return [] - - event_data = [] - - for event in events: - if 'topics' not in event: - continue - - if len(event['topics']) == 0: - continue - - event_topic = event['topics'][0].hex() - - if event_topic not in topics: - continue - - event_name = topics[event_topic].split('(')[0] - - event_address = event['address'] - - if event_address not in contract_addresses: - continue - - if event_address not in self.contracts: - self.contracts[event_address] = w3.eth.contract( - address=event_address, - abi=abi - ) - - contract = self.contracts[event_address] - - event_data.append(contract.events[event_name]().processLog(event)) - - return event_data \ No newline at end of file diff --git a/api/indexer/listener.py b/api/indexer/listener.py deleted file mode 100644 index a3bdc37..0000000 --- a/api/indexer/listener.py +++ /dev/null @@ -1,100 +0,0 @@ -import concurrent.futures -import time - -from .extractor import * -from .loader import * - -from django.conf import settings - -from organization.models import Organization - -LOG_SIZE = 2000 - -class Backfill: - def __init__(self): - self.extractor = Extractor() - self.loader = Loader() - - def _etl(self, contracts, abi, topics, batch): - print(f'{batch[0]} -> {batch[1]}') - - try: - events = self.extractor.extract( - contracts, - abi, - topics, - batch[0], - batch[1], - ) - - if len(events) == 0: - time.sleep(settings.LISTENER_POLL_INTERVAL) - return - - self.loader.load(events) - except Exception as e: - print("Listener error: ", e) - return - - def etl(self, extracting_obj, abi, topics, temp_from_block=None, temp_to_block=None): - while True: - contracts = extracting_obj - - to_block = temp_to_block - if not temp_to_block: - to_block = w3.eth.blockNumber - - from_block = temp_from_block - if not temp_from_block: - from_block = 0 if to_block - settings.LISTENER_INIT_BLOCK_BUFFER < 0 else to_block - settings.LISTENER_INIT_BLOCK_BUFFER - - qs = None - if not isinstance(contracts, list): - qs = contracts.objects.filter(is_active=True, chain_id=settings.LISTENER_CHAIN_ID) - contracts = qs.values_list('ethereum_address', flat=True) - - BLOCK_BUFFER = LOG_SIZE if to_block - from_block > LOG_SIZE else to_block - from_block - BLOCK_BUFFER = to_block - from_block if BLOCK_BUFFER > to_block - from_block else BLOCK_BUFFER - BLOCK_BUFFER = 1 if BLOCK_BUFFER == 0 else BLOCK_BUFFER - - batches = [[i, i + BLOCK_BUFFER] for i in range(from_block, to_block, BLOCK_BUFFER)] - workers = len(batches) if len(batches) < 50 else 50 - - pool = concurrent.futures.ProcessPoolExecutor(max_workers=workers) - futures = [pool.submit(self._etl, contracts, abi, topics, batch) for batch in batches] - concurrent.futures.wait(futures) - - if not isinstance(extracting_obj, list): - qs.update(last_block=to_block) - - for obj in qs: - obj.save() - - if temp_to_block: - return - - time.sleep(settings.LISTENER_POLL_INTERVAL) - - def backfill_factories(self): - self.etl([settings.FACTORY_ADDRESS], - settings.FACTORY_ABI_FULL, - settings.FACTORY_TOPIC_SIGNATURES, - temp_from_block=settings.LISTENER_INIT_BLOCK, - temp_to_block=w3.eth.blockNumber) - - def backfill_organizations(self): - self.etl(Organization, - settings.ORGANIZATION_ABI_FULL, - settings.ORGANIZATION_TOPIC_SIGNATURES, - temp_from_block=settings.LISTENER_INIT_BLOCK, - temp_to_block=w3.eth.blockNumber) - - def listen_for_factories(self): - self.etl([settings.FACTORY_ADDRESS], - settings.FACTORY_ABI_FULL, - settings.FACTORY_TOPIC_SIGNATURES) - - def listen_for_organizations(self): - self.etl(Organization, - settings.ORGANIZATION_ABI_FULL, - settings.ORGANIZATION_TOPIC_SIGNATURES) \ No newline at end of file diff --git a/api/indexer/loader.py b/api/indexer/loader.py deleted file mode 100644 index f09d426..0000000 --- a/api/indexer/loader.py +++ /dev/null @@ -1,264 +0,0 @@ -import requests -from web3 import Web3 - -from django.conf import settings -from django.contrib.auth import get_user_model - -from balance.models import Balance -from organization.models import Organization - -from utils.web3 import w3 - -ZERO_ADDRESS = "0x0000000000000000000000000000000000000000" - -User = get_user_model() - -# Hook configured -# Hook updated - -# Manager configured -# Manager updated - -class Loader: - def __init__(self): - self.loader_mapping = { - # Factory events - "OrganizationCreated": [self.handle_organization_created], - # Organization events - "OrganizationUpdated": [self.handle_organization_updated], - "OwnershipTransferred": [self.handle_ownership_transferred], - "TransferSingle": [self.handle_transfer_single], - "TransferBatch": [self.handle_transfer_batch], - "URI": [self.handle_uri], - } - - self.contracts = {} - - """ - Helper function to get connected to the organization contract. - """ - def _organization_contract(self, ethereum_address): - if not Web3.isChecksumAddress(ethereum_address): - ethereum_address = Web3.toChecksumAddress(ethereum_address) - - if ethereum_address not in self.contracts: - self.contracts[ethereum_address] = w3.eth.contract( - address=ethereum_address, - abi=settings.ORGANIZATION_ABI_FULL - ) - - return self.contracts[ethereum_address] - - """ - Helper function to handle the creation and return of Organizations from an ethereum address. - """ - def _organization(self, event): - address = event['address'] - - if not Web3.isChecksumAddress(address): - address = Web3.toChecksumAddress(address) - - organization, created = Organization.objects.get_or_create( - ethereum_address=address, - chain_id=int(settings.LISTENER_CHAIN_ID) - ) - - return organization - - """ - Helper function to handle the creation and return of Badges from an organization and token id. - """ - def _badge(self, organization, event): - token_id = event['args']['id'] - - badge, created = organization.badges.get_or_create(token_id=token_id) - - return badge - - """ - Helper function to handle the creation and return of Users from an ethereum address. - """ - def _handle_users(self, ethereum_address): - if not Web3.isChecksumAddress(ethereum_address): - ethereum_address = Web3.toChecksumAddress(ethereum_address) - - if not User.objects.filter(ethereum_address=ethereum_address).exists(): - return User.objects.create_user(ethereum_address=ethereum_address) - return User.objects.get(ethereum_address=ethereum_address) - - def _handle_user_balance(self, i, event, organization, address_field): - user = self._handle_users(event['args'][address_field]) - - if event['event'] == "TransferSingle": - token_ids = [event['args']['id']] - values = [event['args']['value']] - else: - token_ids = event['args']['ids'] - values = event['args']['values'] - - for i, token_id in enumerate(token_ids): - badge = organization.badges.get(token_id=token_id) - - balance, created = Balance.objects.get_or_create(badge=badge, user=user) - - transaction, created = balance.transactions.get_or_create(tx_hash=event['transactionHash'].hex()) - - if created: - change = values[i] - - if address_field == "from": - change *= - 1 - if event['args']['from'] == ZERO_ADDRESS: - change = -0 - - balance.amount += change - balance.save() - - badge = organization.badges.get(token_id=token_id) - - if balance.amount > 0: - if user.ethereum_address != ZERO_ADDRESS: - badge.users.add(user) - badge.save() - elif user in badge.users.all(): - badge.users.remove(user) - else: - return - - badge.save() - - def handle_organization_created(self, event): - organization = event['args']['organization'] - owner = event['args']['owner'] - - if not Web3.isChecksumAddress(organization): - organization = Web3.toChecksumAddress(organization) - - organization, created = Organization.objects.get_or_create( - ethereum_address=organization, - chain_id=settings.LISTENER_CHAIN_ID - ) - - response = "Organization already exists" - if created: - response = "Organization created" - - if not organization.owner: - organization.owner = self._handle_users(owner) - organization.save() - - response = "Organization management setup" - - # Load all the metadata - self.handle_organization_updated({ 'address': organization.ethereum_address }) - - return (response, event['args']) - - def handle_organization_updated(self, event): - organization = self._organization(event) - - organization_contract = self._organization_contract(organization.ethereum_address) - - # Make the blockchain read calls - organization.symbol = organization_contract.functions.symbol().call() - uri = organization_contract.functions.contractURI().call() - - # Calculate the ipfs hash to the contract uri - organization.contract_uri_hash = uri.split("/ipfs/")[1] if "ipfs" in uri else uri - - # Build the client side url used - url = f"{settings.PINATA_INDEXER_URL}{organization.contract_uri_hash}" - - # Retrieve the metadata from IPFS - response = requests.get(url) - if response.status_code == 200: - data = response.json() - organization.name = data["name"] - organization.description = data["description"] - organization.image_hash = data["image"].split("/ipfs/")[1] - - # If we don't get IPFS, try the blockchain - if not organization.name: - organization.name = organization_contract.functions.name().call() - - organization.save() - - return ("Organization details updated", event['args']) - - def handle_ownership_transferred(self, event): - organization = self._organization(event) - - organization.owner = self._handle_users(event["args"]["newOwner"]) - - organization.save() - - return ("Organization ownership updated", event['args']) - - def handle_transfer_batch(self, event): - organization = self._organization(event) - - # Update the balance of the `to` and `from` addresses - for i in range(len(event['args']['ids'])): - self._handle_user_balance(i, event, organization, "from") - self._handle_user_balance(i, event, organization, "to") - - return ("Balance updated", event['args']) - - def handle_transfer_single(self, event): - organization = self._organization(event) - - # Update the balance of the `to` and `from` addresses - self._handle_user_balance(0, event, organization, "from") - self._handle_user_balance(0, event, organization, "to") - - return ("Balance updated", event['args']) - - def handle_uri(self, event): - uri = event['args']['value'] - token_id = event['args']['id'] - - organization = self._organization(event) - - badge = self._badge(organization, event) - - needs_metadata = not badge.name or not badge.description - needs_image = not badge.image_hash or badge.token_uri != uri - - if needs_metadata or needs_image: - url = f"{badge.token_uri}".replace("{id}", str(token_id)) - - if "http" not in url: # if http is not in, assume it to be an ipfs hash - url = f"{settings.PINATA_INDEXER_URL}{url}" - - response = requests.get(url) - if response.status_code == 200: - data = response.json() - badge.name = data["name"] - badge.description = data["description"] - # TODO: This will break if someone uses a custom image url - badge.image_hash = data["image"].split("/ipfs/")[1] - - response = "Badge details updated" - - badge.token_uri = uri - - badge.save() - - return ("Badge uri updated", event['args']) - - def load(self, events): - event_responses = [] - - for event in events: - if 'event' in event: - if event['event'] in self.loader_mapping: - for handler in self.loader_mapping[event['event']]: - event_responses.append(handler(event)) - else: - event_responses.append(("Event not handled", event['event'], event['args'])) - else: - event_responses.append(("Event not decoded", event)) - - print('event_responses', event_responses) - - return event_responses diff --git a/api/indexer/management/commands/backfill_factories.py b/api/indexer/management/commands/backfill_factories.py deleted file mode 100644 index b1d22cb..0000000 --- a/api/indexer/management/commands/backfill_factories.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.core.management.base import BaseCommand - -from indexer.listener import Backfill - -class Command(BaseCommand): - def handle(self, **options): - backfill = Backfill() - backfill.backfill_factories() \ No newline at end of file diff --git a/api/indexer/management/commands/backfill_organizations.py b/api/indexer/management/commands/backfill_organizations.py deleted file mode 100644 index 0fee373..0000000 --- a/api/indexer/management/commands/backfill_organizations.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.core.management.base import BaseCommand - -from indexer.listener import Backfill - -class Command(BaseCommand): - def handle(self, **options): - backfill = Backfill() - backfill.backfill_organizations() \ No newline at end of file diff --git a/api/indexer/management/commands/listen_for_factories.py b/api/indexer/management/commands/listen_for_factories.py deleted file mode 100644 index 5e4ef47..0000000 --- a/api/indexer/management/commands/listen_for_factories.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.core.management.base import BaseCommand - -from indexer.listener import Backfill - -class Command(BaseCommand): - def handle(self, **options): - backfill = Backfill() - backfill.listen_for_factories() \ No newline at end of file diff --git a/api/indexer/management/commands/listen_for_organizations.py b/api/indexer/management/commands/listen_for_organizations.py deleted file mode 100644 index f0908c2..0000000 --- a/api/indexer/management/commands/listen_for_organizations.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.core.management.base import BaseCommand - -from indexer.listener import Backfill - -class Command(BaseCommand): - def handle(self, **options): - backfill = Backfill() - backfill.listen_for_organizations() \ No newline at end of file diff --git a/api/job/__init__.py b/api/job/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/job/admin.py b/api/job/admin.py new file mode 100644 index 0000000..06e3407 --- /dev/null +++ b/api/job/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin + +from .models import ContractListener + +@admin.register(ContractListener) +class ContractListenerAdmin(admin.ModelAdmin): + list_display = ('chain', 'ethereum_address', 'last_block') + list_display_links = ('chain', 'ethereum_address', 'last_block') \ No newline at end of file diff --git a/api/job/apps.py b/api/job/apps.py new file mode 100644 index 0000000..c788969 --- /dev/null +++ b/api/job/apps.py @@ -0,0 +1,28 @@ +import json +import os + +from django.apps import AppConfig +from django.conf import settings + +class JobConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "job" + + def ready(self): + if os.environ.get('RUN_MAIN') or not settings.DEBUG: + from .jobs import JobManager + from .models import ContractListener + + # Make sure that the ContractListener for the primary Factory always exists and is setup + stringified_abi = json.dumps(settings.FACTORY_ABI) + + ContractListener.objects.get_or_create( + is_active=True, + chain="Polygon", + ethereum_address=settings.FACTORY_ADDRESS, + abi=stringified_abi + ) + + manager = JobManager() + + manager.ready() diff --git a/api/job/jobs.py b/api/job/jobs.py new file mode 100644 index 0000000..a3d78a0 --- /dev/null +++ b/api/job/jobs.py @@ -0,0 +1,60 @@ +from django.conf import settings + +from apscheduler.schedulers.background import BackgroundScheduler +from apscheduler.triggers.cron import CronTrigger +from django_apscheduler.jobstores import DjangoJobStore +from django_apscheduler.models import DjangoJobExecution +from django_apscheduler import util + +from indexer.backfill.backfill import Backfill + +scheduler = BackgroundScheduler() + +scheduled_jobs_map = {} + +backfill = Backfill() + +def backfill_factories(max_age=86400): + backfill.backfill_factories() + backfill.backfill_organizations() + +@util.close_old_connections +def delete_old_job_executions(max_age=60 * 60): + DjangoJobExecution.objects.delete_old_job_executions(max_age) + +class JobManager: + def ready(self, *args, **options): + scheduler.add_jobstore(DjangoJobStore(), "default") + + # Clean up the dead jobs at the end of every hour + scheduler.add_job( + delete_old_job_executions, + trigger=CronTrigger(hour="*", minute="*/59"), + id="delete_old_job_executions", + max_instances=1, + replace_existing=True, + ) + print("Added: `delete_old_job_executions`") + + # Backfill factories every minute + # Is running on a minute timer as this is a backfill job and + # not a listener job + + minutes = "*/1" + if settings.DEBUG: + minutes = "*/59" + scheduler.add_job( + backfill_factories, + trigger=CronTrigger(minute=minutes), + id="backfill_factories", + max_instances=1, + replace_existing=True, + ) + + try: + print("Starting scheduler...") + scheduler.start() + except KeyboardInterrupt: + print("Stopping scheduler...") + scheduler.shutdown() + print("Scheduler shut down successfully!") diff --git a/api/job/migrations/0001_initial.py b/api/job/migrations/0001_initial.py new file mode 100644 index 0000000..908aac8 --- /dev/null +++ b/api/job/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# Generated by Django 4.1.1 on 2022-10-03 19:34 + +from django.db import migrations, models +import siwe_auth.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="ContractListener", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("is_active", models.BooleanField(default=False)), + ( + "ethereum_address", + models.CharField( + default=None, + max_length=50, + validators=[siwe_auth.models.validate_ethereum_address], + ), + ), + ("event", models.CharField(default=None, max_length=50)), + ("last_block", models.IntegerField(default=0)), + ("created", models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/api/job/migrations/0002_contractlistener_event_abi.py b/api/job/migrations/0002_contractlistener_event_abi.py new file mode 100644 index 0000000..1372390 --- /dev/null +++ b/api/job/migrations/0002_contractlistener_event_abi.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.1 on 2022-10-03 19:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("job", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="contractlistener", + name="event_abi", + field=models.TextField(default=""), + ), + ] diff --git a/api/job/migrations/0003_alter_contractlistener_event_abi.py b/api/job/migrations/0003_alter_contractlistener_event_abi.py new file mode 100644 index 0000000..6563a68 --- /dev/null +++ b/api/job/migrations/0003_alter_contractlistener_event_abi.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.1 on 2022-10-03 19:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("job", "0002_contractlistener_event_abi"), + ] + + operations = [ + migrations.AlterField( + model_name="contractlistener", + name="event_abi", + field=models.TextField(default=None), + ), + ] diff --git a/api/job/migrations/0004_contractlistener_cron_expression.py b/api/job/migrations/0004_contractlistener_cron_expression.py new file mode 100644 index 0000000..f928940 --- /dev/null +++ b/api/job/migrations/0004_contractlistener_cron_expression.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.1 on 2022-10-04 01:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("job", "0003_alter_contractlistener_event_abi"), + ] + + operations = [ + migrations.AddField( + model_name="contractlistener", + name="cron_expression", + field=models.CharField(default="*/2 * * * * *", max_length=50), + ), + ] diff --git a/api/job/migrations/0005_contractlistener_chain_and_more.py b/api/job/migrations/0005_contractlistener_chain_and_more.py new file mode 100644 index 0000000..a6529e0 --- /dev/null +++ b/api/job/migrations/0005_contractlistener_chain_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 4.1.1 on 2022-10-04 01:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("job", "0004_contractlistener_cron_expression"), + ] + + operations = [ + migrations.AddField( + model_name="contractlistener", + name="chain", + field=models.CharField( + choices=[ + ("ethereum", "Ethereum"), + ("polygon", "Polygon"), + ("optimism", "Optimism"), + ], + default="ethereum", + max_length=255, + ), + ), + migrations.AlterField( + model_name="contractlistener", + name="event_abi", + field=models.TextField( + choices=[("FACTORY", "Factory"), ("ORGANIZATION", "Organization")], + default="FACTORY", + ), + ), + ] diff --git a/api/job/migrations/0006_alter_contractlistener_chain.py b/api/job/migrations/0006_alter_contractlistener_chain.py new file mode 100644 index 0000000..6ffe4db --- /dev/null +++ b/api/job/migrations/0006_alter_contractlistener_chain.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.1 on 2022-10-05 03:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('job', '0005_contractlistener_chain_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='contractlistener', + name='chain', + field=models.CharField(choices=[('Ethereum', 'Ethereum'), ('Polygon', 'Polygon'), ('Optimism', 'Optimism'), ('Hardhat', 'Hardhat'), ('Gnosis', 'Gnosis')], default='Ethereum', max_length=255), + ), + ] diff --git a/api/job/migrations/0007_alter_contractlistener_chain.py b/api/job/migrations/0007_alter_contractlistener_chain.py new file mode 100644 index 0000000..6df82b6 --- /dev/null +++ b/api/job/migrations/0007_alter_contractlistener_chain.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.1 on 2022-10-13 20:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('job', '0006_alter_contractlistener_chain'), + ] + + operations = [ + migrations.AlterField( + model_name='contractlistener', + name='chain', + field=models.CharField(choices=[('Ethereum', 'Ethereum'), ('Polygon', 'Polygon'), ('Optimism', 'Optimism'), ('Hardhat', 'Hardhat'), ('Localhost', 'Localhost'), ('Gnosis', 'Gnosis')], default='Ethereum', max_length=255), + ), + ] diff --git a/api/job/migrations/0008_remove_contractlistener_cron_expression_and_more.py b/api/job/migrations/0008_remove_contractlistener_cron_expression_and_more.py new file mode 100644 index 0000000..4d7b5d3 --- /dev/null +++ b/api/job/migrations/0008_remove_contractlistener_cron_expression_and_more.py @@ -0,0 +1,35 @@ +# Generated by Django 4.1.1 on 2022-10-18 20:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("job", "0007_alter_contractlistener_chain"), + ] + + operations = [ + migrations.RemoveField( + model_name="contractlistener", + name="cron_expression", + ), + migrations.RemoveField( + model_name="contractlistener", + name="event", + ), + migrations.RemoveField( + model_name="contractlistener", + name="event_abi", + ), + migrations.AddField( + model_name="contractlistener", + name="abi", + field=models.TextField(blank=True, null=True), + ), + migrations.AddField( + model_name="contractlistener", + name="updated", + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/api/job/migrations/0009_alter_contractlistener_chain.py b/api/job/migrations/0009_alter_contractlistener_chain.py new file mode 100644 index 0000000..e2a0500 --- /dev/null +++ b/api/job/migrations/0009_alter_contractlistener_chain.py @@ -0,0 +1,29 @@ +# Generated by Django 4.1.1 on 2022-10-20 22:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("job", "0008_remove_contractlistener_cron_expression_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="contractlistener", + name="chain", + field=models.CharField( + choices=[ + ("Ethereum", "Ethereum"), + ("Polygon", "Polygon"), + ("Optimism", "Optimism"), + ("Hardhat", "Hardhat"), + ("Localhost", "Localhost"), + ("Gnosis", "Gnosis"), + ], + default="Polygon", + max_length=255, + ), + ), + ] diff --git a/api/job/migrations/__init__.py b/api/job/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/job/models.py b/api/job/models.py new file mode 100644 index 0000000..16e7f6b --- /dev/null +++ b/api/job/models.py @@ -0,0 +1,23 @@ +from django.db import models + +from siwe_auth.models import validate_ethereum_address + +from utils.web3 import CHAINS, POLYGON + +class ContractListener(models.Model): + is_active = models.BooleanField(default=False) + + chain = models.CharField(max_length=255, choices=CHAINS, default=POLYGON) + ethereum_address = models.CharField(max_length=50, blank=False, default=None, validators=[validate_ethereum_address]) + + # name of the event that is being tracked for this contract + abi = models.TextField(blank=True, null=True) + + # the last block the listener has processed + last_block = models.IntegerField(default=0) + + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.ethereum_address \ No newline at end of file diff --git a/api/job/modules/badge.py b/api/job/modules/badge.py new file mode 100644 index 0000000..05fd29b --- /dev/null +++ b/api/job/modules/badge.py @@ -0,0 +1,36 @@ +import ipfs + +from badge.models import Badge +from organization.models import Organization + +class BadgeModule: + def sync_badge_created(self, contract, event): + # Use the address the contract was emitted from to get the organization + organization = Organization.objects.get(ethereum_address=contract.ethereum_address) + + # Get the IPFS hash out of the token URI + ipfs_hash = event['args']['tokenURI'].split('/')[-1] + + # Get the metadata from IPFS + metadata = ipfs.get_json(ipfs_hash) + + # Create the badge + badge = Badge.objects.create( + is_active=True, + name=metadata['name'], + description=metadata['description'], + token_id=event['args']['tokenId'], + image_hash=metadata['imageHash'], + token_uri=event['args']['tokenURI'], + total_supply=event['args']['totalSupply'], + ) + + # Add the badge to the organization + organization.badges.add(badge) + organization.save() + + def sync_badge_updated(self, contract, event): + pass + + def sync_badge_transfer(self, contract, event): + pass \ No newline at end of file diff --git a/api/job/modules/organization.py b/api/job/modules/organization.py new file mode 100644 index 0000000..43144f8 --- /dev/null +++ b/api/job/modules/organization.py @@ -0,0 +1,47 @@ +import ipfs + +from django.contrib.auth import get_user_model + +from organization.models import Organization + +User = get_user_model() + +class OrganizationModule: + def sync_organization_created(self, contract, event): + # Create the organization if we have not already created it + if not Organization.objects.filter( + ethereum_address=contract.ethereum_address, + chain=contract.chain + ).exists(): + # Get who sent the transaction from the event data + owner = event['args']['sender'] + + # Get the user object for the sender + if User.objects.filter(ethereum_address=owner).exists(): + owner = User.objects.get(ethereum_address=owner) + else: + owner = User.objects.create( + is_active=True, + ethereum_address=owner, + ) + + # Get the contract metadata from IPFS + ipfs_hash = event['args']['metadataURI'].split('/')[-1] + + # Get the json from the contract uri ipfs + metadata = ipfs.get_json(ipfs_hash) + + return Organization.objects.create( + is_active=True, + owner=owner, + ethereum_address=contract.ethereum_address, + name=metadata['name'], + description=metadata['description'], + image_hash=metadata['imageHash'], + contract_uri_hash=ipfs_hash, + ) + + return None + + def sync_organization_updated(self, contract, event): + pass \ No newline at end of file diff --git a/api/job/serializers.py b/api/job/serializers.py new file mode 100644 index 0000000..28e076a --- /dev/null +++ b/api/job/serializers.py @@ -0,0 +1,27 @@ +from rest_framework import serializers + +from .models import ContractListener + +class ContractListenerSerializer(serializers.ModelSerializer): + def get_fields(self, *args, **kwargs): + fields = super().get_fields(*args, **kwargs) + for field in fields: + fields[field].read_only = True + return fields + + abi = serializers.SerializerMethodField() + + def get_abi(self, obj): + return obj.abi + + class Meta: + model = ContractListener + fields = ( + 'is_active', + 'chain', + 'ethereum_address', + 'abi', + 'last_block', + 'created', + 'updated' + ) \ No newline at end of file diff --git a/api/job/urls.py b/api/job/urls.py new file mode 100644 index 0000000..eb5fd3d --- /dev/null +++ b/api/job/urls.py @@ -0,0 +1,8 @@ +from rest_framework import routers + +from .views import ContractListenerViewSet + +router = routers.DefaultRouter() +router.register(r'contract-listeners', ContractListenerViewSet) + +urlpatterns = router.urls \ No newline at end of file diff --git a/api/job/views.py b/api/job/views.py new file mode 100644 index 0000000..e4f9f8e --- /dev/null +++ b/api/job/views.py @@ -0,0 +1,14 @@ +from rest_framework import viewsets +from rest_framework.permissions import ( + IsAdminUser +) + +from .models import ContractListener + +from .serializers import ContractListenerSerializer + +class ContractListenerViewSet(viewsets.ModelViewSet): + queryset = ContractListener.objects.all() + serializer_class = ContractListenerSerializer + + permission_classes = [IsAdminUser] \ No newline at end of file diff --git a/api/organization/consumers.py b/api/organization/consumers.py deleted file mode 100644 index d765384..0000000 --- a/api/organization/consumers.py +++ /dev/null @@ -1,43 +0,0 @@ -from djangochannelsrestframework import permissions -from djangochannelsrestframework.observer import model_observer - -from django.db.models import Q - -from api.mixins import ManagedModelMixin -from api.permissions import CanManageOrganization - -from .models import Organization -from .serializers import OrganizationSerializer - -class WrappedCanManageOrganization(permissions.WrappedDRFPermission): - def has_permission(self, request, view): - print('has_permission') - return CanManageOrganization().has_permission(request, view) - - def has_object_permission(self, request, view, obj): - print('in here') - return CanManageOrganization().has_object_permission(request, view, obj) - -class OrganizationConsumer(ManagedModelMixin): - queryset = Organization.objects.all() - serializer_class = OrganizationSerializer - - permissions = (permissions.IsAuthenticated) - - # TODO: Make it to where staff users can see all organizations. - - def get_queryset(self, **kwargs): - query = ( - Q(owner=self.scope['user']) | - Q(delegates=self.scope['user']) - ) - - return self.queryset.filter(query).distinct() - - @model_observer(Organization) - async def model_change(self, message, observer=None, **kwargs): - await self.send_json(message) - - @model_change.serializer - def model_serialize(self, instance, action, **kwargs): - return dict(data=OrganizationSerializer(instance=instance).data, action=action.value) \ No newline at end of file diff --git a/api/organization/migrations/0014_remove_organization_chain_organization_chain_id.py b/api/organization/migrations/0014_remove_organization_chain_organization_chain_id.py deleted file mode 100644 index f442a55..0000000 --- a/api/organization/migrations/0014_remove_organization_chain_organization_chain_id.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.1.1 on 2023-03-06 00:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("organization", "0013_alter_organization_name"), - ] - - operations = [ - migrations.RemoveField( - model_name="organization", - name="chain", - ), - migrations.AddField( - model_name="organization", - name="chain_id", - field=models.IntegerField(default=1337), - ), - ] diff --git a/api/organization/migrations/0015_alter_organization_is_active.py b/api/organization/migrations/0015_alter_organization_is_active.py deleted file mode 100644 index 48a60bb..0000000 --- a/api/organization/migrations/0015_alter_organization_is_active.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.1.1 on 2023-03-07 00:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization', '0014_remove_organization_chain_organization_chain_id'), - ] - - operations = [ - migrations.AlterField( - model_name='organization', - name='is_active', - field=models.BooleanField(default=True), - ), - ] diff --git a/api/organization/models.py b/api/organization/models.py index 00b9697..d0a7351 100644 --- a/api/organization/models.py +++ b/api/organization/models.py @@ -3,24 +3,31 @@ from django.db import models from siwe_auth.models import validate_ethereum_address from badge.models import Badge +from utils.web3 import CHAINS, POLYGON + class Organization(models.Model): - is_active = models.BooleanField(default=True) + is_active = models.BooleanField(default=False) - chain_id = models.IntegerField(default=1337) - ethereum_address = models.CharField(max_length=50, blank=False, default=None, validators=[validate_ethereum_address]) + chain = models.CharField(max_length=50, choices=CHAINS, default=POLYGON) + ethereum_address = models.CharField( + max_length=50, blank=False, default=None, validators=[validate_ethereum_address]) name = models.CharField(max_length=128, blank=True, null=True) symbol = models.CharField(max_length=52, blank=True, null=True) description = models.TextField(max_length=4000, blank=True, null=True) - owner = models.ForeignKey('siwe_auth.Wallet', on_delete=models.CASCADE, related_name='organization_owner', null=True) - delegates = models.ManyToManyField('siwe_auth.Wallet', blank=True, related_name='organization_delegates') + owner = models.ForeignKey('siwe_auth.Wallet', on_delete=models.CASCADE, + related_name='organization_owner', null=True) + delegates = models.ManyToManyField( + 'siwe_auth.Wallet', blank=True, related_name='organization_delegates') badges = models.ManyToManyField(Badge, blank=True) + # Contract metadata image_hash = models.CharField(max_length=256, blank=True, null=True) contract_uri_hash = models.CharField(max_length=256, blank=True, null=True) + # the last block the listener has processed last_block = models.IntegerField(default=0) created = models.DateTimeField(auto_now_add=True) diff --git a/api/organization/serializers.py b/api/organization/serializers.py index 9cc8db5..f20ee62 100644 --- a/api/organization/serializers.py +++ b/api/organization/serializers.py @@ -4,30 +4,23 @@ from rest_framework import serializers from badge.serializers import BadgeSerializer -from api.mixins import SerializerRepresentationMixin - from .models import Organization User = get_user_model() -class OrganizationUserSerializer( - SerializerRepresentationMixin, - serializers.ModelSerializer -): +class OrganizationUserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ( + 'url', 'ethereum_address', 'ens_name', 'ens_avatar', ) -class OrganizationSerializer( - SerializerRepresentationMixin, - serializers.ModelSerializer -): +class OrganizationSerializer(serializers.ModelSerializer): owner = OrganizationUserSerializer(read_only=True) badges = BadgeSerializer(many=True, read_only=True) delegates = OrganizationUserSerializer(many=True, read_only=True) @@ -41,8 +34,9 @@ class OrganizationSerializer( model = Organization fields = ( 'id', + 'url', 'is_active', - 'chain_id', + 'chain', 'name', 'symbol', 'description', @@ -52,7 +46,6 @@ class OrganizationSerializer( 'owner', 'badges', 'delegates', - 'last_block', 'created', 'updated' ) diff --git a/api/organization/tests/__init__.py b/api/organization/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/organization/tests/test_db.py b/api/organization/tests/test_db.py new file mode 100644 index 0000000..d6e578d --- /dev/null +++ b/api/organization/tests/test_db.py @@ -0,0 +1,25 @@ +from django.db.utils import IntegrityError +from django.test import TestCase + +from utils.tests.organization import create_organization +from utils.tests.user import create_user + +class OrganizationTestCase(TestCase): + def setUp(self): + self.user = create_user() + self.organization = create_organization(self.user) + + def test_can_create_org(self): + create_organization(self.user, name="TEST ORGANIZATION") + + def test_cannot_create_org_with_no_chain(self): + with self.assertRaises(IntegrityError): + create_organization(self.user, chain=None) + + def test_cannot_create_org_with_no_contract_address(self): + with self.assertRaises(IntegrityError): + create_organization(self.user, ethereum_address=None) + + def test_cannot_create_org_with_no_name(self): + with self.assertRaises(IntegrityError): + create_organization(self.user, name=None) \ No newline at end of file diff --git a/api/organization/tests/test_http.py b/api/organization/tests/test_http.py new file mode 100644 index 0000000..e69de29 diff --git a/api/organization/views.py b/api/organization/views.py index a37cec6..091f9b6 100644 --- a/api/organization/views.py +++ b/api/organization/views.py @@ -7,6 +7,8 @@ from api.permissions import generator, CanManageOrganization from .models import Organization from .serializers import OrganizationSerializer +from siwe_auth.models import Wallet +from rest_framework.response import Response class OrganizationViewSet(viewsets.ModelViewSet): queryset = Organization.objects.all() diff --git a/api/requirements.txt b/api/requirements.txt index e946bdc..e2a2d78 100644 Binary files a/api/requirements.txt and b/api/requirements.txt differ diff --git a/api/utils/tests/organization.py b/api/utils/tests/organization.py new file mode 100644 index 0000000..ba86ce9 --- /dev/null +++ b/api/utils/tests/organization.py @@ -0,0 +1,23 @@ +from organization.models import Organization + +def create_organization( + owner, + chain="ethereum", + ethereum_address="0x0", + image_hash="0x0", + name="Test Organization", + description="Test Description", +): + organization = Organization.objects.create( + is_active=True, + chain=chain, + ethereum_address=ethereum_address, + image_hash=image_hash, + name=name, + description=description, + ) + + organization.owner = owner + organization.save() + + return organization \ No newline at end of file diff --git a/api/utils/tests/user.py b/api/utils/tests/user.py new file mode 100644 index 0000000..bafdbb1 --- /dev/null +++ b/api/utils/tests/user.py @@ -0,0 +1,9 @@ +from django.contrib.auth import get_user_model + +PASSWORD = "pAssw0rd!" + + +def create_user(address="0x8D572a89Ca4C939CDfB43F224A233c9E35e08c9C"): + return get_user_model().objects.create_user( + ethereum_address=address, + ) diff --git a/api/utils/web3.py b/api/utils/web3.py index 85da0da..0afc3bb 100644 --- a/api/utils/web3.py +++ b/api/utils/web3.py @@ -1,10 +1,33 @@ from django.conf import settings -from web3 import Web3 +from web3 import HTTPProvider, Web3 from ens import ENS -w3 = Web3(Web3.HTTPProvider(settings.CHAIN_PROVIDER)) +provider = HTTPProvider(settings.PROVIDER) +w3 = Web3(provider) ns = ENS.fromWeb3(w3) +ETHEREUM = "Ethereum" +POLYGON = "Polygon" +OPTIMISM = "Optimism" +HARDHAT = "Hardhat" +GNOSIS = "Gnosis" +LOCALHOST = "Localhost" +CHAINS = ( + (ETHEREUM, "Ethereum"), + (POLYGON, "Polygon"), + (OPTIMISM, "Optimism"), + (HARDHAT, "Hardhat"), + (LOCALHOST, "Localhost"), + (GNOSIS, "Gnosis"), +) + +EVENTS = [ + "TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "OrganizationCreated(address indexed,address indexed,address indexed)", + "OrganizationUpdated(string)", + "BadgeUpdated(uint256 indexed,uint256 indexed,bytes32 indexed,uint256)", +] + def get_ens_name(address): if w3.isAddress(address): return ns.name(address=address) diff --git a/api/utils/websocket_listener.py b/api/utils/websocket_listener.py new file mode 100644 index 0000000..0ea1509 --- /dev/null +++ b/api/utils/websocket_listener.py @@ -0,0 +1,241 @@ +# Example topics +# { +# topics: [ +# '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', +# [ +# '0x00000000000000000000000018ccc241cce98a67564e367ebc1f1f0e692e3188', +# '0x0000000000000000000000001ccb2945f1325e061b40fe5b0b452f0e76fb7278', +# '0x000000000000000000000000264bf51639f5753f05d65e4637ad22078f1652ca', +# '0x0000000000000000000000002eff303377b9e01e042b7f80fb42836b35fb1a49', +# '0x000000000000000000000000348ee4ed9363299832c33dbb1b52c7fbd5571754', +# '0x00000000000000000000000039e856863e5f6f0654a0b87b12bc921da23d06bb', +# '0x0000000000000000000000004e84e4b6ed03c95def00d43e13ff1e8f4d220427', +# '0x0000000000000000000000005562303c3ae2751773edd248d3cbdc447ed8d82a', +# '0x000000000000000000000000581bef12967f06f2ebfcabb7504fa61f0326cd9a', +# '0x0000000000000000000000005fb41dbee72536e2761fc474be221a06dbd7d812', +# '0x00000000000000000000000062180042606624f02d8a130da8a3171e9b33894d', +# '0x0000000000000000000000002db7bbeea47f36a70233eabed6162d016477a5a6', +# '0x000000000000000000000000765e406eb1bb0909f4eae2fe5b52c21c9e61b498', +# '0x000000000000000000000000802debc52e025461a592069f05a3df386ee67187', +# '0x0000000000000000000000001cc1c5f71fe7c1a135cc060e17493bafcaff2b45', +# '0x0000000000000000000000008ae207edd3738f3d6130f2a6255720c765c5c6b6', +# '0x000000000000000000000000945501737c6060b5e4237b3c2d7e863be3038a81', +# '0x000000000000000000000000b55d9b50ac5748bd9377757a0c6d463c771ca813', +# '0x000000000000000000000000d06608313ea30aff0c89a1b3617bce50765e5ca4', +# '0x000000000000000000000000d8856cce3f878d3ea03964f80b18987ff1919272', +# '0x000000000000000000000000f5b96fc090a491c861c601f2b051fae552194aa3', +# '0x000000000000000000000000f76e2d2bba0292cf88f71934aff52ea54baa64d9', +# '0x000000000000000000000000fd64e8e4e7ddec10fd7b1667f3409307dcb5d1c0' +# ] +# ] +# } +# { +# 1155 TransferSingle From +# topics: [ +# '0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62', +# [ +# '0x00000000000000000000000018ccc241cce98a67564e367ebc1f1f0e692e3188', +# '0x0000000000000000000000001ccb2945f1325e061b40fe5b0b452f0e76fb7278', +# '0x000000000000000000000000264bf51639f5753f05d65e4637ad22078f1652ca', +# '0x0000000000000000000000002eff303377b9e01e042b7f80fb42836b35fb1a49', +# '0x000000000000000000000000348ee4ed9363299832c33dbb1b52c7fbd5571754', +# '0x00000000000000000000000039e856863e5f6f0654a0b87b12bc921da23d06bb', +# '0x0000000000000000000000004e84e4b6ed03c95def00d43e13ff1e8f4d220427', +# '0x0000000000000000000000005562303c3ae2751773edd248d3cbdc447ed8d82a', +# '0x000000000000000000000000581bef12967f06f2ebfcabb7504fa61f0326cd9a', +# '0x0000000000000000000000005fb41dbee72536e2761fc474be221a06dbd7d812', +# '0x00000000000000000000000062180042606624f02d8a130da8a3171e9b33894d', +# '0x0000000000000000000000002db7bbeea47f36a70233eabed6162d016477a5a6', +# '0x000000000000000000000000765e406eb1bb0909f4eae2fe5b52c21c9e61b498', +# '0x000000000000000000000000802debc52e025461a592069f05a3df386ee67187', +# '0x0000000000000000000000001cc1c5f71fe7c1a135cc060e17493bafcaff2b45', +# '0x0000000000000000000000008ae207edd3738f3d6130f2a6255720c765c5c6b6', +# '0x000000000000000000000000945501737c6060b5e4237b3c2d7e863be3038a81', +# '0x000000000000000000000000b55d9b50ac5748bd9377757a0c6d463c771ca813', +# '0x000000000000000000000000d06608313ea30aff0c89a1b3617bce50765e5ca4', +# '0x000000000000000000000000d8856cce3f878d3ea03964f80b18987ff1919272', +# '0x000000000000000000000000f5b96fc090a491c861c601f2b051fae552194aa3', +# '0x000000000000000000000000f76e2d2bba0292cf88f71934aff52ea54baa64d9', +# '0x000000000000000000000000fd64e8e4e7ddec10fd7b1667f3409307dcb5d1c0' +# ] +# ] +# } +# { +# topics: [ +# '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', +# null, +# [ +# '0x00000000000000000000000018ccc241cce98a67564e367ebc1f1f0e692e3188', +# '0x0000000000000000000000001ccb2945f1325e061b40fe5b0b452f0e76fb7278', +# '0x000000000000000000000000264bf51639f5753f05d65e4637ad22078f1652ca', +# '0x0000000000000000000000002eff303377b9e01e042b7f80fb42836b35fb1a49', +# '0x000000000000000000000000348ee4ed9363299832c33dbb1b52c7fbd5571754', +# '0x00000000000000000000000039e856863e5f6f0654a0b87b12bc921da23d06bb', +# '0x0000000000000000000000004e84e4b6ed03c95def00d43e13ff1e8f4d220427', +# '0x0000000000000000000000005562303c3ae2751773edd248d3cbdc447ed8d82a', +# '0x000000000000000000000000581bef12967f06f2ebfcabb7504fa61f0326cd9a', +# '0x0000000000000000000000005fb41dbee72536e2761fc474be221a06dbd7d812', +# '0x00000000000000000000000062180042606624f02d8a130da8a3171e9b33894d', +# '0x0000000000000000000000002db7bbeea47f36a70233eabed6162d016477a5a6', +# '0x000000000000000000000000765e406eb1bb0909f4eae2fe5b52c21c9e61b498', +# '0x000000000000000000000000802debc52e025461a592069f05a3df386ee67187', +# '0x0000000000000000000000001cc1c5f71fe7c1a135cc060e17493bafcaff2b45', +# '0x0000000000000000000000008ae207edd3738f3d6130f2a6255720c765c5c6b6', +# '0x000000000000000000000000945501737c6060b5e4237b3c2d7e863be3038a81', +# '0x000000000000000000000000b55d9b50ac5748bd9377757a0c6d463c771ca813', +# '0x000000000000000000000000d06608313ea30aff0c89a1b3617bce50765e5ca4', +# '0x000000000000000000000000d8856cce3f878d3ea03964f80b18987ff1919272', +# '0x000000000000000000000000f5b96fc090a491c861c601f2b051fae552194aa3', +# '0x000000000000000000000000f76e2d2bba0292cf88f71934aff52ea54baa64d9', +# '0x000000000000000000000000fd64e8e4e7ddec10fd7b1667f3409307dcb5d1c0' +# ] +# ] +# } +# { +# 1155 TransferSingle To +# topics: [ +# '0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62', +# null, +# [ +# '0x00000000000000000000000018ccc241cce98a67564e367ebc1f1f0e692e3188', +# '0x0000000000000000000000001ccb2945f1325e061b40fe5b0b452f0e76fb7278', +# '0x000000000000000000000000264bf51639f5753f05d65e4637ad22078f1652ca', +# '0x0000000000000000000000002eff303377b9e01e042b7f80fb42836b35fb1a49', +# '0x000000000000000000000000348ee4ed9363299832c33dbb1b52c7fbd5571754', +# '0x00000000000000000000000039e856863e5f6f0654a0b87b12bc921da23d06bb', +# '0x0000000000000000000000004e84e4b6ed03c95def00d43e13ff1e8f4d220427', +# '0x0000000000000000000000005562303c3ae2751773edd248d3cbdc447ed8d82a', +# '0x000000000000000000000000581bef12967f06f2ebfcabb7504fa61f0326cd9a', +# '0x0000000000000000000000005fb41dbee72536e2761fc474be221a06dbd7d812', +# '0x00000000000000000000000062180042606624f02d8a130da8a3171e9b33894d', +# '0x0000000000000000000000002db7bbeea47f36a70233eabed6162d016477a5a6', +# '0x000000000000000000000000765e406eb1bb0909f4eae2fe5b52c21c9e61b498', +# '0x000000000000000000000000802debc52e025461a592069f05a3df386ee67187', +# '0x0000000000000000000000001cc1c5f71fe7c1a135cc060e17493bafcaff2b45', +# '0x0000000000000000000000008ae207edd3738f3d6130f2a6255720c765c5c6b6', +# '0x000000000000000000000000945501737c6060b5e4237b3c2d7e863be3038a81', +# '0x000000000000000000000000b55d9b50ac5748bd9377757a0c6d463c771ca813', +# '0x000000000000000000000000d06608313ea30aff0c89a1b3617bce50765e5ca4', +# '0x000000000000000000000000d8856cce3f878d3ea03964f80b18987ff1919272', +# '0x000000000000000000000000f5b96fc090a491c861c601f2b051fae552194aa3', +# '0x000000000000000000000000f76e2d2bba0292cf88f71934aff52ea54baa64d9', +# '0x000000000000000000000000fd64e8e4e7ddec10fd7b1667f3409307dcb5d1c0' +# ] +# ] +# } + +# Example response +# { +# "jsonrpc": "2.0", +# "method": "eth_subscription", +# "params": { +# "result": { +# "address": "0xf2aecee06841f0cc984ab8d7de5b1e9106890fdc", +# "topics": [ +# "0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62", +# "0x0000000000000000000000001e0049783f008a0085193e00003d00cd54003c71", +# "0x0000000000000000000000004e4dd1e789caf122f6621d8ca7b0c7677566bf7d", +# "0x000000000000000000000000d5b6e0b031a33bae8cee25d0dbd587a49d47e395" +# ], +# "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", +# "blockNumber": "0xef910d", +# "transactionHash": "0x370c1432d99d83a35de0c99dc0117bed2d9e9af679b25902f69c5f2cf88a046d", +# "transactionIndex": "0x30", +# "blockHash": "0xe82335e54abf7f2886b0cfd2840077ffe8679c8b35d57cbff9fb850d5191a2cf", +# "logIndex": "0x85", +# "removed": False +# }, +# "subscription": "0x9b245d25d9a979268ac43b72e5ac6e51" +# } +# } + +import asyncio +import json +import websockets + +from web3 import Web3 + +RPC_URL = "wss://eth-mainnet.g.alchemy.com/v2/7hOvTTdNWW7ngDBuxt0RI4h91giaqhxP" + +ERC20_AND_ERC721_TRANSFER = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef' + +mainnet = Web3(Web3.WebsocketProvider(RPC_URL)) + +# TODO: To get the rest of the of the event topics we just need to run a test on testnet and snag their values +# TODO: Need to track these for every factory +ORGANIZATION_CREATED = '0x39e4fba473bee8eaa003d03e0707c05d0feae5f9b0e3d1f6b8566694c6ffc786' +# TODO: Need to track these for every organization +ORGANIZATION_UPDATED = '' +BADGE_CREATED = '' +BADGE_UPDATED = '' +BADGE_TRANSFER_SINGLE = '0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62' + +ADDRESSES = [ + '0x18ccc241cce98a67564e367ebc1f1f0e692e3188', + '0x1ccb2945f1325e061b40fe5b0b452f0e76fb7278', + '0x264bf51639f5753f05d65e4637ad22078f1652ca', + '0x2eff303377b9e01e042b7f80fb42836b35fb1a49', + '0x348ee4ed9363299832c33dbb1b52c7fbd5571754', + '0x39e856863e5f6f0654a0b87b12bc921da23d06bb', + '0x4e84e4b6ed03c95def00d43e13ff1e8f4d220427', + '0x5562303c3ae2751773edd248d3cbdc447ed8d82a', + '0x581bef12967f06f2ebfcabb7504fa61f0326cd9a', + '0x5fb41dbee72536e2761fc474be221a06dbd7d812', + '0x62180042606624f02d8a130da8a3171e9b33894d', + '0x2db7bbeea47f36a70233eabed6162d016477a5a6', + '0x765e406eb1bb0909f4eae2fe5b52c21c9e61b498', + '0x802debc52e025461a592069f05a3df386ee67187', + '0x1cc1c5f71fe7c1a135cc060e17493bafcaff2b45', + '0x945501737c6060b5e4237b3c2d7e863be3038a81', + '0xb55d9b50ac5748bd9377757a0c6d463c771ca813', + '0xd06608313ea30aff0c89a1b3617bce50765e5ca4', + '0xd8856cce3f878d3ea03964f80b18987ff1919272', + '0xf5b96fc090a491c861c601f2b051fae552194aa3', + '0xf76e2d2bba0292cf88f71934aff52ea54baa64d9', + '0xfd64e8e4e7ddec10fd7b1667f3409307dcb5d1c0', +] + +FACTORIES = [ + "0x3925be5810fe7bf68447caadec079811470c73b0", +] +FACTORY_TOPICS = [ + ORGANIZATION_CREATED, +] + + +def topic(address): + return Web3.toHex(Web3.toBytes(hexstr=address).rjust(32, b'\x00')) + + +async def main(): + print('in main') + topics = {} + + # connect to mainnet rpc + async with websockets.connect(RPC_URL) as ws: + + # start listening for OrganizationCreated events from the Factory + for topic in FACTORY_TOPICS: + topics['topics'] = [topic] + + for address in FACTORIES: + topics['address'] = CONTRACT_ADDRESS + + print(topics) + + # only listen to events from the contract we care about + await ws.send(json.dumps({ + "jsonrpc": "2.0", + "method": "eth_subscribe", + "params": ["logs", topics], + "id": 1 + })) + + print('sent') + + while True: + response = await ws.recv() + print(response) + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/api/wallet/apps.py b/api/wallet/apps.py index a216110..774bb0d 100644 --- a/api/wallet/apps.py +++ b/api/wallet/apps.py @@ -1,5 +1,6 @@ from django.apps import AppConfig + class WalletConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "wallet" diff --git a/.dockerignore b/contracts/.dockerignore similarity index 79% rename from .dockerignore rename to contracts/.dockerignore index 593a4d9..bc86039 100644 --- a/.dockerignore +++ b/contracts/.dockerignore @@ -7,12 +7,10 @@ +**/README.md +**/LICENSE -***/node_modules/ ***/artifacts/ ***/cache/ ***/coverage/ ***/node_modules/ -***/database/ -***/venv/ -coverage.json \ No newline at end of file +coverage.json + diff --git a/contracts/.gitignore b/contracts/.gitignore index 8483f7f..1d4403d 100644 --- a/contracts/.gitignore +++ b/contracts/.gitignore @@ -1,4 +1,3 @@ -.DS_Store node_modules artifacts cache @@ -6,11 +5,4 @@ cache coverage/ deployments/ -coverage.json -gasReporterOutput.json - -build/c4udit/ -build/types/ -src/ - -.idea \ No newline at end of file +coverage.json \ No newline at end of file diff --git a/contracts/Dockerfile.dev b/contracts/Dockerfile.dev deleted file mode 100644 index 16ebb73..0000000 --- a/contracts/Dockerfile.dev +++ /dev/null @@ -1,15 +0,0 @@ -FROM node - -# Set working directory -WORKDIR /code - -# Copy the requirements file -COPY package.json /code/ - -# Install the dependencies -RUN npm install - -COPY . /code/ - -# Run the local node on 0.0.0.0:8545 -CMD ["npx", "hardhat", "node" "--hostname", "0.0.0.0", "--port", "8545"] \ No newline at end of file diff --git a/contracts/Dockerfile.dev.node b/contracts/Dockerfile.dev.node new file mode 100644 index 0000000..a195174 --- /dev/null +++ b/contracts/Dockerfile.dev.node @@ -0,0 +1,12 @@ +FROM node + +WORKDIR /code + +COPY package.json /code/package.json + +RUN npm install + +COPY . /code/ + +# Run the local node +CMD ["npx", "hardhat", "node"] \ No newline at end of file diff --git a/contracts/Dockerfile.dev.setup b/contracts/Dockerfile.dev.setup new file mode 100644 index 0000000..752d50c --- /dev/null +++ b/contracts/Dockerfile.dev.setup @@ -0,0 +1,12 @@ +FROM node + +WORKDIR /code + +COPY package.json /code/package.json + +RUN npm install + +COPY . /code/ + +# Deploy the contracts +CMD ["npx", "hardhat", "deploy"] \ No newline at end of file diff --git a/contracts/LICENSE b/contracts/LICENSE deleted file mode 100644 index f288702..0000000 --- a/contracts/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/contracts/README.md b/contracts/README.md deleted file mode 100644 index 56bbd4d..0000000 --- a/contracts/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# Badger Contracts - -Badger is an opionionated-by-default primitive designed to drive the actions of on-chain Organizations and their members with Badges. As a primitive, the contracts have been designed to remove the need of including any opinionated logic in the core contracts while maintaining the ability of a user-specific solution. - -While the core contracts are opinionless, `Hooks` and `Managers` can be used to introduce opinionated logic to the system depending on the need of each Badge, Organization or even Manager. Further, instead of having to apply opinion organization-wide, `Hooks` and `Managers` can be applied to a single Badge while still maintaing the ability to set global values when wanted. - -```ml -contracts -├─ (🏠 = Organization || 🏷️ = Badge) -├─ hooks -──├── forfeit -─────├─ 🏷️ BadgerForfeitForbidden - "Forfeiting a Badge is not allowed." -──├── hook -─────├─ 🏠 BadgerHookBlocklist - "Forbids certain addresses from being enabled as a Hook." -──├── mint -─────├─ 🏷️ BadgerMintMax - "Maximum number of Badges that can be minted to a recipient." -─────├─ 🏷️ BadgerMintMaxAllowance - "Maximum number of Badges that can be minted by a specific manager." -─────├─ 🏷️ BadgerMintMaxSupply - "Maximum number of Badges that can be minted." -─────├─ 🏷️ BadgerMintSelf - "Mint mechanism that requires the recipient to be the caller." -──├── revoke -─────├─ 🏷️ BadgerRevokeForbidden - "Revoking a Badge is not allowed." -──├── transfer -─────├─ 🏠 BadgerTransferBlocklist - "Addresses that are not allowed to receive any Badge." -─────├─ 🏷️ BadgerTransferBound - "Enforce account bound functionality per token id." -─────├─ 🏷️ BadgerTransferBoundManaged - "Enforce account bound functionality that can be overridden by a Manager." -──├── types -─────├─ BadgerForfeitHook - "Type declaration of interface for a Forfeit Hook." -─────├─ BadgerHookHook - "Type declaration of interface for a Hook Hook." -─────├─ BadgerMintHook - "Type declaration of interface for a Mint Hook." -─────├─ BadgerRevokeHook - "Type declaration of interface for a Revoke Hook." -─────├─ BadgerTransferHook - "Type declaration of interface for a Transfer Hook." -──├── BadgerHook - "Minimal framework for a Badger Organization Hook." -──├── BadgerHooked - "Logic that drives the consumption of Organization Hooks." -├─ interfaces -──├── IBadger - "Interface to of Badger Factory to enable programatic Organization creation." -──├── IBadgerConfigured - "Interface to a Badger Module that can be configured." -──├── IBadgerHook - "Interface of a Hook powering exogenous logic of an Organization." -──├── IBadgerHooked - "Interface of the logic driving the consumption of Organization Hooks." -──├── IBadgerManaged - "Interface of the logic driving the consumption of Organization Managers." -──├── IBadgerOrganization - "Non-admin interface for Badger Organization consumption." -──├── IBadgerOrganizationLogic - "Admin-level interface for the backend framework that drives an Organization." -├─ managers -──├── 🏷️ BadgerManagerClaimable - "Enable an open-edition claiming where users can claim a Badge at no cost." -──├── 🏷️ BadgerManagerPaidERC20 - "Mint using ERC20s as a Payment Token to mint Badges." -──├── 🏷️ BadgerManagerPaidERC721 - "Mint using ERC721s as a Payment Token to mint Badges." -──├── 🏷️ BadgerManagerPaidERC1155 - "Mint using ERC1155s as a Payment Token to mint Badges." -──├── 🏷️ BadgerManagerPaidNative - "Mint using native tokens as a Payment Token to mint Badges." -──├── 🏷️ BadgerManagerSignature - "Mint gated by a system signature when minting Badges." -├─ Badger - "Factory that deploys new Badger Organizations and Badges." -├─ BadgerNetwork - "Inline controller of configuring a Badger Module." -├─ BadgerOrganization - "The logic driving the non-admin functions of a Badger Organization." -├─ BadgerOrganizationLogic - "The state of the Organization and Badges and all admin-level functions an Organization has." -``` - -## The Shape of an Organization - -Badger Organizations are built with a rather straightforward middle-out approach. Designed to scale in both directions of need: case-specific centralization and decentralization live at the core of how Organizations have been built. - -At the core, Organizations are deployed by a Factory and instantiated with just an Owner. An Owner has the ability to empower Managers, connect Hooks, create Badges and more all in a single interface and localized smart contract. - -* There are Organizations with Badges and Managers. -* There are Badges with Members and Managers. -* There are Modules that can be plugged in at a object-level to enable new functionality. - -*Organizations grow and evolve over time and Badger is prepared to support that change.* With `Hooks`, not only can old functionality be disabled, but new `Hooks` and `Managers` can be integrated that drive the future needs without abandoning the historical power and integration of the existing Organization. - -## The Manager Pattern - -Every Organization and Badge has an optional set of `Managers` that permits shared access to admin-level functions of the relative scope. - -* An Organization Manager operates as one would expect to a real-world business; the owner implicitly trusts the manager and has given shared access to key functions. - * Create, mint and revoke new Badges. - * Adjust the delegates of all Badges. - * The only action that an Organization Manager cannot do is add new Managers or resign from the position however the Owner may remove the Manager. -* A Badge Manager operates with shared logic to the Organization Manager while strictly scoped to the level of a single token. - * Mint and revoke the assigned Badge. - * The only action that an Badge Manager cannot do is add new Managers or resign from the position however the Owner and other Organization Managers may remove the Badge Manager. - -## Immutable Hooks and Managers - -When developing Hooks and Managers that drive a Badger Organization, it has been made of utmost important to make modules ***immutable and ownerless***. Meaning, while the Badger team may develop and deploy a module that Organizations consume, there is no mechanism of changing the connected smart contract. With this architecture, everything is constantly localized to the sender of the message. - -* When writing the configuration, the reference is set to the `msg.sender`. -* Execution of a `Hook` is triggered by the consuming Organization, not an external reference or sender. -* Usage of a `Manager` precedes the execution of an Organization action. -* A Badge can be assigned many `Managers` and `Hooks` specific to the needs of each Badge. - -Although there has been a foundational framework of hooks and managers offered. Those with the knowledge and experience to write their own hooks and managers are encouraged to do so. - -* **Hook Hooks:** Hooks that are triggered when a hook is set with an active `isHook`. -* **Mint Hooks:** Hooks that are triggered when a Badge is minted. -* **Revoke Hooks:** Hooks that are triggered when a Badge is revoked. -* **Forfeit Hooks:** Hooks that are triggered when a Badge is forfeited. -* **Transfer Hooks:** Hooks that are triggered when a Badge is transferred. - -## Revokability - -Out of the gate, Badger Organizations are empowered with the ability to have `Revokable` Badges under the control of Organization and Badge Managers (depending on the respective configuration of each.) Badger is designed to drive complex permissions and on-chain access policies with the addition of permission revocation: a critical feature to any permission system. - -Although Badges are designed to be revokable by default, a `RevokeHook` may be applied to a Badge to prevent revocation such as `BadgerRevokeForbidden.sol`. This is useful for Badges that are meant to be permanent and not revokable. - -## Eternal Forfeits - -The final piece of semi-opinion included in the default operation of Badger is that token forfeiture is recommended and enabled by default however again by be prevented with a hook in `ForfeitHook` such as `BadgerForfeitForbidden.sol`. - -> Notably, while the mechanism of permanent account binding is possible, it is not recommended. This is because the social contract of Badges is that they are not means of identity resolution and that a Badge holder may forfeit their Badge at any time. - -## Types...? In Solidity? - -The Badger Organization is designed to be a framework for the creation of Badges and Organizations. To enable this, consumption of Hooks is driven by the decoding of the `bytes` data that is passed to the `execute` function. This is done by the `BadgerOrganizationHooked.sol` contract. - -With a DRY approach, the types offered serve as a boilerplate template to implement a new hook of a specific type. - -* `CONFIG_SCHEMA` reflects the bytes schema needed when calling `.config()` -* `EXECUTE_SCHEMA` reflects the bytes schema needed when calling `.execute()` - -## Audit - -Badger V6 is in the process of being audited. Responses will be made public once it has been completed and all issues have been resolved. - -In the meantime, you can find resources of due diligence below: - -* [c4udit](./build/c4udit-report.md) - "A low-complexity audit of the Badger contracts utilizing the C4 model." -* [gas report](./build/gas-report.txt) - "Gas usage of the Badger contracts." -* [abis](./build/abis/) - "ABI files of the Badger contracts." - -## Testing the Contract - -To run the smart contracts you may use the following command: - -```bash -MINING="true" npx hardhat test .\test\Badger.js --verbose --fulltrace -``` \ No newline at end of file diff --git a/contracts/abis/Badger.json b/contracts/abis/Badger.json new file mode 100644 index 0000000..fb4f8e5 --- /dev/null +++ b/contracts/abis/Badger.json @@ -0,0 +1,19 @@ +[ + "constructor(address)", + "event OrganizationCreated(address indexed,address indexed,address indexed)", + "event OwnershipTransferred(address indexed,address indexed)", + "event VersionUpdated(address indexed,address indexed,bytes32 indexed,uint256,bool)", + "function createOrganization(address,address,string,string,string,string) returns (address)", + "function execTransaction(address,bytes,uint256) payable", + "function getLicenseKey(bytes32,address) pure returns (bytes32)", + "function getVersionKey(address) view returns (bytes32)", + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function owner() view returns (address)", + "function renounceOwnership()", + "function setVersion(address,address,address,uint256,uint256,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function transferOwnership(address)", + "function versionKeyToFunded(bytes32) view returns (uint256)", + "function versions(address) view returns (address, bytes32, uint256, bool)" +] diff --git a/contracts/abis/BadgerInterface.json b/contracts/abis/BadgerInterface.json new file mode 100644 index 0000000..1f8b27b --- /dev/null +++ b/contracts/abis/BadgerInterface.json @@ -0,0 +1,3 @@ +[ + "function createOrganization(address,address,string,string,string,string) returns (address)" +] diff --git a/contracts/abis/BadgerOrganization.json b/contracts/abis/BadgerOrganization.json new file mode 100644 index 0000000..5cb8aed --- /dev/null +++ b/contracts/abis/BadgerOrganization.json @@ -0,0 +1,59 @@ +[ + "event ApprovalForAll(address indexed,address indexed,bool)", + "event BadgeForfeited(uint256 indexed,uint256 indexed,bytes indexed)", + "event BadgeUpdated(uint256 indexed,uint256 indexed,bytes32 indexed,uint256)", + "event DelegateUpdated(uint256 indexed,address indexed,bool indexed)", + "event Initialized(uint8)", + "event OrganizationUpdated(string)", + "event OwnershipTransferred(address indexed,address indexed)", + "event PaymentTokenDeposited(uint256 indexed,address indexed,uint256 indexed)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", + "function DOLPHIN_ETH() view returns (address)", + "function badgeDelegateKeyToIsDelegate(bytes32) view returns (bool)", + "function badges(uint256) view returns (uint256, string, tuple(bytes32,uint256))", + "function balanceOf(address,uint256) view returns (uint256)", + "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", + "function claimMint(bytes,uint256,uint256,bytes) payable", + "function contractURI() view returns (string)", + "function depositERC20(uint256,address,uint256)", + "function depositETH(uint256) payable", + "function execTransaction(address,bytes,uint256) payable", + "function forfeit(uint256,uint256,bytes)", + "function getAccountBound(uint256) view returns (bool)", + "function getClaimable(uint256) view returns (bool)", + "function getSigner(uint256) view returns (address)", + "function initialize(address,string,string,string,string)", + "function isApprovedForAll(address,address) view returns (bool)", + "function isDelegate(uint256,address) view returns (bool)", + "function leaderMint(address,uint256,uint256,bytes)", + "function leaderMintBatch(address[],uint256,uint256[],bytes)", + "function leaderMintFullBatch(address[],uint256[],uint256[],bytes)", + "function name() view returns (string)", + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function onERC721Received(address,address,uint256,bytes) returns (bytes4)", + "function organizationURI() view returns (string)", + "function owner() view returns (address)", + "function renounceOwnership()", + "function revoke(address,uint256,uint256)", + "function revokeBatch(address[],uint256,uint256[])", + "function revokeFullBatch(address[],uint256[],uint256[])", + "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", + "function safeTransferFrom(address,address,uint256,uint256,bytes)", + "function setAccountBound(uint256,bool)", + "function setApprovalForAll(address,bool)", + "function setBadge(uint256,bool,bool,address,string,tuple(bytes32,uint256),address[])", + "function setBadgeURI(uint256,string)", + "function setClaimable(uint256,bool)", + "function setDelegates(uint256,address[],bool[])", + "function setDelegatesBatch(uint256[],address[],bool[])", + "function setOrganizationURI(string)", + "function setPaymentToken(uint256,tuple(bytes32,uint256))", + "function setSigner(uint256,address)", + "function supportsInterface(bytes4) view returns (bool)", + "function symbol() view returns (string)", + "function transferOwnership(address)", + "function uri(uint256) view returns (string)" +] diff --git a/contracts/abis/BadgerOrganizationInterface.json b/contracts/abis/BadgerOrganizationInterface.json new file mode 100644 index 0000000..0189990 --- /dev/null +++ b/contracts/abis/BadgerOrganizationInterface.json @@ -0,0 +1,11 @@ +[ + "function claimMint(bytes,uint256,uint256,bytes) payable", + "function depositERC20(uint256,address,uint256)", + "function depositETH(uint256) payable", + "function forfeit(uint256,uint256,bytes)", + "function initialize(address,string,string,string,string)", + "function leaderMint(address,uint256,uint256,bytes)", + "function leaderMintBatch(address[],uint256,uint256[],bytes)", + "function revoke(address,uint256,uint256)", + "function revokeBatch(address[],uint256,uint256[])" +] diff --git a/contracts/abis/BadgerScout.json b/contracts/abis/BadgerScout.json new file mode 100644 index 0000000..ba73b6f --- /dev/null +++ b/contracts/abis/BadgerScout.json @@ -0,0 +1,47 @@ +[ + "event ApprovalForAll(address indexed,address indexed,bool)", + "event BadgeForfeited(uint256 indexed,uint256 indexed,bytes indexed)", + "event BadgeUpdated(uint256 indexed,uint256 indexed,bytes32 indexed,uint256)", + "event DelegateUpdated(uint256 indexed,address indexed,bool indexed)", + "event Initialized(uint8)", + "event OrganizationUpdated(string)", + "event OwnershipTransferred(address indexed,address indexed)", + "event PaymentTokenDeposited(uint256 indexed,address indexed,uint256 indexed)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", + "function DOLPHIN_ETH() view returns (address)", + "function badgeDelegateKeyToIsDelegate(bytes32) view returns (bool)", + "function badges(uint256) view returns (uint256, string, tuple(bytes32,uint256))", + "function balanceOf(address,uint256) view returns (uint256)", + "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", + "function execTransaction(address,bytes,uint256) payable", + "function getAccountBound(uint256) view returns (bool)", + "function getClaimable(uint256) view returns (bool)", + "function getSigner(uint256) view returns (address)", + "function isApprovedForAll(address,address) view returns (bool)", + "function isDelegate(uint256,address) view returns (bool)", + "function name() view returns (string)", + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function onERC721Received(address,address,uint256,bytes) returns (bytes4)", + "function organizationURI() view returns (string)", + "function owner() view returns (address)", + "function renounceOwnership()", + "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", + "function safeTransferFrom(address,address,uint256,uint256,bytes)", + "function setAccountBound(uint256,bool)", + "function setApprovalForAll(address,bool)", + "function setBadge(uint256,bool,bool,address,string,tuple(bytes32,uint256),address[])", + "function setBadgeURI(uint256,string)", + "function setClaimable(uint256,bool)", + "function setDelegates(uint256,address[],bool[])", + "function setDelegatesBatch(uint256[],address[],bool[])", + "function setOrganizationURI(string)", + "function setPaymentToken(uint256,tuple(bytes32,uint256))", + "function setSigner(uint256,address)", + "function supportsInterface(bytes4) view returns (bool)", + "function symbol() view returns (string)", + "function transferOwnership(address)", + "function uri(uint256) view returns (string)" +] diff --git a/contracts/abis/BadgerScoutInterface.json b/contracts/abis/BadgerScoutInterface.json new file mode 100644 index 0000000..d9b3089 --- /dev/null +++ b/contracts/abis/BadgerScoutInterface.json @@ -0,0 +1,15 @@ +[ + "function getAccountBound(uint256) view returns (bool)", + "function getClaimable(uint256) view returns (bool)", + "function getSigner(uint256) view returns (address)", + "function isDelegate(uint256,address) view returns (bool)", + "function setAccountBound(uint256,bool)", + "function setBadge(uint256,bool,bool,address,string,tuple(bytes32,uint256),address[])", + "function setBadgeURI(uint256,string)", + "function setClaimable(uint256,bool)", + "function setDelegates(uint256,address[],bool[])", + "function setDelegatesBatch(uint256[],address[],bool[])", + "function setOrganizationURI(string)", + "function setPaymentToken(uint256,tuple(bytes32,uint256))", + "function setSigner(uint256,address)" +] diff --git a/contracts/abis/BadgerVersions.json b/contracts/abis/BadgerVersions.json new file mode 100644 index 0000000..48052d1 --- /dev/null +++ b/contracts/abis/BadgerVersions.json @@ -0,0 +1,17 @@ +[ + "constructor(address)", + "event OrganizationCreated(address indexed,address indexed,address indexed)", + "event OwnershipTransferred(address indexed,address indexed)", + "event VersionUpdated(address indexed,address indexed,bytes32 indexed,uint256,bool)", + "function getLicenseKey(bytes32,address) pure returns (bytes32)", + "function getVersionKey(address) view returns (bytes32)", + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function owner() view returns (address)", + "function renounceOwnership()", + "function setVersion(address,address,address,uint256,uint256,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function transferOwnership(address)", + "function versionKeyToFunded(bytes32) view returns (uint256)", + "function versions(address) view returns (address, bytes32, uint256, bool)" +] diff --git a/contracts/abis/BadgerVersionsInterface.json b/contracts/abis/BadgerVersionsInterface.json new file mode 100644 index 0000000..f11955a --- /dev/null +++ b/contracts/abis/BadgerVersionsInterface.json @@ -0,0 +1,5 @@ +[ + "function getLicenseKey(bytes32,address) pure returns (bytes32)", + "function getVersionKey(address) view returns (bytes32)", + "function setVersion(address,address,address,uint256,uint256,bool)" +] diff --git a/api/abis/ContextUpgradeable.json b/contracts/abis/ContextUpgradeable.json similarity index 100% rename from api/abis/ContextUpgradeable.json rename to contracts/abis/ContextUpgradeable.json diff --git a/contracts/abis/ERC1155.json b/contracts/abis/ERC1155.json new file mode 100644 index 0000000..7588e35 --- /dev/null +++ b/contracts/abis/ERC1155.json @@ -0,0 +1,15 @@ +[ + "constructor(string)", + "event ApprovalForAll(address indexed,address indexed,bool)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", + "function balanceOf(address,uint256) view returns (uint256)", + "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", + "function isApprovedForAll(address,address) view returns (bool)", + "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", + "function safeTransferFrom(address,address,uint256,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function uri(uint256) view returns (string)" +] diff --git a/api/abis/IERC1155ReceiverUpgradeable.json b/contracts/abis/ERC1155Holder.json similarity index 100% rename from api/abis/IERC1155ReceiverUpgradeable.json rename to contracts/abis/ERC1155Holder.json diff --git a/contracts/abis/ERC1155HolderUpgradeable.json b/contracts/abis/ERC1155HolderUpgradeable.json new file mode 100644 index 0000000..f47137f --- /dev/null +++ b/contracts/abis/ERC1155HolderUpgradeable.json @@ -0,0 +1,6 @@ +[ + "event Initialized(uint8)", + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function supportsInterface(bytes4) view returns (bool)" +] diff --git a/contracts/abis/ERC1155Receiver.json b/contracts/abis/ERC1155Receiver.json new file mode 100644 index 0000000..5085dc9 --- /dev/null +++ b/contracts/abis/ERC1155Receiver.json @@ -0,0 +1,5 @@ +[ + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function supportsInterface(bytes4) view returns (bool)" +] diff --git a/contracts/abis/ERC1155ReceiverUpgradeable.json b/contracts/abis/ERC1155ReceiverUpgradeable.json new file mode 100644 index 0000000..f47137f --- /dev/null +++ b/contracts/abis/ERC1155ReceiverUpgradeable.json @@ -0,0 +1,6 @@ +[ + "event Initialized(uint8)", + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function supportsInterface(bytes4) view returns (bool)" +] diff --git a/api/abis/ERC1155Upgradeable.json b/contracts/abis/ERC1155Upgradeable.json similarity index 100% rename from api/abis/ERC1155Upgradeable.json rename to contracts/abis/ERC1155Upgradeable.json diff --git a/api/abis/ERC165.json b/contracts/abis/ERC165.json similarity index 100% rename from api/abis/ERC165.json rename to contracts/abis/ERC165.json diff --git a/api/abis/ERC165Upgradeable.json b/contracts/abis/ERC165Upgradeable.json similarity index 100% rename from api/abis/ERC165Upgradeable.json rename to contracts/abis/ERC165Upgradeable.json diff --git a/contracts/abis/ERC20.json b/contracts/abis/ERC20.json new file mode 100644 index 0000000..a2cd332 --- /dev/null +++ b/contracts/abis/ERC20.json @@ -0,0 +1,16 @@ +[ + "constructor(string,string)", + "event Approval(address indexed,address indexed,uint256)", + "event Transfer(address indexed,address indexed,uint256)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + "function balanceOf(address) view returns (uint256)", + "function decimals() view returns (uint8)", + "function decreaseAllowance(address,uint256) returns (bool)", + "function increaseAllowance(address,uint256) returns (bool)", + "function name() view returns (string)", + "function symbol() view returns (string)", + "function totalSupply() view returns (uint256)", + "function transfer(address,uint256) returns (bool)", + "function transferFrom(address,address,uint256) returns (bool)" +] diff --git a/contracts/abis/ERC721.json b/contracts/abis/ERC721.json new file mode 100644 index 0000000..6f35cf8 --- /dev/null +++ b/contracts/abis/ERC721.json @@ -0,0 +1,19 @@ +[ + "constructor(string,string)", + "event Approval(address indexed,address indexed,uint256 indexed)", + "event ApprovalForAll(address indexed,address indexed,bool)", + "event Transfer(address indexed,address indexed,uint256 indexed)", + "function approve(address,uint256)", + "function balanceOf(address) view returns (uint256)", + "function getApproved(uint256) view returns (address)", + "function isApprovedForAll(address,address) view returns (bool)", + "function name() view returns (string)", + "function ownerOf(uint256) view returns (address)", + "function safeTransferFrom(address,address,uint256)", + "function safeTransferFrom(address,address,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function symbol() view returns (string)", + "function tokenURI(uint256) view returns (string)", + "function transferFrom(address,address,uint256)" +] diff --git a/contracts/abis/ERC721HolderUpgradeable.json b/contracts/abis/ERC721HolderUpgradeable.json new file mode 100644 index 0000000..f6748b0 --- /dev/null +++ b/contracts/abis/ERC721HolderUpgradeable.json @@ -0,0 +1,4 @@ +[ + "event Initialized(uint8)", + "function onERC721Received(address,address,uint256,bytes) returns (bytes4)" +] diff --git a/api/abis/IERC1155Upgradeable.json b/contracts/abis/IERC1155.json similarity index 100% rename from api/abis/IERC1155Upgradeable.json rename to contracts/abis/IERC1155.json diff --git a/api/abis/IERC1155MetadataURIUpgradeable.json b/contracts/abis/IERC1155MetadataURI.json similarity index 100% rename from api/abis/IERC1155MetadataURIUpgradeable.json rename to contracts/abis/IERC1155MetadataURI.json diff --git a/contracts/abis/IERC1155MetadataURIUpgradeable.json b/contracts/abis/IERC1155MetadataURIUpgradeable.json new file mode 100644 index 0000000..8aa4b39 --- /dev/null +++ b/contracts/abis/IERC1155MetadataURIUpgradeable.json @@ -0,0 +1,14 @@ +[ + "event ApprovalForAll(address indexed,address indexed,bool)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", + "function balanceOf(address,uint256) view returns (uint256)", + "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", + "function isApprovedForAll(address,address) view returns (bool)", + "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", + "function safeTransferFrom(address,address,uint256,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function uri(uint256) view returns (string)" +] diff --git a/contracts/abis/IERC1155Receiver.json b/contracts/abis/IERC1155Receiver.json new file mode 100644 index 0000000..5085dc9 --- /dev/null +++ b/contracts/abis/IERC1155Receiver.json @@ -0,0 +1,5 @@ +[ + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function supportsInterface(bytes4) view returns (bool)" +] diff --git a/contracts/abis/IERC1155ReceiverUpgradeable.json b/contracts/abis/IERC1155ReceiverUpgradeable.json new file mode 100644 index 0000000..5085dc9 --- /dev/null +++ b/contracts/abis/IERC1155ReceiverUpgradeable.json @@ -0,0 +1,5 @@ +[ + "function onERC1155BatchReceived(address,address,uint256[],uint256[],bytes) returns (bytes4)", + "function onERC1155Received(address,address,uint256,uint256,bytes) returns (bytes4)", + "function supportsInterface(bytes4) view returns (bool)" +] diff --git a/contracts/abis/IERC1155Upgradeable.json b/contracts/abis/IERC1155Upgradeable.json new file mode 100644 index 0000000..b91788a --- /dev/null +++ b/contracts/abis/IERC1155Upgradeable.json @@ -0,0 +1,13 @@ +[ + "event ApprovalForAll(address indexed,address indexed,bool)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", + "function balanceOf(address,uint256) view returns (uint256)", + "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", + "function isApprovedForAll(address,address) view returns (bool)", + "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", + "function safeTransferFrom(address,address,uint256,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)" +] diff --git a/api/abis/IERC165.json b/contracts/abis/IERC165.json similarity index 100% rename from api/abis/IERC165.json rename to contracts/abis/IERC165.json diff --git a/api/abis/IERC165Upgradeable.json b/contracts/abis/IERC165Upgradeable.json similarity index 100% rename from api/abis/IERC165Upgradeable.json rename to contracts/abis/IERC165Upgradeable.json diff --git a/contracts/abis/IERC20.json b/contracts/abis/IERC20.json new file mode 100644 index 0000000..e91e86d --- /dev/null +++ b/contracts/abis/IERC20.json @@ -0,0 +1,10 @@ +[ + "event Approval(address indexed,address indexed,uint256)", + "event Transfer(address indexed,address indexed,uint256)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + "function balanceOf(address) view returns (uint256)", + "function totalSupply() view returns (uint256)", + "function transfer(address,uint256) returns (bool)", + "function transferFrom(address,address,uint256) returns (bool)" +] diff --git a/contracts/abis/IERC20Metadata.json b/contracts/abis/IERC20Metadata.json new file mode 100644 index 0000000..825a52b --- /dev/null +++ b/contracts/abis/IERC20Metadata.json @@ -0,0 +1,13 @@ +[ + "event Approval(address indexed,address indexed,uint256)", + "event Transfer(address indexed,address indexed,uint256)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + "function balanceOf(address) view returns (uint256)", + "function decimals() view returns (uint8)", + "function name() view returns (string)", + "function symbol() view returns (string)", + "function totalSupply() view returns (uint256)", + "function transfer(address,uint256) returns (bool)", + "function transferFrom(address,address,uint256) returns (bool)" +] diff --git a/contracts/abis/IERC20PermitUpgradeable.json b/contracts/abis/IERC20PermitUpgradeable.json new file mode 100644 index 0000000..3da0b17 --- /dev/null +++ b/contracts/abis/IERC20PermitUpgradeable.json @@ -0,0 +1,5 @@ +[ + "function DOMAIN_SEPARATOR() view returns (bytes32)", + "function nonces(address) view returns (uint256)", + "function permit(address,address,uint256,uint256,uint8,bytes32,bytes32)" +] diff --git a/contracts/abis/IERC20Upgradeable.json b/contracts/abis/IERC20Upgradeable.json new file mode 100644 index 0000000..e91e86d --- /dev/null +++ b/contracts/abis/IERC20Upgradeable.json @@ -0,0 +1,10 @@ +[ + "event Approval(address indexed,address indexed,uint256)", + "event Transfer(address indexed,address indexed,uint256)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + "function balanceOf(address) view returns (uint256)", + "function totalSupply() view returns (uint256)", + "function transfer(address,uint256) returns (bool)", + "function transferFrom(address,address,uint256) returns (bool)" +] diff --git a/contracts/abis/IERC721.json b/contracts/abis/IERC721.json new file mode 100644 index 0000000..3c92fdc --- /dev/null +++ b/contracts/abis/IERC721.json @@ -0,0 +1,15 @@ +[ + "event Approval(address indexed,address indexed,uint256 indexed)", + "event ApprovalForAll(address indexed,address indexed,bool)", + "event Transfer(address indexed,address indexed,uint256 indexed)", + "function approve(address,uint256)", + "function balanceOf(address) view returns (uint256)", + "function getApproved(uint256) view returns (address)", + "function isApprovedForAll(address,address) view returns (bool)", + "function ownerOf(uint256) view returns (address)", + "function safeTransferFrom(address,address,uint256)", + "function safeTransferFrom(address,address,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function transferFrom(address,address,uint256)" +] diff --git a/contracts/abis/IERC721Metadata.json b/contracts/abis/IERC721Metadata.json new file mode 100644 index 0000000..8b7dc09 --- /dev/null +++ b/contracts/abis/IERC721Metadata.json @@ -0,0 +1,18 @@ +[ + "event Approval(address indexed,address indexed,uint256 indexed)", + "event ApprovalForAll(address indexed,address indexed,bool)", + "event Transfer(address indexed,address indexed,uint256 indexed)", + "function approve(address,uint256)", + "function balanceOf(address) view returns (uint256)", + "function getApproved(uint256) view returns (address)", + "function isApprovedForAll(address,address) view returns (bool)", + "function name() view returns (string)", + "function ownerOf(uint256) view returns (address)", + "function safeTransferFrom(address,address,uint256)", + "function safeTransferFrom(address,address,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function symbol() view returns (string)", + "function tokenURI(uint256) view returns (string)", + "function transferFrom(address,address,uint256)" +] diff --git a/contracts/abis/IERC721Receiver.json b/contracts/abis/IERC721Receiver.json new file mode 100644 index 0000000..97f1c38 --- /dev/null +++ b/contracts/abis/IERC721Receiver.json @@ -0,0 +1,3 @@ +[ + "function onERC721Received(address,address,uint256,bytes) returns (bytes4)" +] diff --git a/contracts/abis/IERC721ReceiverUpgradeable.json b/contracts/abis/IERC721ReceiverUpgradeable.json new file mode 100644 index 0000000..97f1c38 --- /dev/null +++ b/contracts/abis/IERC721ReceiverUpgradeable.json @@ -0,0 +1,3 @@ +[ + "function onERC721Received(address,address,uint256,bytes) returns (bytes4)" +] diff --git a/api/abis/Initializable.json b/contracts/abis/Initializable.json similarity index 100% rename from api/abis/Initializable.json rename to contracts/abis/Initializable.json diff --git a/contracts/abis/MockERC1155.json b/contracts/abis/MockERC1155.json new file mode 100644 index 0000000..5dd8ae6 --- /dev/null +++ b/contracts/abis/MockERC1155.json @@ -0,0 +1,16 @@ +[ + "constructor(string)", + "event ApprovalForAll(address indexed,address indexed,bool)", + "event TransferBatch(address indexed,address indexed,address indexed,uint256[],uint256[])", + "event TransferSingle(address indexed,address indexed,address indexed,uint256,uint256)", + "event URI(string,uint256 indexed)", + "function balanceOf(address,uint256) view returns (uint256)", + "function balanceOfBatch(address[],uint256[]) view returns (uint256[])", + "function isApprovedForAll(address,address) view returns (bool)", + "function mint(address,uint256,uint256,bytes)", + "function safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", + "function safeTransferFrom(address,address,uint256,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function uri(uint256) view returns (string)" +] diff --git a/contracts/abis/MockERC20.json b/contracts/abis/MockERC20.json new file mode 100644 index 0000000..8a8dbd7 --- /dev/null +++ b/contracts/abis/MockERC20.json @@ -0,0 +1,17 @@ +[ + "constructor(string,string)", + "event Approval(address indexed,address indexed,uint256)", + "event Transfer(address indexed,address indexed,uint256)", + "function allowance(address,address) view returns (uint256)", + "function approve(address,uint256) returns (bool)", + "function balanceOf(address) view returns (uint256)", + "function decimals() view returns (uint8)", + "function decreaseAllowance(address,uint256) returns (bool)", + "function increaseAllowance(address,uint256) returns (bool)", + "function mint(address,uint256)", + "function name() view returns (string)", + "function symbol() view returns (string)", + "function totalSupply() view returns (uint256)", + "function transfer(address,uint256) returns (bool)", + "function transferFrom(address,address,uint256) returns (bool)" +] diff --git a/contracts/abis/MockERC721.json b/contracts/abis/MockERC721.json new file mode 100644 index 0000000..58488fc --- /dev/null +++ b/contracts/abis/MockERC721.json @@ -0,0 +1,20 @@ +[ + "constructor(string,string)", + "event Approval(address indexed,address indexed,uint256 indexed)", + "event ApprovalForAll(address indexed,address indexed,bool)", + "event Transfer(address indexed,address indexed,uint256 indexed)", + "function approve(address,uint256)", + "function balanceOf(address) view returns (uint256)", + "function getApproved(uint256) view returns (address)", + "function isApprovedForAll(address,address) view returns (bool)", + "function mint(address,uint256)", + "function name() view returns (string)", + "function ownerOf(uint256) view returns (address)", + "function safeTransferFrom(address,address,uint256)", + "function safeTransferFrom(address,address,uint256,bytes)", + "function setApprovalForAll(address,bool)", + "function supportsInterface(bytes4) view returns (bool)", + "function symbol() view returns (string)", + "function tokenURI(uint256) view returns (string)", + "function transferFrom(address,address,uint256)" +] diff --git a/contracts/abis/Ownable.json b/contracts/abis/Ownable.json new file mode 100644 index 0000000..c7766c0 --- /dev/null +++ b/contracts/abis/Ownable.json @@ -0,0 +1,6 @@ +[ + "event OwnershipTransferred(address indexed,address indexed)", + "function owner() view returns (address)", + "function renounceOwnership()", + "function transferOwnership(address)" +] diff --git a/api/abis/OwnableUpgradeable.json b/contracts/abis/OwnableUpgradeable.json similarity index 100% rename from api/abis/OwnableUpgradeable.json rename to contracts/abis/OwnableUpgradeable.json diff --git a/contracts/build/abis/Badger.json b/contracts/build/abis/Badger.json deleted file mode 100644 index d3bf573..0000000 --- a/contracts/build/abis/Badger.json +++ /dev/null @@ -1,153 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract BadgerOrganization", - "name": "organization", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "name": "OrganizationCreated", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organizationStruct", - "type": "tuple" - } - ], - "name": "createOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "badgerOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_organizationId", - "type": "uint256" - } - ], - "name": "getOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizations", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerForfeitForbidden.json b/contracts/build/abis/BadgerForfeitForbidden.json deleted file mode 100644 index 431277b..0000000 --- a/contracts/build/abis/BadgerForfeitForbidden.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "forbidden", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerForfeitHook.json b/contracts/build/abis/BadgerForfeitHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/contracts/build/abis/BadgerForfeitHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerHook.json b/contracts/build/abis/BadgerHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/contracts/build/abis/BadgerHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerHookBlocklist.json b/contracts/build/abis/BadgerHookBlocklist.json deleted file mode 100644 index 1019c9a..0000000 --- a/contracts/build/abis/BadgerHookBlocklist.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "blocked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerHookHook.json b/contracts/build/abis/BadgerHookHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/contracts/build/abis/BadgerHookHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerHooked.json b/contracts/build/abis/BadgerHooked.json deleted file mode 100644 index b622e63..0000000 --- a/contracts/build/abis/BadgerHooked.json +++ /dev/null @@ -1,130 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerManaged.json b/contracts/build/abis/BadgerManaged.json deleted file mode 100644 index bab180e..0000000 --- a/contracts/build/abis/BadgerManaged.json +++ /dev/null @@ -1,59 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerManager.json b/contracts/build/abis/BadgerManager.json deleted file mode 100644 index f672285..0000000 --- a/contracts/build/abis/BadgerManager.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerManagerClaimable.json b/contracts/build/abis/BadgerManagerClaimable.json deleted file mode 100644 index 953eac0..0000000 --- a/contracts/build/abis/BadgerManagerClaimable.json +++ /dev/null @@ -1,94 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "amounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerManagerSignature.json b/contracts/build/abis/BadgerManagerSignature.json deleted file mode 100644 index 8e4da36..0000000 --- a/contracts/build/abis/BadgerManagerSignature.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "signers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerMintHook.json b/contracts/build/abis/BadgerMintHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/contracts/build/abis/BadgerMintHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerMintMax.json b/contracts/build/abis/BadgerMintMax.json deleted file mode 100644 index 1ba288f..0000000 --- a/contracts/build/abis/BadgerMintMax.json +++ /dev/null @@ -1,126 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "minted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerMintMaxAllowance.json b/contracts/build/abis/BadgerMintMaxAllowance.json deleted file mode 100644 index 1ba288f..0000000 --- a/contracts/build/abis/BadgerMintMaxAllowance.json +++ /dev/null @@ -1,126 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "minted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerMintMaxSupply.json b/contracts/build/abis/BadgerMintMaxSupply.json deleted file mode 100644 index 4c34b58..0000000 --- a/contracts/build/abis/BadgerMintMaxSupply.json +++ /dev/null @@ -1,121 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerMintSelf.json b/contracts/build/abis/BadgerMintSelf.json deleted file mode 100644 index 49d64ae..0000000 --- a/contracts/build/abis/BadgerMintSelf.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "selfOperated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerOrganization.json b/contracts/build/abis/BadgerOrganization.json deleted file mode 100644 index cba49e7..0000000 --- a/contracts/build/abis/BadgerOrganization.json +++ /dev/null @@ -1,1034 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_slotHook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "contractURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "forfeit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organization", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tos", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mintBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizationURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "revoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_froms", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - } - ], - "name": "revokeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uris", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerOrganizationLogic.json b/contracts/build/abis/BadgerOrganizationLogic.json deleted file mode 100644 index 13fbd46..0000000 --- a/contracts/build/abis/BadgerOrganizationLogic.json +++ /dev/null @@ -1,882 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_slotHook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organization", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizationURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uris", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerRevokeForbidden.json b/contracts/build/abis/BadgerRevokeForbidden.json deleted file mode 100644 index 431277b..0000000 --- a/contracts/build/abis/BadgerRevokeForbidden.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "forbidden", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerRevokeHook.json b/contracts/build/abis/BadgerRevokeHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/contracts/build/abis/BadgerRevokeHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerTransferBlocklist.json b/contracts/build/abis/BadgerTransferBlocklist.json deleted file mode 100644 index 1019c9a..0000000 --- a/contracts/build/abis/BadgerTransferBlocklist.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "blocked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerTransferBound.json b/contracts/build/abis/BadgerTransferBound.json deleted file mode 100644 index 014b4cb..0000000 --- a/contracts/build/abis/BadgerTransferBound.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountBound", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerTransferBoundManaged.json b/contracts/build/abis/BadgerTransferBoundManaged.json deleted file mode 100644 index 014b4cb..0000000 --- a/contracts/build/abis/BadgerTransferBoundManaged.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountBound", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/BadgerTransferHook.json b/contracts/build/abis/BadgerTransferHook.json deleted file mode 100644 index 928e5e6..0000000 --- a/contracts/build/abis/BadgerTransferHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/ContextUpgradeable.json b/contracts/build/abis/ContextUpgradeable.json deleted file mode 100644 index a4152bb..0000000 --- a/contracts/build/abis/ContextUpgradeable.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/contracts/build/abis/ERC1155Upgradeable.json b/contracts/build/abis/ERC1155Upgradeable.json deleted file mode 100644 index 283c185..0000000 --- a/contracts/build/abis/ERC1155Upgradeable.json +++ /dev/null @@ -1,327 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/ERC165.json b/contracts/build/abis/ERC165.json deleted file mode 100644 index 53fa000..0000000 --- a/contracts/build/abis/ERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/ERC165Upgradeable.json b/contracts/build/abis/ERC165Upgradeable.json deleted file mode 100644 index fcf0494..0000000 --- a/contracts/build/abis/ERC165Upgradeable.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IBadger.json b/contracts/build/abis/IBadger.json deleted file mode 100644 index 3558d82..0000000 --- a/contracts/build/abis/IBadger.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract BadgerOrganization", - "name": "organization", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "name": "OrganizationCreated", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organizationStruct", - "type": "tuple" - } - ], - "name": "createOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "badgerOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_organizationId", - "type": "uint256" - } - ], - "name": "getOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IBadgerConfigured.json b/contracts/build/abis/IBadgerConfigured.json deleted file mode 100644 index d4b85a1..0000000 --- a/contracts/build/abis/IBadgerConfigured.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/build/abis/IBadgerHook.json b/contracts/build/abis/IBadgerHook.json deleted file mode 100644 index ab60ba5..0000000 --- a/contracts/build/abis/IBadgerHook.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/build/abis/IBadgerHooked.json b/contracts/build/abis/IBadgerHooked.json deleted file mode 100644 index 3ac90b8..0000000 --- a/contracts/build/abis/IBadgerHooked.json +++ /dev/null @@ -1,65 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IBadgerManaged.json b/contracts/build/abis/IBadgerManaged.json deleted file mode 100644 index dec65d1..0000000 --- a/contracts/build/abis/IBadgerManaged.json +++ /dev/null @@ -1,40 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - } -] diff --git a/contracts/build/abis/IBadgerOrganization.json b/contracts/build/abis/IBadgerOrganization.json deleted file mode 100644 index e704b62..0000000 --- a/contracts/build/abis/IBadgerOrganization.json +++ /dev/null @@ -1,127 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "forfeit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tos", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mintBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "revoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_froms", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - } - ], - "name": "revokeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/build/abis/IBadgerOrganizationLogic.json b/contracts/build/abis/IBadgerOrganizationLogic.json deleted file mode 100644 index 9049b98..0000000 --- a/contracts/build/abis/IBadgerOrganizationLogic.json +++ /dev/null @@ -1,217 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_hook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/build/abis/IERC1155MetadataURIUpgradeable.json b/contracts/build/abis/IERC1155MetadataURIUpgradeable.json deleted file mode 100644 index a4d8e9c..0000000 --- a/contracts/build/abis/IERC1155MetadataURIUpgradeable.json +++ /dev/null @@ -1,314 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IERC1155ReceiverUpgradeable.json b/contracts/build/abis/IERC1155ReceiverUpgradeable.json deleted file mode 100644 index 66694c4..0000000 --- a/contracts/build/abis/IERC1155ReceiverUpgradeable.json +++ /dev/null @@ -1,99 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC1155BatchReceived", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC1155Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IERC1155Upgradeable.json b/contracts/build/abis/IERC1155Upgradeable.json deleted file mode 100644 index f8391d5..0000000 --- a/contracts/build/abis/IERC1155Upgradeable.json +++ /dev/null @@ -1,295 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IERC165.json b/contracts/build/abis/IERC165.json deleted file mode 100644 index 53fa000..0000000 --- a/contracts/build/abis/IERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/IERC165Upgradeable.json b/contracts/build/abis/IERC165Upgradeable.json deleted file mode 100644 index 53fa000..0000000 --- a/contracts/build/abis/IERC165Upgradeable.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/build/abis/Initializable.json b/contracts/build/abis/Initializable.json deleted file mode 100644 index a4152bb..0000000 --- a/contracts/build/abis/Initializable.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/contracts/build/abis/Multicallable.json b/contracts/build/abis/Multicallable.json deleted file mode 100644 index 0950753..0000000 --- a/contracts/build/abis/Multicallable.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/contracts/build/abis/OwnableUpgradeable.json b/contracts/build/abis/OwnableUpgradeable.json deleted file mode 100644 index a5fdc5e..0000000 --- a/contracts/build/abis/OwnableUpgradeable.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/contracts/build/c4udit-report.md b/contracts/build/c4udit-report.md deleted file mode 100755 index 52c01af..0000000 --- a/contracts/build/c4udit-report.md +++ /dev/null @@ -1,218 +0,0 @@ -# c4udit Report - -## Files analyzed -- ../contracts/Badger.sol -- ../contracts/BadgerNetwork.sol -- ../contracts/BadgerOrganization.sol -- ../contracts/BadgerOrganizationLogic.sol -- ../contracts/hooks/BadgerHook.sol -- ../contracts/hooks/BadgerHooked.sol -- ../contracts/hooks/forfeit/BadgerForfeitForbidden.sol -- ../contracts/hooks/hook/BadgerHookBlocklist.sol -- ../contracts/hooks/mint/BadgerMintMax.sol -- ../contracts/hooks/mint/BadgerMintMaxAllowance.sol -- ../contracts/hooks/mint/BadgerMintMaxSupply.sol -- ../contracts/hooks/mint/BadgerMintSelf.sol -- ../contracts/hooks/revoke/BadgerRevokeForbidden.sol -- ../contracts/hooks/transfer/BadgerTransferBlocklist.sol -- ../contracts/hooks/transfer/BadgerTransferBound.sol -- ../contracts/hooks/transfer/BadgerTransferBoundManaged.sol -- ../contracts/hooks/types/BadgerForfeitHook.sol -- ../contracts/hooks/types/BadgerHookHook.sol -- ../contracts/hooks/types/BadgerMintHook.sol -- ../contracts/hooks/types/BadgerRevokeHook.sol -- ../contracts/hooks/types/BadgerTransferHook.sol -- ../contracts/interfaces/IBadger.sol -- ../contracts/interfaces/IBadgerConfigured.sol -- ../contracts/interfaces/IBadgerHook.sol -- ../contracts/interfaces/IBadgerHooked.sol -- ../contracts/interfaces/IBadgerManaged.sol -- ../contracts/interfaces/IBadgerOrganization.sol -- ../contracts/interfaces/IBadgerOrganizationLogic.sol -- ../contracts/interfaces/IBadgerOrganizationStruct.sol -- ../contracts/managers/BadgerManaged.sol -- ../contracts/managers/BadgerManager.sol -- ../contracts/managers/BadgerManagerClaimable.sol -- ../contracts/managers/BadgerManagerPaidERC1155.sol -- ../contracts/managers/BadgerManagerPaidERC20.sol -- ../contracts/managers/BadgerManagerPaidERC721.sol -- ../contracts/managers/BadgerManagerPaidNative.sol -- ../contracts/managers/BadgerManagerSignature.sol - -## Issues found - -### Cache Array Length Outside of Loop - -#### Impact -Issue Information: [G002](https://github.com/byterocket/c4-common-issues/blob/main/0-Gas-Optimizations.md#g002---cache-array-length-outside-of-loop) - -#### Findings: -``` -../contracts/BadgerOrganization.sol::54 => uint256 tosLength = _tos.length; -../contracts/BadgerOrganization.sol::57 => tosLength == _amounts.length, -../contracts/BadgerOrganization.sol::58 => "BadgerOrganization::mintBatch: _tos and _amounts must be the same length." -../contracts/BadgerOrganization.sol::97 => uint256 fromsLength = _froms.length; -../contracts/BadgerOrganization.sol::100 => fromsLength == _amounts.length, -../contracts/BadgerOrganization.sol::101 => "BadgerOrganization::revokeBatch: _from and _amounts must be the same length." -../contracts/BadgerOrganization.sol::149 => if (bytes(_uri).length != 0) { -../contracts/BadgerOrganizationLogic.sol::122 => bytes(_uri).length != 0, -../contracts/BadgerOrganizationLogic.sol::141 => bytes(_uri).length != 0, -../contracts/BadgerOrganizationLogic.sol::159 => uint256 managersLength = _managers.length; -../contracts/BadgerOrganizationLogic.sol::163 => managersLength == _isManager.length, -../contracts/BadgerOrganizationLogic.sol::164 => "BadgerScout::setManagers: _managers and _isManager must be the same length." -../contracts/BadgerOrganizationLogic.sol::197 => uint256 managersLength = _managers.length; -../contracts/BadgerOrganizationLogic.sol::201 => managersLength == _isManager.length, -../contracts/BadgerOrganizationLogic.sol::202 => "BadgerScout::setManagers: _managers and _isManager must be the same length." -../contracts/BadgerOrganizationLogic.sol::234 => uint256 hooksLength = _hooks.length; -../contracts/BadgerOrganizationLogic.sol::238 => hooksLength == _isHook.length, -../contracts/BadgerOrganizationLogic.sol::239 => "BadgerScout::setHooks: _hooks and _isHook must be the same length." -../contracts/hooks/BadgerHooked.sol::84 => uint256 hooksLength = _hooks.length(); -../contracts/hooks/BadgerHooked.sol::176 => uint256 slotHooksLength = slotHooks.length; -../contracts/hooks/transfer/BadgerTransferBound.sol::51 => uint256 idsLength = _ids.length; -../contracts/hooks/transfer/BadgerTransferBoundManaged.sol::63 => uint256 idsLength = _ids.length; -``` -#### Tools used -[c4udit](https://github.com/byterocket/c4udit) - -### Use immutable for OpenZeppelin AccessControl's Roles Declarations - -#### Impact -Issue Information: [G006](https://github.com/byterocket/c4-common-issues/blob/main/0-Gas-Optimizations.md#g006---use-immutable-for-openzeppelin-accesscontrols-roles-declarations) - -#### Findings: -``` -../contracts/Badger.sol::139 => return keccak256(abi.encodePacked(_organizationId)); -../contracts/BadgerOrganizationLogic.sol::501 => return keccak256(abi.encode(_manager)); -../contracts/BadgerOrganizationLogic.sol::516 => return keccak256(abi.encode(_id, _manager)); -../contracts/hooks/BadgerHooked.sol::41 => bytes32 public constant BEFORE_SET_HOOK = keccak256("beforeSetHook"); -../contracts/hooks/BadgerHooked.sol::44 => bytes32 public constant BEFORE_MINT = keccak256("beforeMintingHook"); -../contracts/hooks/BadgerHooked.sol::47 => bytes32 public constant BEFORE_REVOKE = keccak256("beforeRevokingHook"); -../contracts/hooks/BadgerHooked.sol::50 => bytes32 public constant BEFORE_FORFEIT = keccak256("beforeForfeitHook"); -../contracts/hooks/BadgerHooked.sol::53 => bytes32 public constant BEFORE_TRANSFER = keccak256("beforeTransferHook"); -../contracts/managers/BadgerManaged.sol::31 => * @dev The key is a `keccak256` hash of the address of the Manager. -../contracts/managers/BadgerManagerSignature.sol::79 => bytes32 message = keccak256( -``` -#### Tools used -[c4udit](https://github.com/byterocket/c4udit) - -### Long Revert Strings - -#### Impact -Issue Information: [G007](https://github.com/byterocket/c4-common-issues/blob/main/0-Gas-Optimizations.md#g007---long-revert-strings) - -#### Findings: -``` -../contracts/Badger.sol::7 => import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -../contracts/Badger.sol::8 => import {Context} from "@openzeppelin/contracts/utils/Context.sol"; -../contracts/Badger.sol::12 => import {IBadgerOrganization} from "./interfaces/IBadgerOrganization.sol"; -../contracts/Badger.sol::13 => import {IBadgerOrganizationLogic} from "./interfaces/IBadgerOrganizationLogic.sol"; -../contracts/Badger.sol::16 => import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; -../contracts/Badger.sol::49 => "Badger::constructor: _implementation cannot be the zero address." -../contracts/BadgerNetwork.sol::5 => import {IBadgerConfigured} from "./interfaces/IBadgerConfigured.sol"; -../contracts/BadgerOrganization.sol::6 => import {IBadgerOrganization} from "./interfaces/IBadgerOrganization.sol"; -../contracts/BadgerOrganization.sol::8 => import {Multicallable} from "solady/src/utils/Multicallable.sol"; -../contracts/BadgerOrganization.sol::58 => "BadgerOrganization::mintBatch: _tos and _amounts must be the same length." -../contracts/BadgerOrganization.sol::101 => "BadgerOrganization::revokeBatch: _from and _amounts must be the same length." -../contracts/BadgerOrganizationLogic.sol::9 => import {IBadgerOrganizationLogic} from "./interfaces/IBadgerOrganizationLogic.sol"; -../contracts/BadgerOrganizationLogic.sol::12 => import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -../contracts/BadgerOrganizationLogic.sol::13 => import {ERC1155Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol"; -../contracts/BadgerOrganizationLogic.sol::90 => "BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this." -../contracts/BadgerOrganizationLogic.sol::102 => "BadgerScout::onlyBadgeManager: Only Managers can call this." -../contracts/BadgerOrganizationLogic.sol::123 => "BadgerScout::setOrganizationURI: URI must be set." -../contracts/BadgerOrganizationLogic.sol::142 => "BadgerScout::setBadgeURI: URI must be set." -../contracts/BadgerOrganizationLogic.sol::164 => "BadgerScout::setManagers: _managers and _isManager must be the same length." -../contracts/BadgerOrganizationLogic.sol::175 => "BadgerScout::setManagers: Manager cannot be the zero address." -../contracts/BadgerOrganizationLogic.sol::202 => "BadgerScout::setManagers: _managers and _isManager must be the same length." -../contracts/BadgerOrganizationLogic.sol::213 => "BadgerScout::setManagers: Manager cannot be the zero address." -../contracts/BadgerOrganizationLogic.sol::239 => "BadgerScout::setHooks: _hooks and _isHook must be the same length." -../contracts/BadgerOrganizationLogic.sol::250 => "BadgerScout::setHooks: Hook cannot be the zero address." -../contracts/hooks/BadgerHook.sol::6 => import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -../contracts/hooks/BadgerHook.sol::8 => import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; -../contracts/hooks/BadgerHooked.sol::8 => import {Address} from "@openzeppelin/contracts/utils/Address.sol"; -../contracts/hooks/BadgerHooked.sol::11 => import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -../contracts/hooks/BadgerHooked.sol::12 => import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; -../contracts/hooks/BadgerHooked.sol::16 => import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -../contracts/hooks/BadgerHooked.sol::116 => "BadgerOrganizationHooked::_configManager: Manager is not a contract." -../contracts/hooks/BadgerHooked.sol::122 => "BadgerHooks::_setHook: Hook does not implement IBadgerHook." -../contracts/hooks/BadgerHooked.sol::155 => "BadgerOrganizationHooked::_configHook: Hook is not enabled." -../contracts/hooks/forfeit/BadgerForfeitForbidden.sol::51 => "BadgerForfeitForbidden::execute: Invalid permission to forfeit token." -../contracts/hooks/hook/BadgerHookBlocklist.sol::54 => "BadgerHookBlacklist::execute: Cannot enable blocklisted hook." -../contracts/hooks/mint/BadgerMintMax.sol::42 => "BadgerMintMax::config: Max must be greater than zero." -../contracts/hooks/mint/BadgerMintMax.sol::65 => "BadgerMintMax::execute: Max mint reached." -../contracts/hooks/mint/BadgerMintMaxAllowance.sol::42 => "BadgerMintMaxAllowance::config: Max must be greater than zero." -../contracts/hooks/mint/BadgerMintMaxAllowance.sol::65 => "BadgerMintMaxAllowance::execute: Max mint reached." -../contracts/hooks/mint/BadgerMintMaxSupply.sol::44 => "BadgerMintMaxSupply::config: Max must be greater than the already minted supply." -../contracts/hooks/mint/BadgerMintMaxSupply.sol::67 => "BadgerMintMaxSupply::execute: Max supply exceeded." -../contracts/hooks/mint/BadgerMintSelf.sol::54 => "BadgerMintSelfOperated::execute: Only mint to self" -../contracts/hooks/revoke/BadgerRevokeForbidden.sol::52 => "BadgerRevokeForbidden::execute: Invalid permission to revoke token." -../contracts/hooks/transfer/BadgerTransferBlocklist.sol::55 => "BadgerTransferBlocklist::execute: Invalid permission to transfer token." -../contracts/hooks/transfer/BadgerTransferBound.sol::60 => "BadgerTransferBound::execute: Invalid permission to transfer token." -../contracts/hooks/transfer/BadgerTransferBoundManaged.sol::6 => import {BadgerOrganizationLogic} from "../../BadgerOrganizationLogic.sol"; -../contracts/hooks/transfer/BadgerTransferBoundManaged.sol::79 => "BadgerTransferBoundManaged::execute: Invalid permission to transfer token." -../contracts/hooks/types/BadgerMintHook.sol::11 => "address,address,uint256,uint256,bytes"; -../contracts/hooks/types/BadgerTransferHook.sol::11 => "address,address,address,uint256[],uint256[],bytes"; -../contracts/managers/BadgerManaged.sol::8 => import {Address} from "@openzeppelin/contracts/utils/Address.sol"; -../contracts/managers/BadgerManaged.sol::11 => import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -../contracts/managers/BadgerManaged.sol::13 => import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; -../contracts/managers/BadgerManaged.sol::57 => "BadgerOrganizationHooked::_configManager: Manager is not enabled." -../contracts/managers/BadgerManaged.sol::63 => "BadgerOrganizationHooked::_configManager: Manager is not a contract." -../contracts/managers/BadgerManaged.sol::71 => "BadgerOrganizationHooked::_configManager: Manager is not a configured Badger module." -../contracts/managers/BadgerManager.sol::6 => import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; -../contracts/managers/BadgerManager.sol::7 => import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -../contracts/managers/BadgerManagerClaimable.sol::39 => "BadgerManagerClaimable::config: Amount must be greater than zero." -../contracts/managers/BadgerManagerSignature.sol::10 => import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -../contracts/managers/BadgerManagerSignature.sol::69 => "BadgerManagerSignature::mint: Signature expired." -../contracts/managers/BadgerManagerSignature.sol::75 => "BadgerManagerSignature::mint: Invalid nonce." -../contracts/managers/BadgerManagerSignature.sol::99 => "BadgerManagerSignature::mint: Invalid signer." -``` -#### Tools used -[c4udit](https://github.com/byterocket/c4udit) - -### Unspecific Compiler Version Pragma - -#### Impact -Issue Information: [L003](https://github.com/byterocket/c4-common-issues/blob/main/2-Low-Risk.md#l003---unspecific-compiler-version-pragma) - -#### Findings: -``` -../contracts/Badger.sol::3 => pragma solidity ^0.8.16; -../contracts/BadgerNetwork.sol::3 => pragma solidity ^0.8.16; -../contracts/BadgerOrganization.sol::3 => pragma solidity ^0.8.16; -../contracts/BadgerOrganizationLogic.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/BadgerHook.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/BadgerHooked.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/forfeit/BadgerForfeitForbidden.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/hook/BadgerHookBlocklist.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/mint/BadgerMintMax.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/mint/BadgerMintMaxAllowance.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/mint/BadgerMintMaxSupply.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/mint/BadgerMintSelf.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/revoke/BadgerRevokeForbidden.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/transfer/BadgerTransferBlocklist.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/transfer/BadgerTransferBound.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/transfer/BadgerTransferBoundManaged.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/types/BadgerForfeitHook.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/types/BadgerHookHook.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/types/BadgerMintHook.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/types/BadgerRevokeHook.sol::3 => pragma solidity ^0.8.16; -../contracts/hooks/types/BadgerTransferHook.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadger.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerConfigured.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerHook.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerHooked.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerManaged.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerOrganization.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerOrganizationLogic.sol::3 => pragma solidity ^0.8.16; -../contracts/interfaces/IBadgerOrganizationStruct.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManaged.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManager.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManagerClaimable.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManagerPaidERC1155.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManagerPaidERC20.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManagerPaidERC721.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManagerPaidNative.sol::3 => pragma solidity ^0.8.16; -../contracts/managers/BadgerManagerSignature.sol::3 => pragma solidity ^0.8.16; -``` -#### Tools used -[c4udit](https://github.com/byterocket/c4udit) - diff --git a/contracts/build/gas-report.txt b/contracts/build/gas-report.txt deleted file mode 100644 index 3999341..0000000 --- a/contracts/build/gas-report.txt +++ /dev/null @@ -1,69 +0,0 @@ -·----------------------------------------------------------------------------------------|---------------------------|--------------------|-----------------------------· -| Solc version: 0.8.16 · Optimizer enabled: true · Runs: 1000000000 · Block limit: 30000000 gas │ -·························································································|···························|····················|······························ -| Methods │ -···························|·····························································|·············|·············|····················|···············|·············· -| Contract · Method · Min · Max · Avg · # calls · usd (avg) │ -···························|·····························································|·············|·············|····················|···············|·············· -| Badger · createOrganization((address,string,string,string,string)) · - · - · 237790 · 28 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerManagerClaimable · mint(address,uint256,bytes) · - · - · 47909 · 2 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerManagerSignature · mint(address,uint256,uint256,bytes,bytes,uint256,uint256) · - · - · 96885 · 2 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · configHook(bytes32,address,bytes) · 36773 · 37071 · 36855 · 8 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · forfeit(uint256,uint256,bytes) · 34832 · 45551 · 40962 · 12 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · mint(address,uint256,uint256,bytes) · 59760 · 94228 · 75831 · 37 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · mintBatch(address[],uint256,uint256[],bytes) · 64111 · 93044 · 83400 · 3 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · multicall(bytes[]) · 66185 · 174844 · 127773 · 72 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · revoke(address,uint256,uint256) · 36934 · 48591 · 41600 · 6 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · revokeBatch(address[],uint256,uint256[]) · - · - · 38834 · 2 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · setBadgeURI(uint256,string) · 52254 · 57093 · 54674 · 4 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · setHooks(bytes32,address[],bool[]) · 39351 · 103835 · 54384 · 5 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · setManagers(address[],bool[]) · - · - · 52297 · 4 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · setManagers(uint256,address[],bool[]) · - · - · 52611 · 5 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| BadgerOrganization · setOrganizationURI(string) · - · - · 34455 · 2 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| ERC1155Upgradeable · safeTransferFrom(address,address,uint256,uint256,bytes) · 68637 · 74655 · 70311 · 8 · - │ -···························|·····························································|·············|·············|····················|···············|·············· -| Deployments · · % of limit · │ -·························································································|·············|·············|····················|···············|·············· -| Badger · 459342 · 459354 · 459352 · 1.5 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerForfeitForbidden · - · - · 366899 · 1.2 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerHookBlocklist · - · - · 370349 · 1.2 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerManagerClaimable · - · - · 390179 · 1.3 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerManagerSignature · - · - · 815167 · 2.7 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerMintMax · - · - · 505425 · 1.7 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerMintMaxAllowance · - · - · 505857 · 1.7 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerMintMaxSupply · - · - · 490155 · 1.6 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerMintSelf · - · - · 430069 · 1.4 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerOrganization · - · - · 4983991 · 16.6 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerRevokeForbidden · - · - · 371093 · 1.2 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerTransferBlocklist · - · - · 494937 · 1.6 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerTransferBound · - · - · 544085 · 1.8 % · - │ -·························································································|·············|·············|····················|···············|·············· -| BadgerTransferBoundManaged · - · - · 584202 · 1.9 % · - │ -·----------------------------------------------------------------------------------------|-------------|-------------|--------------------|---------------|-------------· \ No newline at end of file diff --git a/contracts/build/index.ts b/contracts/build/index.ts deleted file mode 100644 index 3288d01..0000000 --- a/contracts/build/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const BADGER_DEPLOYMENTS = { - polygon: "0x19D97D8fA813EE2f51aD4B4e04EA08bAf4DFfC28", - localhost: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" -} \ No newline at end of file diff --git a/contracts/contracts/Badger.sol b/contracts/contracts/Badger.sol deleted file mode 100644 index cd4cc83..0000000 --- a/contracts/contracts/Badger.sol +++ /dev/null @@ -1,141 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadger} from "./interfaces/IBadger.sol"; -import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -import {Context} from "@openzeppelin/contracts/utils/Context.sol"; - -/// @dev Helper dependencies. -import {BadgerOrganization} from "./BadgerOrganization.sol"; -import {IBadgerOrganization} from "./interfaces/IBadgerOrganization.sol"; -import {IBadgerOrganizationLogic} from "./interfaces/IBadgerOrganizationLogic.sol"; - -/// @dev Libraries. -import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; - -/** - * @dev Badger is a low-level primitive powering middle-out on-chain access policies - * for Organizations and and their members with ERC-1155 Badges. - * @notice Every Organization is a self-contained ecosystem of Badges, Managers - * and Members. To power the needs of complex access mechanisms, Badger - * utilizes a CREATE2 factory pattern to deploy new Organizations for - * the active version of the contract. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract Badger is IBadger, ERC165, Context { - using Clones for address; - - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The address of the implementation contract for the minimal proxy. - address public immutable implementation; - - /// @dev Keep track of how many organizations have been deployed. - uint256 public organizations; - - //////////////////////////////////////////////////////// - /// CONSTRUCTOR /// - //////////////////////////////////////////////////////// - - constructor(address _implementation) { - /// @dev Confirm that the implementation address is not the zero address. - require( - _implementation != address(0), - "Badger::constructor: _implementation cannot be the zero address." - ); - - /// @dev Set the implementation address. - implementation = _implementation; - } - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadger-createOrganization}. - */ - function createOrganization(Organization calldata _organizationStruct) - public - virtual - returns (BadgerOrganization badgerOrganization, uint256 organizationId) - { - /// @dev Keep track of the number of organizations deployed. - unchecked { - organizationId = organizations++; - } - - /// @dev Determine what the address will be. - address organizationAddress = implementation.cloneDeterministic( - _organizationHash(organizationId) - ); - - /// @dev Interface with the Organization. - badgerOrganization = BadgerOrganization(organizationAddress); - - /// @dev Announce the creation of the Organization. - emit OrganizationCreated( - badgerOrganization, - _msgSender(), - organizationId - ); - - /// @dev Initialize the Organization. - badgerOrganization.initialize(_organizationStruct); - } - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadger-getOrganization}. - */ - function getOrganization(uint256 _organizationId) - public - view - virtual - override - returns (BadgerOrganization) - { - return - BadgerOrganization( - implementation.predictDeterministicAddress( - _organizationHash(_organizationId), - address(this) - ) - ); - } - - /** - * See {ERC1155-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override - returns (bool) - { - return - interfaceId == type(IBadger).interfaceId || - super.supportsInterface(interfaceId); - } - - //////////////////////////////////////////////////////// - /// INTERNAL GETTERS /// - //////////////////////////////////////////////////////// - - function _organizationHash(uint256 _organizationId) - internal - pure - returns (bytes32) - { - return keccak256(abi.encodePacked(_organizationId)); - } -} diff --git a/contracts/contracts/Badger/Badger.sol b/contracts/contracts/Badger/Badger.sol new file mode 100644 index 0000000..b9696f1 --- /dev/null +++ b/contracts/contracts/Badger/Badger.sol @@ -0,0 +1,211 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +/// @dev Core dependencies. +import { BadgerInterface } from "./interfaces/BadgerInterface.sol"; +import { BadgerVersions } from "./BadgerVersions.sol"; + +/** + * @title Badger + * @author nftchance & masonchain + * @notice Today in the vast majority of Web3 there is a vast amount of "locks" that + * determine if someone has access to perform an action however there are very + * few ways to acquire the "keys" to the locks. Badger solves this by digitalizing + * centralized organization management while maintaing the full capacity to cover + * the more generalized and decentralized use-cases through time. + */ +contract Badger is + BadgerInterface + , BadgerVersions +{ + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + address _implementation + ) + BadgerVersions(_implementation) + {} + + /*////////////////////////////////////////////////////////////// + PROTOCOL LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerInterface.createOrganization}. + * + * Requirements: + * - All requirements have been forgone in this function to enable the functionality + * of an individual extending the `BadgerOrganization` or `BadgerScout` contracts + * while still maintaing the ability to have the official Badger front-end detect + * the deployment and allow the user to interact with the organization without + * needing to spin up their own front-end. + * - This means that if someone does not have all the functionality they need or want, + * they can deploy a parent contract that extends the `BadgerOrganization` or + * `BadgerScout` contracts and then deploy their own version of the `Badger` contract + * that points to their own implementation and then deploy through this function. + */ + function createOrganization( + address _implementation + , address _deployer + , string memory _uri + , string memory _organizationURI + , string memory _name + , string memory _symbol + ) + override + public + virtual + returns ( + address + ) + { + /// @dev Load the version. + Version memory version = versions[_implementation]; + + /// @dev Get the users license key to determine how much funding has been provided. + /// @notice Can deploy for someone but must have the cost covered themselves. + bytes32 licenseKey = getLicenseKey( + version.licenseKey + , _msgSender() + ); + + /// @dev Deploy the Organization contract for the deployer chosen. + /// @notice This enables the ability for other contracts to call this function + /// as well as inner-organization network from other protocols. + /// @notice This means to deploy an Organization, a protocol would hook into + /// this function and then deploy the Organization contract. This also means + /// that a exogenous protocol could be offering third-party extensions of + /// Badger through a sub-licensing system. + address organization = _createOrganization( + _implementation + , licenseKey + , version.amount + , _deployer + , _uri + , _organizationURI + , _name + , _symbol + ); + + return organization; + } + + /*////////////////////////////////////////////////////////////// + RECEIVABLE LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Funds a new Organization when the license model is enabled and + * the user has transfered their license to this contract. The license, is a + * lifetime license. + * @param _from The address of the account who owns the created Organization. + * @return Selector response of the license token successful transfer. + */ + function onERC1155Received( + address + , address _from + , uint256 _id + , uint256 _amount + , bytes memory _data + ) + override + public + returns ( + bytes4 + ) + { + /// @dev Return the typical ERC-1155 response if transfer is not intended to be a payment. + if(bytes(_data).length == 0) { + return this.onERC1155Received.selector; + } + + /// @dev Recover the implementation address from `_data`. + address implementation = abi.decode( + _data + , (address) + ); + + /// @dev Confirm that the token being transferred is the one expected. + require( + keccak256( + abi.encodePacked( + _msgSender() + , _id + ) + ) == versions[implementation].licenseKey + , "Badger::onERC1155Received: Invalid license key." + ); + + /// @dev Get the version license key to track the funding of the msg sender. + bytes32 licenseKey = getLicenseKey( + versions[implementation].licenseKey + , _from + ); + + /// @dev Fund the deployment of the Organization contract to + /// the account covering the cost of the payment (not the transaction sender). + versionKeyToFunded[licenseKey] += _amount; + + /// @dev Return the ERC1155 success response. + return this.onERC1155Received.selector; + } + + /*////////////////////////////////////////////////////////////// + EXTERNAL PROTOCOL LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Allows protocol Governors to execute protocol level transaction. + * @dev This enables the ability to execute pre-built transfers without having to + * explicitly define what tokens this contract can receive. + * @param _to The address to execute the transaction on. + * @param _data The data to pass to the receiver. + * @param _value The amount of ETH to send with the transaction. + */ + function execTransaction( + address _to + , bytes calldata _data + , uint256 _value + ) + external + virtual + payable + onlyOwner + { + /// @dev Make the call. + ( + bool success + , bytes memory returnData + ) = _to.call{value: _value}(_data); + + /// @dev Force that the transfer/transaction emits a successful response. + require( + success + , string(returnData) + ); + } + + /** + * @notice Signals to external callers that this is a Badger contract. + * @param _interfaceId The interface ID to check. + * @return True if the interface ID is supported. + */ + function supportsInterface( + bytes4 _interfaceId + ) + override + public + view + returns ( + bool + ) + { + return ( + _interfaceId == type(BadgerInterface).interfaceId + || super.supportsInterface(_interfaceId) + ); + } +} \ No newline at end of file diff --git a/contracts/contracts/Badger/BadgerVersions.sol b/contracts/contracts/Badger/BadgerVersions.sol new file mode 100644 index 0000000..0a13c67 --- /dev/null +++ b/contracts/contracts/Badger/BadgerVersions.sol @@ -0,0 +1,301 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +/// @dev Core dependencies. +import { BadgerVersionsInterface } from "./interfaces/BadgerVersionsInterface.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { ERC1155Holder } from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; + +/// @dev Helpers. +import { Clones } from "@openzeppelin/contracts/proxy/Clones.sol"; +import { BadgerOrganizationInterface } from "../BadgerOrganization/interfaces/BadgerOrganizationInterface.sol"; + +/// @dev Supported interfaces. +import { IERC1155ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol"; + +contract BadgerVersions is + BadgerVersionsInterface + , Ownable + , ERC1155Holder +{ + using Clones for address; + + /*////////////////////////////////////////////////////////////// + PROTOCOL STATE + //////////////////////////////////////////////////////////////*/ + + /// @dev All of the versions that are actively running. + /// This also enables the ability to self-fork ones product. + mapping(address => Version) public versions; + + /// @dev Tracking the organizations that one has funded the cost for. + mapping(bytes32 => uint256) public versionKeyToFunded; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + /// @dev Announces when a Version configuration is updated through the protocol Factory. + event VersionUpdated( + address indexed implementation + , address indexed owner + , bytes32 indexed licenseKey + , uint256 amount + , bool locked + ); + + /// @dev Announces when a new Organization is created through the protocol Factory. + event OrganizationCreated( + address indexed organization, + address indexed owner, + address indexed implementation + ); + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor( + address _implementation + ) { + /// @dev Initialize the foundational version of Badger. + _setVersion( + _implementation + , _msgSender() + , keccak256( + abi.encodePacked( + address(0) + , uint256(0) + ) + ) + , 0 + , false + ); + } + + /*////////////////////////////////////////////////////////////// + SETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * See {Badger._setVersion} + * + * Requirements: + * - The caller must be the owner. + * - If the caller is not the owner, cannot set a Payment Token as they cannot withdraw. + */ + function setVersion( + address _implementation + , address _owner + , address _tokenAddress + , uint256 _tokenId + , uint256 _amount + , bool _locked + ) + override + public + virtual + { + /// @dev Load the existing Version object. + Version memory version = versions[_implementation]; + + /// @dev Prevent editing of a version once it has been locked. + require( + !version.locked + , "BadgerVersions::_setVersion: Cannot update a locked version." + ); + + /// @dev Only the owner can set the version. + require( + version.owner == address(0) + || version.owner == _msgSender() + , "BadgerVersions::_setVersion: You do not have permission to edit this version." + ); + + /// @dev Make sure that no exogenous version controllers can set a payment + /// as there is not a mechanism for them to withdraw. + if(_msgSender() != owner()) { + require( + _tokenAddress == address(0) + && _tokenId == 0 + && _amount == 0 + , "BadgerVersions::_setVersion: You do not have permission to set a payment token." + ); + } + + /// @dev Set the version configuration. + _setVersion( + _implementation + , _owner + , keccak256( + abi.encodePacked( + _tokenAddress + , _tokenId + ) + ) + , _amount + , _locked + ); + } + + /*////////////////////////////////////////////////////////////// + GETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerVersionsInterface.getVersionKey} + */ + function getVersionKey( + address _implementation + ) + override + public + view + virtual + returns ( + bytes32 + ) + { + return versions[_implementation].licenseKey; + } + + /** + * See {BadgerVersionsInterface.getLicenseKey} + */ + function getLicenseKey( + bytes32 _versionKey + , address _sender + ) + override + public + pure + returns ( + bytes32 + ) + { + return keccak256( + abi.encodePacked( + _versionKey + , _sender + ) + ); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL SETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerVersionsInterface.setVersion} + */ + function _setVersion( + address _implementation + , address _owner + , bytes32 _licenseKey + , uint256 _amount + , bool _locked + ) + internal + { + /// @dev Set the version configuration. + versions[_implementation] = Version({ + owner: _owner + , licenseKey: _licenseKey + , amount: _amount + , locked: _locked + }); + + /// @dev Announce that the version has been updated to index it on the front-end. + emit VersionUpdated( + _implementation + , _owner + , _licenseKey + , _amount + , _locked + ); + } + + /** + * @notice Creates a new Organization to be led by the deploying address. + * @param _implementation The address of the implementation to be used. + * @param _licenseKey The license key of the individual processing the Organization creation. + * @param _versionCost The cost of deploying the version. + * @param _deployer The address that will be the deployer of the Organizatoin contract. + * @param _uri The base URI used for the metadata of tokens. + * @param _organizationURI The metadata of the Organization. + * @param _name The name of the Organization. + * @param _symbol The symbol of the Organization. + * @dev The Organization contract is created using the Organization implementation contract. + */ + function _createOrganization( + address _implementation + , bytes32 _licenseKey + , uint256 _versionCost + , address _deployer + , string memory _uri + , string memory _organizationURI + , string memory _name + , string memory _symbol + ) + internal + returns ( + address + ) + { + /// @dev Deduct the amount of payment that is needed to cover deployment of this version. + /// @notice This will revert if an individual has not funded it with at least the needed amount + /// to cover the cost of the version. + /// @dev If deploying a free version or using an exogenous contract, the cost will be + /// zero and proceed normally. + versionKeyToFunded[_licenseKey] -= _versionCost; + + /// @dev Get the address of the target. + address organizationAddress = _implementation.clone(); + + /// @dev Interface with the newly created contract to initialize it. + BadgerOrganizationInterface organization = BadgerOrganizationInterface( + organizationAddress + ); + + /// @dev Deploy the clone contract to serve as the Organization. + organization.initialize( + _deployer + , _uri + , _organizationURI + , _name + , _symbol + ); + + /// @dev Announce the creation of the Organization. + emit OrganizationCreated( + organizationAddress + , _deployer + , _implementation + ); + + return organizationAddress; + } + + /** + * @notice Signals to external callers that this is a BadgerVersions contract. + * @param _interfaceId The interface ID to check. + * @return True if the interface ID is supported. + */ + function supportsInterface( + bytes4 _interfaceId + ) + override + public + view + virtual + returns ( + bool + ) + { + return ( + _interfaceId == type(BadgerVersionsInterface).interfaceId + || _interfaceId == type(IERC1155ReceiverUpgradeable).interfaceId + ); + } +} \ No newline at end of file diff --git a/contracts/contracts/Badger/interfaces/BadgerInterface.sol b/contracts/contracts/Badger/interfaces/BadgerInterface.sol new file mode 100644 index 0000000..a020ee0 --- /dev/null +++ b/contracts/contracts/Badger/interfaces/BadgerInterface.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +interface BadgerInterface { + /** + * @notice Creates a new Organization while confirming that the proper funding has been provided. + * @param _implementation The implementation address. + * @param _deployer The address that will be the deployer of the Organization. + * @param _uri The base URI for the token metadata. + * @param _organizationURI The metadata of the Organization. (contractURI) + * @param _name The name of the Organization. + * @param _symbol The symbol of the Organization. + * @return The address of the newly created Organization. + */ + function createOrganization( + address _implementation + , address _deployer + , string memory _uri + , string memory _organizationURI + , string memory _name + , string memory _symbol + ) + external + returns ( + address + ); +} \ No newline at end of file diff --git a/contracts/contracts/Badger/interfaces/BadgerVersionsInterface.sol b/contracts/contracts/Badger/interfaces/BadgerVersionsInterface.sol new file mode 100644 index 0000000..ccc872a --- /dev/null +++ b/contracts/contracts/Badger/interfaces/BadgerVersionsInterface.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +interface BadgerVersionsInterface { + + /*////////////////////////////////////////////////////////////// + SCHEMAS + //////////////////////////////////////////////////////////////*/ + + /// @dev The schema of a version. + struct Version { + address owner; + bytes32 licenseKey; + uint256 amount; + bool locked; + } + + /*////////////////////////////////////////////////////////////// + SETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Allows Badger to control the level of access to specific versions. + * @dev This enables the ability to have Enterprise versions as well as public versions. None of this + * state is immutable as a license model may change in the future. + * @param _implementation The implementation address. + * @param _owner The owner of the version. + * @param _tokenAddress The token address. + * @param _tokenId The token ID. + * @param _amount The amount that this user will have to pay. + * @param _locked Whether or not this version has been made immutable. + */ + function setVersion( + address _implementation + , address _owner + , address _tokenAddress + , uint256 _tokenId + , uint256 _amount + , bool _locked + ) + external; + + /*////////////////////////////////////////////////////////////// + GETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Build the version key for a version and a sender. + * @dev If the license for a version is updated, then the previous fundings + * will be lost and no longer active unless the version is reverted back + * to the previous configuration. + * @param _implementation The implementation address. + * @return The version key. + */ + function getVersionKey( + address _implementation + ) + external + view + returns ( + bytes32 + ); + + /** + * @notice Builds the license key for a version and a sender. + * @param _versionKey The version key. + * @param _sender The message sender address. + * returns The license key for the message sender. + */ + function getLicenseKey( + bytes32 _versionKey + , address _sender + ) + external + pure + returns ( + bytes32 + ); +} \ No newline at end of file diff --git a/contracts/contracts/BadgerNetwork.sol b/contracts/contracts/BadgerNetwork.sol deleted file mode 100644 index 2de5ce3..0000000 --- a/contracts/contracts/BadgerNetwork.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -import {IBadgerConfigured} from "./interfaces/IBadgerConfigured.sol"; - -contract BadgerNetwork { - function _configNetwork(address _manager, bytes calldata _config) - internal - virtual - { - /// @dev Get the configured target that is being configured. - IBadgerConfigured target = IBadgerConfigured(_manager); - - /// @dev Set the configuration for the target. - target.config(_config); - } -} diff --git a/contracts/contracts/BadgerOrganization.sol b/contracts/contracts/BadgerOrganization.sol deleted file mode 100644 index dbdc1d1..0000000 --- a/contracts/contracts/BadgerOrganization.sol +++ /dev/null @@ -1,171 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadgerOrganization} from "./interfaces/IBadgerOrganization.sol"; -import {BadgerOrganizationLogic} from "./BadgerOrganizationLogic.sol"; -import {Multicallable} from "solady/src/utils/Multicallable.sol"; - -/** - * @dev Badger Organizations are localized ecosystems of members, managers and - * badges. With a system of harmonious management, on-chain Organizations - * can unlock the power of secure permission systems and access policies - * by minting ERC1155 Badges to their members. - * @dev Explicit references to the `BadgerOrganizationLogic` contract are used - * to improve developer experience, readability and enable call traces. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerOrganization is - IBadgerOrganization, - BadgerOrganizationLogic, - Multicallable -{ - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerOrganization.mint} - */ - function mint( - address _to, - uint256 _id, - uint256 _amount, - bytes memory _data - ) external virtual override onlyBadgeManager(_id) { - /// @dev Mint the Badge to the user. - BadgerOrganizationLogic._mint(_msgSender(), _to, _id, _amount, _data); - } - - /** - * See {IBadgerOrganization.mintBatch} - */ - function mintBatch( - address[] memory _tos, - uint256 _id, - uint256[] memory _amounts, - bytes memory _data - ) external virtual override onlyBadgeManager(_id) { - /// @dev Load the stack. - address operator = _msgSender(); - uint256 i; - uint256 tosLength = _tos.length; - - require( - tosLength == _amounts.length, - "BadgerOrganization::mintBatch: _tos and _amounts must be the same length." - ); - - /// @dev Mint the badge to all of the recipients with their given amount. - for (i; i < tosLength; i++) { - /// @dev Mint the badges to the users. - BadgerOrganizationLogic._mint( - operator, - _tos[i], - _id, - _amounts[i], - _data - ); - } - } - - /** - * See {IBadgerOrganization.revoke} - */ - function revoke( - address _from, - uint256 _id, - uint256 _amount - ) external virtual override onlyBadgeManager(_id) { - /// @dev Revoke the Badge from the user. - _revoke(_msgSender(), _from, _id, _amount); - } - - /** - * See {IBadgerOrganization.revokeBatch} - */ - function revokeBatch( - address[] memory _froms, - uint256 _id, - uint256[] memory _amounts - ) external virtual override onlyBadgeManager(_id) { - /// @dev Load the stack. - address operator = _msgSender(); - uint256 i; - uint256 fromsLength = _froms.length; - - require( - fromsLength == _amounts.length, - "BadgerOrganization::revokeBatch: _from and _amounts must be the same length." - ); - - /// @dev Revoke the Badge from all of the recipients with their given amount. - for (i; i < fromsLength; i++) { - /// @dev Revoke the Badge from the user. - _revoke(operator, _froms[i], _id, _amounts[i]); - } - } - - /** - * See {IBadgerOrganization.forfeit} - */ - function forfeit( - uint256 _id, - uint256 _amount, - bytes memory - ) external virtual override { - /// @dev Revoke the Badge from the user. - _forfeit(_msgSender(), _id, _amount); - } - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Returns the metadata URI for the Organization. - * @return The metadata URI for the Organization. - */ - function contractURI() public view returns (string memory) { - return organizationURI; - } - - /** - * See {ERC1155.uri} - */ - function uri(uint256 _id) - public - view - virtual - override - returns (string memory) - { - /// @dev Get the URI for the Badge. - string memory _uri = uris[_id]; - - /// @dev If a custom URI has been set for this Badge, return it. - if (bytes(_uri).length != 0) { - return _uri; - } - - /// @dev Use the default base URI with the token id added. - return super.uri(_id); - } - - /** - * See {ERC165-supportsInterface} - */ - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override - returns (bool) - { - return - interfaceId == type(IBadgerOrganization).interfaceId || - super.supportsInterface(interfaceId); - } -} diff --git a/contracts/contracts/BadgerOrganization/BadgerOrganization.sol b/contracts/contracts/BadgerOrganization/BadgerOrganization.sol new file mode 100644 index 0000000..a44cb42 --- /dev/null +++ b/contracts/contracts/BadgerOrganization/BadgerOrganization.sol @@ -0,0 +1,690 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +/// @dev Core dependencies. +import { BadgerOrganizationInterface } from "./interfaces/BadgerOrganizationInterface.sol"; +import { BadgerScout } from "./BadgerScout.sol"; + +/// @dev Helpers. +import { StringsUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol"; +import { IERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import { SafeERC20Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; + +/// @dev Supported interfaces. +import { IERC1155ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol"; +import { IERC721ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol"; + +contract BadgerOrganization is + BadgerOrganizationInterface + , BadgerScout +{ + using StringsUpgradeable for uint256; + using SafeERC20Upgradeable for IERC20Upgradeable; + + /*////////////////////////////////////////////////////////////// + INITIALIZATION + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerOrganizationInterface.initialize} + */ + function initialize( + address _owner + , string memory _uri + , string memory _organizationURI + , string memory _name + , string memory _symbol + ) + external + initializer + { + /// @dev Set the contract URI. + _setOrganizationURI(_organizationURI); + + /// @dev Set the name and symbol of the contract. + name = _name; + symbol = _symbol; + + /// @dev Initialize the NFT side of the Organization. + __ERC1155_init(_uri); + /// @dev Initialize the BadgeScout contract. + __Ownable_init(); + /// @dev Set ownership of the BadgeScout contract. + transferOwnership(_owner); + } + + /*////////////////////////////////////////////////////////////// + ORGANIZATION LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerOrganizationInterface.leaderMint} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The Badge must exist. + */ + function leaderMint( + address _to + , uint256 _id + , uint256 _amount + , bytes memory _data + ) + override + external + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + /// @dev Mint the badge to the user. + _mint( + _to + , _id + , _amount + , _data + ); + } + + /** + * See {BadgerOrganizationInterface.leaderMintBatch} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The Badge must exist. + * - The arrays must be the same length. + */ + function leaderMintBatch( + address[] memory _tos + , uint256 _id + , uint256[] memory _amounts + , bytes memory _data + ) + override + external + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + /// @dev Make sure that the supplied arrays are equal in length. + require( + _tos.length == _amounts.length, + "BadgerOrganization::leaderMintBatch: _tos and _amounts must be the same length." + ); + + /// @dev Mint the badge to all of the recipients with their given amount. + uint256 i; + for ( + i; + i < _tos.length; + i++ + ) { + /// @dev Mint the badges to the users. + _mint( + _tos[i] + , _id + , _amounts[i] + , _data + ); + } + } + + /** + * @notice Allows the owner and leaders of a contract to batch mint badges. + * @dev This is an extremely gassy and bad implementation of batch processing + * for Ethereum mainnet. However, because many organizations do not live on ETH + * this function enables the user a simpler front-end experience. + * @dev If you are minting through a custom contract. Recommended usage is + * to use the `mintBatch` function instead by doing 1 Badge at a time. + * @param _tos The addresses to mint the badge to. + * @param _ids The id of the badge to mint. + * @param _amounts The amount of the badge to mint. + * + * Requirements: + * - The arrays must be the same length. + */ + function leaderMintFullBatch( + address[] memory _tos + , uint256[] memory _ids + , uint256[] memory _amounts + , bytes memory _data + ) + external + virtual + { + require( + _tos.length == _ids.length + && _ids.length == _amounts.length + , "BadgerOrganization::leaderMintFullBatch: _froms, _ids, and _amounts must be the same length." + ); + + /// @dev Mint the badge to all of the recipients with their given amount. + uint256 i; + uint256 id; + for ( + i; + i < _tos.length; + i++ + ) { + id = _ids[i]; + + /// @dev Confirm that the token exists and that the caller is a leader. + _verifyFullBatch(id); + + /// @dev Mint the badges to the users. + _mint( + _tos[i] + , id + , _amounts[i] + , _data + ); + } + } + + /** + * See {BadgerOrganizationInterface-claimMint} + * + * Requirements: + * - The Badge must exist. + * - The amount to mint must be greater than zero. + * - The caller must have a valid signature or the token be claimable. + */ + function claimMint( + bytes calldata _signature + , uint256 _id + , uint256 _amount /// @dev Amount of tokens to mint (not spend). + , bytes memory _data + ) + override + external + payable + virtual + onlyRealBadge(_id) + { + /// @dev Confirm that the user is trying to mint at least one. + require( + _amount > 0 + , "BadgerScout::claimMint: Amount must be greater than 0." + ); + + if(getSigner(_id) != address(0)) { + /// @dev Verify that the signer signed the message permitting a mint of `_id` + /// to `_msgSender()` for `_quantity` amount. + _verifySignature( + _msgSender() + , _id + , _amount + , _data + , _signature + ); + } else { + /// @dev If the badge does not have a signer, then it is a free min t + /// but need to make sure it has been marked as claimable. + require( + getClaimable(_id) + , "BadgerOragnization::claimMint: This badge is not claimable." + ); + } + + /// @dev Get the payment object. + PaymentToken storage paymentToken = badges[_id].paymentToken; + + /// @dev Confirm the user has already funded the correct amount. + _verifyFunding( + paymentToken.paymentKey + , paymentToken.amount * _amount /// @dev The cost of minting the lot. + ); + + /// @dev Mint the badge to the user. + _mint( + _msgSender() + , _id + , _amount + , _data + ); + } + + /** + * See {BadgerOrganizationInterface.revoke} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The Badge must exist. + */ + function revoke( + address _from + , uint256 _id + , uint256 _amount + ) + override + external + virtual + onlyLeader(_id) + { + /// @dev Revoke the badge from the user. + _burn( + _from + , _id + , _amount + ); + } + + /** + * See {BadgerOrganizationInterface.revokeBatch} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The Badge must exist. + * - The arrays must be the same length. + */ + function revokeBatch( + address[] memory _froms + , uint256 _id + , uint256[] memory _amounts + ) + override + external + virtual + onlyLeader(_id) + { + require( + _froms.length == _amounts.length, + "BadgerOrganization::revokeBatch: _from and _amounts must be the same length." + ); + + uint256 i; + for( + i; + i < _froms.length; + i++ + ) { + /// @dev Revoke the badge from the user. + _burn( + _froms[i] + , _id + , _amounts[i] + ); + } + } + + /** + * @notice Allows the owner and leaders of a contract to revoke badges from a user. + * @dev This is an extremely gassy and bad implementation of batch processing + * for Ethereum mainnet. However, because many organizations do not live on ETH + * this function enables the user a simpler front-end experience. + * @dev If you are revoking through a custom contract. Recommended usage is + * to use the `revokeBatch` function instead. + * @param _froms The addresses to revoke the badge from. + * @param _ids The id of the badge to revoke. + * @param _amounts The amount of the badge to revoke. + * + * Requirements: + * - The arrays must be the same length. + * - The caller must be a leader of the Organization. + */ + function revokeFullBatch( + address[] memory _froms + , uint256[] memory _ids + , uint256[] memory _amounts + ) + external + virtual + { + require( + _froms.length == _ids.length + && _ids.length == _amounts.length + , "BadgerOrganization::revokeFullBatch: _froms, _ids, and _amounts must be the same length." + ); + + uint256 i; + Badge storage badge; + for( + i; + i < _froms.length; + i++ + ) { + badge = badges[_ids[i]]; + + /// @dev Only allow the owner or leader to mint the badge. + require ( + _msgSender() == owner() + || isDelegate( + _ids[i] + , _msgSender() + ) + , "BadgerOrganization::_verifyFullBatch: Only leaders can call this." + ); + + /// @dev Revoke the badge from the user. + _burn( + _froms[i] + , _ids[i] + , _amounts[i] + ); + } + } + + /** + * See {BadgerOrganizationInterface.forfeit} + */ + function forfeit( + uint256 _id + , uint256 _amount + , bytes memory _data + ) + override + external + virtual + { + /// @dev Revoke the badge from the user. + _burn( + _msgSender() + , _id + , _amount + ); + + emit BadgeForfeited( + _id + , _amount + , _data + ); + } + + /*////////////////////////////////////////////////////////////// + TOKEN LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * See {ERC1155Upgradeable.uri} + */ + function uri( + uint256 _id + ) + override + public + view + virtual + returns ( + string memory + ) + { + /// @dev Get the URI for the badge. + string memory _uri = badges[_id].uri; + + /// @dev If a custom URI has been set for this badge, return it. + if (bytes(_uri).length > 0) { + return _uri; + } + + /// @dev Use the default base URI with the token id added. + return super.uri(_id); + } + + /** + * See {ERC1155Upgradeable.safeTransferFrom} + */ + function safeTransferFrom( + address _from, + address _to, + uint256 _id, + uint256 _amount, + bytes memory _data + ) + override + public + virtual + { + /// @dev Confirm that the sender has permission to transfer this token. + _verifyTransfer( + _id + , _from + , _to + ); + + /// @dev Transfer the badge. + super.safeTransferFrom( + _from + , _to + , _id + , _amount + , _data + ); + } + + /** + * See {ERC1155Upgradeable.safeBatchTransferFrom} + */ + function safeBatchTransferFrom( + address _from, + address _to, + uint256[] memory _ids, + uint256[] memory _amounts, + bytes memory _data + ) + override + public + virtual + { + /// @dev Confirm that the transfer can proceed if the account is not token bound + /// or the message sender is a leader of the badge. + for( + uint256 i; + i < _ids.length; + i++ + ) { + /// @dev Confirm that the sender has permission to transfer this token. + _verifyTransfer( + _ids[i] + , _from + , _to + ); + } + + /// @dev Transfer the badge. + super.safeBatchTransferFrom( + _from + , _to + , _ids + , _amounts + , _data + ); + } + + /*////////////////////////////////////////////////////////////// + CLAIMABLE LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Allow money to be sent to this contract. + */ + receive() + external + payable {} + + /** + * See {BadgerOrganizationInterface.depositETH} + */ + function depositETH( + uint256 _id + ) + override + external + payable + { + /// @dev Verify that the badge exists and is ready to mint. + _verifyBadge(_id); + + /// @dev Verify that the badge is ETH and deposit them. + _verifyDeposit( + _id + , DOLPHIN_ETH + , 0 + , _msgSender() + , msg.value + ); + } + + /** + * See {BadgerOrganizationInterface.depositERC20} + */ + function depositERC20( + uint256 _id + , address _token + , uint256 _amount + ) + override + external + { + /// @dev Verify that the badge exists and is ready to mint. + _verifyBadge(_id); + + /// @dev Transfer the ERC20 into this contract. + IERC20Upgradeable token = IERC20Upgradeable(_token); + + /// @dev Verify that the tokens being sent are as expected and deposit them. + _verifyDeposit( + _id + , _token + , 0 + , _msgSender() + , _amount + ); + + /// @dev Transfer the token into this contract. + token.transferFrom( + _msgSender() + , address(this) + , _amount + ); + } + + /* + * @notice This allows an individual to deposit an ERC1155 token into the contract and + * and fund the minting of a badge. + * @dev If not data provided see {IERC1155ReceiverUpgradeable.onERC1155Received} + * @param _operator The address which called `safeTransferFrom` function. + * @param _from The address which previously owned the token. + * @param _id The ID of the token being transferred. + * @param _amount The amount of tokens being transferred. + * @param _data Additional data that contains the badge id to fund. + */ + function onERC1155Received( + address + , address _from + , uint256 _id + , uint256 _amount + , bytes memory _data + ) + override + public + virtual + returns ( + bytes4 + ) + { + /// @dev Return the typical ERC-1155 response if transfer is not intended to be a payment. + if(bytes(_data).length == 0) { + return this.onERC1155Received.selector; + } + + /// @dev Recover the uint256 for badgeId. + (uint256 badgeId) = abi.decode( + _data + , (uint256) + ); + + /// @dev Verify that the badgeId is the same as the id. + _verifyBadge(badgeId); + + /// @dev Verify that the tokens being sent are as expected and deposit them. + _verifyDeposit( + badgeId + , _msgSender() + , _id + , _from + , _amount + ); + + return this.onERC1155Received.selector; + } + + /** + * See {IERC1155ReceiverUpgradeable.onERC1155BatchReceived} + */ + function onERC1155BatchReceived( + address + , address + , uint256[] memory + , uint256[] memory + , bytes memory + ) + override + public + virtual + returns (bytes4) + { + return this.onERC1155BatchReceived.selector; + } + + /** + * @notice This allows an individual to deposit a ERC721 token into the contract and + * and fund the minting of a badge. + * If not data provided see {IERC721ReceiverUpgradeable.onERC721Received} + */ + function onERC721Received( + address + , address _from + , uint256 + , bytes memory _data + ) + override + public + virtual + returns ( + bytes4 + ) + { + /// @dev Return the typical ERC-1155 response if transfer is not intended to be a payment. + if(bytes(_data).length == 0) { + return this.onERC721Received.selector; + } + + /// @dev Recover the uint256 for badgeId. + (uint256 badgeId) = abi.decode( + _data + , (uint256) + ); + + /// @dev Verify that the Badge exists and is ready to mint. + _verifyBadge(badgeId); + + /// @dev Verify that the tokens being sent are as expected and deposit them. + _verifyDeposit( + badgeId + , _msgSender() + , 0 + , _from + , 1 + ); + + return this.onERC721Received.selector; + } + + /*////////////////////////////////////////////////////////////// + EXTERNAL ORGANIZATION LOGIC + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Returns the metadata URI for the organization. + * @return The metadata URI for the organization. + */ + function contractURI() + public + view + returns ( + string memory + ) + { + return organizationURI; + } +} diff --git a/contracts/contracts/BadgerOrganization/BadgerScout.sol b/contracts/contracts/BadgerOrganization/BadgerScout.sol new file mode 100644 index 0000000..7e38eff --- /dev/null +++ b/contracts/contracts/BadgerOrganization/BadgerScout.sol @@ -0,0 +1,964 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +/// @dev Core dependencies. +import { BadgerScoutInterface } from "./interfaces/BadgerScoutInterface.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { ERC1155Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol"; +import { ERC1155HolderUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/utils/ERC1155HolderUpgradeable.sol"; +import { ERC721HolderUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/utils/ERC721HolderUpgradeable.sol"; + +/// @dev Helpers. +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { ERC1155ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/utils/ERC1155ReceiverUpgradeable.sol"; + +/// @dev Supported interfaces. +import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; +import { IERC1155Upgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol"; +import { IERC1155ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol"; +import { IERC721ReceiverUpgradeable } from "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol"; + +contract BadgerScout is + BadgerScoutInterface + , OwnableUpgradeable + , ERC1155Upgradeable + , ERC1155HolderUpgradeable + , ERC721HolderUpgradeable +{ + using ECDSA for bytes32; + + /*////////////////////////////////////////////////////////////// + ORGANIZATION STATE + //////////////////////////////////////////////////////////////*/ + + /// @dev The address used to denote the ETH token. + address public constant DOLPHIN_ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + + /// @dev The URI for the Organization/contract. + string public organizationURI; + + /// @dev The name of the contract. + string public name; + + /// @dev The symbol of the contract. + string public symbol; + + /// @dev Mapping from token ID to badge + mapping(uint256 => Badge) public badges; + + /// @dev Tracking the badges that one has funded the cost for. + mapping(bytes32 => uint256) badgePaymentKeyToFunded; + + /// @dev Tracking the delegates of a Badge. + mapping(bytes32 => bool) public badgeDelegateKeyToIsDelegate; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + /// @dev Event that announces when the Organization is updated. + event OrganizationUpdated(string organizationURI); + + /// @dev Event that announces when the status of a Badge is updated. + event BadgeUpdated( + uint256 indexed badgeId + , uint256 indexed config + , bytes32 indexed paymentKey + , uint256 amount + ); + + /// @dev Event that announces when a Badge is funded. + event BadgeForfeited( + uint256 indexed badgeId + , uint256 indexed amount + , bytes indexed data + ); + + /// @dev Event that announces when the state of a Delegate changes. + event DelegateUpdated( + uint256 indexed badgeId + , address indexed delegate + , bool indexed isDelegate + ); + + /// @dev Event that announces when a payment token is deposited for a Badge. + event PaymentTokenDeposited( + uint256 indexed badgeId + , address indexed payer + , uint256 indexed amount + ); + + /*////////////////////////////////////////////////////////////// + MODIFIERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Make sure that only owner or the leader of a badge passes. + * @param _id The id of the badge being accessed. + * + * Requirements: + * - The caller must be the owner or the leader of the badge. + */ + modifier onlyLeader( + uint256 _id + ) { + require ( + _msgSender() == owner() + || badgeDelegateKeyToIsDelegate[ + keccak256( + abi.encodePacked( + _id + , _msgSender() + ) + ) + ] + , "BadgerScout::onlyLeader: Only leaders can call this." + ); + _; + } + + /** + * @notice Make sure that actions can only be performed on badges that exist. + * @param _id The id of the badge being accessed. + * + * Requirements: + * - The badge must exist. + */ + modifier onlyRealBadge( + uint256 _id + ) { + require ( + bytes(badges[_id].uri).length > 0 + , "BadgerScout::onlyRealBadge: Can only call this for setup badges." + ); + _; + } + + /*////////////////////////////////////////////////////////////// + SETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerScoutInterface.setOrganizationURI} + * + * Requirements: + * - The caller must be the owner. + */ + function setOrganizationURI( + string memory _uri + ) + override + public + virtual + onlyOwner + { + _setOrganizationURI(_uri); + } + + /** + * See {BadgerScoutInterface.setBadge} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The URI must not be blank. + */ + function setBadge( + uint256 _id + , bool _claimable + , bool _accountBound + , address _signer + , string memory _uri + , PaymentToken memory _paymentToken + , address[] memory _delegates + ) + override + public + virtual + onlyLeader(_id) + { + require( + bytes(_uri).length > 0 + , "BadgerScout::setBadge: URI must be set." + ); + + Badge storage badge = badges[_id]; + + /// @dev Set the config of the Badge. + badge.config = 0; + + /// @dev Set the claimable bit of the Badge. + _setBit( + _id + , 0 + , _claimable + ); + + /// @dev Set the account bound bit of the Badge. + _setBit( + _id + , 1 + , _accountBound + ); + + /// @dev Set the signer of the Badge. + _setSigner( + _id + , _signer + ); + + /// @dev Set the URI of the Badge. + _setBadgeURI( + _id + , _uri + ); + + badge.paymentToken = _paymentToken; + + /// @dev Update the state of all the delegates. + for ( + uint256 i; + i < _delegates.length; + i++ + ) { + badgeDelegateKeyToIsDelegate[keccak256( + abi.encodePacked( + _id + , _delegates[i] + ) + )] = true; + + emit DelegateUpdated( + _id + , _delegates[i] + , true + ); + } + + emit BadgeUpdated( + _id + , badge.config + , badge.paymentToken.paymentKey + , badge.paymentToken.amount + ); + } + + /** + * See {BadgerScoutInterface.setClaimable} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The badge must exist. + */ + function setClaimable( + uint256 _id + , bool _claimable + ) + override + public + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + /// @dev Set the claimable bit of the Badge. + _setBit( + _id + , 0 + , _claimable + ); + + emit BadgeUpdated( + _id + , badges[_id].config + , badges[_id].paymentToken.paymentKey + , badges[_id].paymentToken.amount + ); + } + + /** + * See {BadgerScoutInterface.setAccountBound} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The badge must exist. + */ + function setAccountBound( + uint256 _id + , bool _accountBound + ) + override + public + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + /// @dev Set the account bound bit of the Badge. + _setBit( + _id + , 1 + , _accountBound + ); + + emit BadgeUpdated( + _id + , badges[_id].config + , badges[_id].paymentToken.paymentKey + , badges[_id].paymentToken.amount + ); + } + + /** + * See {BadgerScoutInterface.setSigner} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The badge must exist. + */ + function setSigner( + uint256 _id + , address _signer + ) + override + public + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + /// @dev Override the existing data and bitpack _signer into the config of the Badge. + _setSigner( + _id + , _signer + ); + + emit BadgeUpdated( + _id + , badges[_id].config + , badges[_id].paymentToken.paymentKey + , badges[_id].paymentToken.amount + ); + } + + /** + * See {BadgerScoutInterface.setBadgeURI} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The badge must exist. + * - The URI must not be blank. + */ + function setBadgeURI( + uint256 _id + , string memory _uri + ) + override + public + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + require( + bytes(_uri).length > 0 + , "BadgerScout::setBadgeURI: URI must be set." + ); + + /// @dev Set the URI of the Badge. + _setBadgeURI( + _id + , _uri + ); + } + + /** + * See {BadgerScoutInterface.setPaymentToken} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The badge must exist. + */ + function setPaymentToken( + uint256 _id + , PaymentToken memory _paymentToken + ) + public + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + Badge storage badge = badges[_id]; + + badge.paymentToken = _paymentToken; + + emit BadgeUpdated( + _id + , badge.config + , badge.paymentToken.paymentKey + , badge.paymentToken.amount + ); + } + + /** + * See {BadgerScoutInterface.setDelegate} + * + * Requirements: + * - The caller must be a leader of the Organization. + * - The badge must exist. + * - The arrays must be the same length. + */ + function setDelegates( + uint256 _id + , address[] calldata _delegates + , bool[] calldata _isDelegate + ) + override + public + virtual + onlyLeader(_id) + onlyRealBadge(_id) + { + require( + _delegates.length == _isDelegate.length + , "BadgerScout::setDelegates: _delegates and _isDelegate arrays must be the same length." + ); + + /// @dev Loop through the delegates and update their status. + for ( + uint256 i; + i < _delegates.length; + i++ + ) { + badgeDelegateKeyToIsDelegate[keccak256( + abi.encodePacked( + _id + , _delegates[i] + ) + )] = _isDelegate[i]; + + emit DelegateUpdated( + _id + , _delegates[i] + , _isDelegate[i] + ); + } + } + + /** + * See {BadgerScoutInterface.setDelegatesBatch} + * + * Requirements: + * - The arrays must be the same length. + */ + function setDelegatesBatch( + uint256[] calldata _ids + , address[] calldata _delegates + , bool[] calldata _isDelegate + ) + override + public + virtual + { + require( + _ids.length == _delegates.length + && _delegates.length == _isDelegate.length + , "BadgerScout::setDelegatesBatch: _ids, _delegates, and _isDelegate must be the same length." + ); + + /// @dev Loop through the badges and update the delegates statuses. + uint256 i; + uint256 id; + for ( + i; + i < _ids.length; + i++ + ) { + id = _ids[i]; + + /// @dev Confirm that the token exists and that the caller is a leader. + _verifyFullBatch(id); + + badgeDelegateKeyToIsDelegate[keccak256( + abi.encodePacked( + id + , _delegates[i] + ) + )] = _isDelegate[i]; + + emit DelegateUpdated( + id + , _delegates[i] + , _isDelegate[i] + ); + } + } + + /*////////////////////////////////////////////////////////////// + GETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * See {BadgerScoutInterface.getClaimable} + */ + function getClaimable( + uint256 _id + ) + override + public + view + virtual + returns ( + bool + ) + { + return (badges[_id].config & (1 << 0)) != 0; + } + + /** + * See {BadgerScoutInterface.getAccountBound} + */ + function getAccountBound( + uint256 _id + ) + override + public + view + virtual + returns ( + bool + ) + { + return (badges[_id].config & (1 << 1)) != 0; + } + + /** + * See {BadgerScoutInterface.getSigner} + */ + function getSigner( + uint256 _id + ) + override + public + view + virtual + returns ( + address + ) + { + return address(uint160(badges[_id].config >> 2)); + } + + /** + * See {BadgerScoutInterface.isDelegate} + */ + function isDelegate( + uint256 _id + , address _delegate + ) + public + view + virtual + returns ( + bool + ) + { + return badgeDelegateKeyToIsDelegate[ + keccak256( + abi.encodePacked( + _id + , _delegate + ) + ) + ]; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL SETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Allows the owner of the contract to update the Organization URI. + * @param _uri The new URI for the Organization. + */ + function _setOrganizationURI( + string memory _uri + ) + internal + virtual + { + organizationURI = _uri; + + emit OrganizationUpdated(_uri); + } + + /** + * @notice Converts a boolean into a bit and packs it into the config. + * @param _id The ID of the badge. + * @param _bit The bit to pack. + * @param _value The value to pack. + */ + function _setBit( + uint256 _id + , uint256 _bit + , bool _value + ) + internal + virtual + { + if (_value) { + badges[_id].config |= (1 << _bit); + } else { + badges[_id].config &= ~(1 << _bit); + } + } + + /** + * @notice Sets the signer for the badge. + * @param _id The ID of the badge. + * @param _signer The address of the signer. + */ + function _setSigner( + uint256 _id + , address _signer + ) + internal + virtual + { + /// @dev Clear the signer slot. + badges[_id].config &= ~(type(uint160).max << 2); + + /// @dev Set the signer slot. + badges[_id].config |= (uint256(uint160(_signer)) << 2); + } + + /** + * @notice Sets the URI for the badge and emits event that URI was updated. + * @param _id The ID of the badge. + * @param _uri The URI of the badge. + */ + function _setBadgeURI( + uint256 _id + , string memory _uri + ) + internal + virtual + { + badges[_id].uri = _uri; + + emit URI( + _uri + , _id + ); + } + + /** + * @notice Handle the token-agnostic depositing of funds needed + * to claim a Badge. + * @param _badgeId The id of the badge being claimed. + * @param _address The address of the user claiming the badge. + * @param _id The id of the payment token being used. + * @param _from The address of the user sending the funds. + * @param _amount The amount of funds being sent. + */ + function _verifyDeposit( + uint256 _badgeId + , address _address + , uint256 _id + , address _from + , uint256 _amount + ) + internal + { + /// @dev Confirm that the token is a valid payment token. + bytes32 paymentTokenKey = _verifyPayment( + _badgeId + , _address + , _id + ); + + /// @dev Build the key that is used to track what an individual has funded. + bytes32 paymentKey = ( + keccak256( + abi.encodePacked( + paymentTokenKey + , _from + ) + ) + ); + + /// @dev Increase the funding the user has associated for this badge. + badgePaymentKeyToFunded[paymentKey] += _amount; + + emit PaymentTokenDeposited( + _id + , _from + , _amount + ); + } + + /** + * @notice Verify that the message sender has funded this payment token + * with an amount greater than or equal to the amount required. + * @param _paymentTokenKey The key of the payment token. + * @param _amount The amount that the user is trying to claim. + * + * Requirements: + * - The user must have funded the payment token with an amount greater than + * or equal to the amount required. + */ + function _verifyFunding( + bytes32 _paymentTokenKey + , uint256 _amount + ) + internal + { + /// @dev Build the key that is used to track what an individual has funded. + bytes32 paymentKey = ( + keccak256( + abi.encodePacked( + _paymentTokenKey + , _msgSender() + ) + ) + ); + + /// @dev Confirm that the user has funded the badge or that the Badge is free. + require( + badgePaymentKeyToFunded[paymentKey] >= _amount + , "BadgerScout::_verifyFunding: User has not funded the badge." + ); + + /// @dev Lower the amount funded. + badgePaymentKeyToFunded[paymentKey] -= _amount; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL GETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Confirms that a message sender is calling a Badge that exists + * as well as is a leader of that badge. + * @param _id The id of the badge to check. + * + * Requirements: + * - The Badger must exist. + * - The caller must be a leader of the Organization. + */ + function _verifyFullBatch( + uint256 _id + ) + internal + view + { + /// @dev Get the badge. + Badge storage badge = badges[_id]; + + /// @dev Confirm the Badge exists. + require( + bytes(badge.uri).length != 0 + , "BadgerScout::_verifyFullBatch: Can only call this for setup badges." + ); + + /// @dev Only allow the owner or leader to mint the badge. + require ( + _msgSender() == owner() + || isDelegate( + _id + , _msgSender() + ) + , "BadgerScout::_verifyFullBatch: Only leaders can call this." + ); + } + + /** + * @notice Confirms that a message sender is calling a Badge that exists + * and is ready to be minted. + * @param _id The id of the badge to check. + * + * Requirements: + * - The Badger must exist. + * - The Badge must have a signer set or be marked as claimable. + */ + function _verifyBadge( + uint256 _id + ) + internal + view + { + /// @dev Get the badge. + Badge storage badge = badges[_id]; + + require ( + bytes(badge.uri).length > 0 + , "BadgerScout::_verifyBadge: Can only call this for setup badges." + ); + + require ( + getSigner(_id) != address(0) + || getClaimable(_id) + , "BadgerScout::_verifyBadge: Can only call this for claimable badges." + ); + } + + /** + * @notice Allows an Organization to define a signer that will enable the claiming of a badge. + * @param _to The address to mint the badge to. + * @param _id The id of the badge to mint. + * @param _amount The amount of the badge to mint. + * @param _data The data to pass to the receiver. + * @param _signature The signature of the signer. + * + * Requirements: + * - The signature provided must be valid for the badge. + */ + function _verifySignature( + address _to, + uint256 _id, + uint256 _amount, + bytes memory _data, + bytes memory _signature + ) + internal + view + { + /// @dev Compile the message that would have been signed. + bytes32 message = keccak256( + abi.encodePacked( + _to + , _id + , _amount + , _data + ) + ); + + require( + message.toEthSignedMessageHash().recover(_signature) == getSigner(_id) + , "BadgerScout::_verifySignature: Invalid signature." + ); + } + + /** + * @notice Connfirms that the provided payment token is valid for the badge. + * @param _badgeId The id of the badge. + * @param _address The address of the payment token. + * @param _id The id of the payment token. + * + * Requirements: + * - The payment token must be valid for the badge. + */ + function _verifyPayment( + uint256 _badgeId + , address _address + , uint256 _id + ) + internal + view + returns ( + bytes32 paymentTokenKey + ) + { + /// @dev Get the Badge object. + Badge storage badge = badges[_badgeId]; + + paymentTokenKey = keccak256( + abi.encodePacked( + _address + , _id + ) + ); + + require( + paymentTokenKey == badge.paymentToken.paymentKey + , "BadgerScout::_verifyPayment: Invalid payment token." + ); + } + + /** + * @notice Confirms whether this token is in a state to be a transferred or not. + * @param _id The id of the token to check. + * @param _from The address of the token owner. + * @param _to The address of the token recipient. + * + * Requirements: + * - The token must be in a state to be transferred. + */ + function _verifyTransfer( + uint256 _id + , address _from + , address _to + ) + internal + view + { + /// @dev Confirm that the transfer can proceed if the account is not token bound + /// or the message sender is a leader of the badge. + require( + /// @dev Prevent a normal user from transferring an account bound token. + /// While allowing them to transfer if the token is not account bound. + !getAccountBound(_id) + || ( + /// @dev If the target or source is the internal contract + ( + _to == address(this) + || _from == address(this) + ) + /// @dev If the sender is a leader of the badge. + || ( + _msgSender() == owner() + || isDelegate( + _id + , _msgSender() + ) + ) + ) + , "BadgerScout::_verifyTransfer: Missing the proper transfer permissions." + ); + } + + /*////////////////////////////////////////////////////////////// + EXTERNAL ORGANIZATION CONTROL + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Allows the Owner to execute an Organization level transaction. + * @param _to The address to execute the transaction on. + * @param _data The data to pass to the receiver. + * @param _value The amount of ETH to send with the transaction. + */ + function execTransaction( + address _to + , bytes calldata _data + , uint256 _value + ) + external + virtual + payable + onlyOwner + { + (bool success, bytes memory returnData) = _to.call{value: _value}(_data); + require(success, string(returnData)); + } + + /** + * See {IERC165Upgradeable.supportsInterface} + */ + function supportsInterface( + bytes4 _interfaceId + ) + override( + ERC1155Upgradeable + , ERC1155ReceiverUpgradeable + ) + public + virtual + view + returns ( + bool + ) + { + return ( + _interfaceId == type(IERC1155Upgradeable).interfaceId + || _interfaceId == type(IERC1155ReceiverUpgradeable).interfaceId + || _interfaceId == type(IERC721ReceiverUpgradeable).interfaceId + || super.supportsInterface(_interfaceId) + ); + } +} \ No newline at end of file diff --git a/contracts/contracts/BadgerOrganization/interfaces/BadgerOrganizationInterface.sol b/contracts/contracts/BadgerOrganization/interfaces/BadgerOrganizationInterface.sol new file mode 100644 index 0000000..f81e506 --- /dev/null +++ b/contracts/contracts/BadgerOrganization/interfaces/BadgerOrganizationInterface.sol @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +interface BadgerOrganizationInterface { + + /*////////////////////////////////////////////////////////////// + SETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Initialize the Organization with the starting state needed. + * @param _owner The owner of the Organization. (Ideally a multi-sig). + * @param _uri The base URI for the Organization. + * @param _contractURI The URI for the contract metadata. + * @param _name The name of the Organization. + * @param _symbol The symbol of the Organization. + */ + function initialize( + address _owner + , string memory _uri + , string memory _contractURI + , string memory _name + , string memory _symbol + ) + external; + + /** + * @dev Allows the leader of a badge to mint the badge they are leading. + * @param _to The address to mint the badge to. + * @param _id The id of the badge to mint. + * @param _amount The amount of the badge to mint. + * @param _data The data to pass to the receiver. + * + * Requirements: + * - `_msgSender` must be the leader of the badge. + */ + function leaderMint( + address _to + , uint256 _id + , uint256 _amount + , bytes memory _data + ) + external; + + /** + * @notice Allows a leader of a badge to mint a batch of recipients in a single transaction. + * Enabling the ability to seamlessly roll out a new "season" with a single batch + * instead of needing hundreds of individual events. Because of this common use case, + * the constant is designed around the _id rather than the _to address. + * @param _tos The addresses to mint the badge to. + * @param _id The id of the badge to mint. + * @param _amounts The amounts of the badge to mint. + * @param _data The data to pass to the receiver. + */ + function leaderMintBatch( + address[] memory _tos + , uint256 _id + , uint256[] memory _amounts + , bytes memory _data + ) + external; + + /** + * @notice Allows a user to mint a claim that has been designated to them. + * @dev This function is only used when the mint is being paid with ETH or has no payment at all. + * To use this with no payment, the `tokenType` of NATIVE with `quantity` of 0 must be used. + * @param _signature The signature that is being used to verify the authenticity of claim. + * @param _id The id of the badge being claimed. + * @param _amount The amount of the badge being claimed. + * @param _data Any data that is being passed to the mint function. + * + * Requirements: + * - `_id` must corresponding to an existing Badge config. + * - `_signature` must be a valid signature of the claim. + */ + function claimMint( + bytes calldata _signature + , uint256 _id + , uint256 _amount + , bytes memory _data + ) + external + payable; + + /** + * @notice Allows the owner and leader of a contract to revoke a badge from a user. + * @param _from The address to revoke the badge from. + * @param _id The id of the badge to revoke. + * @param _amount The amount of the badge to revoke. + * + * Requirements: + * - `_msgSender` must be the owner or leader of the badge. + */ + function revoke( + address _from + , uint256 _id + , uint256 _amount + ) + external; + + /** + * @notice Allows the owner and leaders of a contract to revoke badges from a user. + * @param _froms The addresses to revoke the badge from. + * @param _id The id of the badge to revoke. + * @param _amounts The amount of the badge to revoke. + * + * Requirements: + * - `_msgSender` must be the owner or leader of the badge. + */ + function revokeBatch( + address[] memory _froms + , uint256 _id + , uint256[] memory _amounts + ) + external; + + /** + * @notice Allows the owner of a badge to forfeit their ownership. + * @param _id The id of the badge to forfeit. + * @param _amount The amount of the badge to forfeit. + * @param _data The data to pass to the receiver. + */ + function forfeit( + uint256 _id + , uint256 _amount + , bytes memory _data + ) + external; + + /** + * @notice Allows the owner of a badge to deposit ETH to fund the claiming of a badge. + * @param _id The id of the badge to deposit ETH for. + */ + function depositETH( + uint256 _id + ) + external + payable; + + /** + * @notice Allows the owner of a badge to deposit an ERC20 into the contract. + * @param _id The id of the badge to deposit for. + * @param _token The address of the token to deposit. + * @param _amount The amount of the token to deposit. + */ + function depositERC20( + uint256 _id + , address _token + , uint256 _amount + ) + external; +} \ No newline at end of file diff --git a/contracts/contracts/BadgerOrganization/interfaces/BadgerScoutInterface.sol b/contracts/contracts/BadgerOrganization/interfaces/BadgerScoutInterface.sol new file mode 100644 index 0000000..597c897 --- /dev/null +++ b/contracts/contracts/BadgerOrganization/interfaces/BadgerScoutInterface.sol @@ -0,0 +1,195 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +interface BadgerScoutInterface { + + /*////////////////////////////////////////////////////////////// + SCHEMAS + //////////////////////////////////////////////////////////////*/ + + /// @dev The structure of a Payment Token. + struct PaymentToken { + bytes32 paymentKey; /// @dev keccak256(abi.encodePacked(tokenAddress,tokenId)); + uint256 amount; /// @dev Amount needed per badge to claim. + } + + /// @dev The processing information for this Badger. + struct Badge { + uint256 config; /// @dev Bitpacked claimable, accountBound and signer. + string uri; /// @dev The URI for the badge. + PaymentToken paymentToken; /// @dev The payment token required to mint a badge. + } + + /*////////////////////////////////////////////////////////////// + SETTERS + //////////////////////////////////////////////////////////////*/ + + function setOrganizationURI( + string memory _uri + ) + external; + + /** + * @notice Create a badge in the Organization. + * @param _id The id of the badge being created. + * @param _claimable Whether the badge is claimable or not. + * @param _accountBound Whether or not the badge is account bound. + * @param _signer The address of the signer. + * @param _uri The URI for the badge. + * @param _paymentToken The payment token for the badge. + * @param _delegates The addresses of the delegates. + */ + function setBadge( + uint256 _id + , bool _claimable + , bool _accountBound + , address _signer + , string memory _uri + , PaymentToken memory _paymentToken + , address[] memory _delegates + ) + external; + + /** + * @notice Allows the owner of the contract to set a Badge as claimable or not. + * @param _id The id of the badge being updated. + * @param _claimable Whether the badge is claimable or not. + */ + function setClaimable( + uint256 _id + , bool _claimable + ) + external; + + /** + * @notice Control the account bound status of a badge. + * @param _id The id of the badge being updated. + * @param _accountBound The new account bound status. + */ + function setAccountBound( + uint256 _id + , bool _accountBound + ) + external; + + /** + * @notice Set the signer for the Badge. + * @param _signer The address of the signer. + */ + function setSigner( + uint256 _id + , address _signer + ) + external; + + /** + * @notice Set the uri for a Badge. + * @param _uri The address of the signer. + */ + function setBadgeURI( + uint256 _id + , string memory _uri + ) + external; + + /** + * @notice Set the payment for a specific badge id. + * @param _id The id of the badge being accessed. + * @param _paymentToken The payment token for the badge. + */ + function setPaymentToken( + uint256 _id + , PaymentToken memory _paymentToken + ) + external; + + /** + * @notice Allow the owner of the organization to control the leaders of the Badge. + * @param _id The id of the badge. + * @param _delegates The address of the delegates that we are updating the status of. + * @param _isDelegate The status of the delegates being updated. + */ + function setDelegates( + uint256 _id + , address[] calldata _delegates + , bool[] calldata _isDelegate + ) + external; + + /** + * @notice Allow the owner of the organization to control the delegates of multiple badges in one transaction. + * @dev This functionality is not exposed through the Dashboard UI however you can call this function directly. + * @param _ids The ids of the badges. + * @param _delegates The address of the delegates that we are updating the status of. + * @param _isDelegate The status of the delegates being updated. + */ + function setDelegatesBatch( + uint256[] calldata _ids + , address[] calldata _delegates + , bool[] calldata _isDelegate + ) + external; + + /*////////////////////////////////////////////////////////////// + GETTERS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Get the config for a specific badge id. + * @param _id The id of the badge being accessed. + * @return True if the badge is claimable, false otherwise. + */ + function getClaimable( + uint256 _id + ) + external + view + returns ( + bool + ); + + /** + * @notice Get the config for a specific badge id. + * @param _id The id of the badge being accessed. + * @return True if the badge is account bound, false otherwise. + */ + function getAccountBound( + uint256 _id + ) + external + view + returns ( + bool + ); + + /** + * @notice Get the signer for a specific badge id. + * @param _id The id of the badge being accessed. + * @return The address of the signer. + */ + function getSigner( + uint256 _id + ) + external + view + returns ( + address + ); + + /** + * @notice Allow anyone to see the delegates of a Badge. + * @param _id The id of the badge. + * @param _delegate The address of the delegate. + * @return True if `_delegate` is a delegate, false otherwise. + */ + function isDelegate( + uint256 _id + , address _delegate + ) + external + view + returns ( + bool + ); +} \ No newline at end of file diff --git a/contracts/contracts/BadgerOrganizationLogic.sol b/contracts/contracts/BadgerOrganizationLogic.sol deleted file mode 100644 index 6a6a0eb..0000000 --- a/contracts/contracts/BadgerOrganizationLogic.sol +++ /dev/null @@ -1,518 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Factory input. -import {Badger} from "./Badger.sol"; - -/// @dev Core dependencies. -import {IBadgerOrganizationLogic} from "./interfaces/IBadgerOrganizationLogic.sol"; -import {BadgerManaged} from "./managers/BadgerManaged.sol"; -import {BadgerHooked} from "./hooks/BadgerHooked.sol"; -import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import {ERC1155Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol"; - -/** - * @dev BadgerScout contains the back-end logic of a Badger Organization. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerOrganizationLogic is - IBadgerOrganizationLogic, - BadgerHooked, - BadgerManaged, - OwnableUpgradeable, - ERC1155Upgradeable -{ - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The name of the contract. - string public name; - - /// @dev The symbol of the contract. - string public symbol; - - /// @dev The URI for the Organization/contract. - string public organizationURI; - - /// @dev Mapping from token ID to Badge - mapping(uint256 => string) public uris; - - //////////////////////////////////////////////////////// - /// BLOCKING CONSTRUCTOR /// - //////////////////////////////////////////////////////// - - constructor() { - _disableInitializers(); - } - - //////////////////////////////////////////////////////// - /// INITIALIZER /// - //////////////////////////////////////////////////////// - - /** - * @notice Initialize the BadgerOrganizationLogic contract. - * @param _organization The Organization struct. - */ - function initialize(Organization calldata _organization) - external - initializer - { - /// @dev Initialize ERC1155. - __ERC1155_init(_organization.uri); - - /// @dev Initialize Ownable. - __Ownable_init(); - - /// @dev Transfer ownership to the deployer. - transferOwnership(_organization.deployer); - - /// @dev Set the contract URI. - _setOrganizationURI(_organization.organizationURI); - - /// @dev Set the immutable name and symbol of the contract. - name = _organization.name; - symbol = _organization.symbol; - } - - //////////////////////////////////////////////////////// - /// MODIFIERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Confirm that only the Owner or an Organization Manager passes. - */ - modifier onlyOrganizationManager() { - require( - _isOrganizationManager(_msgSender()), - "BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this." - ); - _; - } - - /** - * @notice Confirm that only a Manager of a Badge passes. - * @param _id The id of the Badge being accessed. - */ - modifier onlyBadgeManager(uint256 _id) { - require( - _isBadgeManager(_id, _msgSender()), - "BadgerScout::onlyBadgeManager: Only Managers can call this." - ); - _; - } - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerOrganizationLogic.setOrganizationURI} - */ - function setOrganizationURI(string memory _uri) - public - virtual - override - onlyOrganizationManager - { - /// @dev Confirm a valid URI was provided. - require( - bytes(_uri).length != 0, - "BadgerScout::setOrganizationURI: URI must be set." - ); - - /// @dev Set the URI of the Organization. - _setOrganizationURI(_uri); - } - - /** - * See {IBadgerOrganizationLogic.setBadgeURI} - */ - function setBadgeURI(uint256 _id, string memory _uri) - public - virtual - override - onlyBadgeManager(_id) - { - /// @dev Confirm a valid URI was provided. - require( - bytes(_uri).length != 0, - "BadgerScout::setBadgeURI: URI must be set." - ); - - /// @dev Set the URI of the Badge. - _setBadgeURI(_id, _uri); - } - - /** - * See {IBadgerOrganizationLogic.setManagers} - */ - function setManagers( - address[] calldata _managers, - bool[] calldata _isManager - ) public virtual override onlyOwner { - /// @dev Load the stack. - uint256 i; - bytes32 managerHash; - uint256 managersLength = _managers.length; - address manager; - - require( - managersLength == _isManager.length, - "BadgerScout::setManagers: _managers and _isManager must be the same length." - ); - - /// @dev Loop through the arrays and update the state of the Managers. - for (i; i < managersLength; i++) { - /// @dev Load the loop stack. - manager = _managers[i]; - - /// @dev Confirm a valid address was provided. - require( - manager != address(0), - "BadgerScout::setManagers: Manager cannot be the zero address." - ); - - /// @dev Calculate the hash for the Organization Manager. - managerHash = _managerHash(manager); - - /// @dev Update the state of the Manager for the Organization. - _setManager(managerHash, _isManager[i]); - } - } - - /** - * See {IBadgerOrganizationLogic.setManagers} - */ - function setManagers( - uint256 _id, - address[] calldata _managers, - bool[] calldata _isManager - ) public virtual override onlyOrganizationManager { - /// @dev Load the stack. - uint256 i; - bytes32 managerHash; - uint256 managersLength = _managers.length; - address manager; - - require( - managersLength == _isManager.length, - "BadgerScout::setManagers: _managers and _isManager must be the same length." - ); - - /// @dev Loop through the arrays and update the state of the Managers. - for (i; i < managersLength; i++) { - /// @dev Load the loop stack. - manager = _managers[i]; - - /// @dev Confirm a valid address was provided. - require( - manager != address(0), - "BadgerScout::setManagers: Manager cannot be the zero address." - ); - - /// @dev Calculate the hash for the Organization Manager. - managerHash = _badgeManagerHash(_id, manager); - - /// @dev Update the state of the Manager for the Badge. - _setManager(managerHash, _isManager[i]); - } - } - - /** - * See {IBadgerOrganizationLogic.setHooks} - */ - function setHooks( - bytes32 _slot, - address[] calldata _hooks, - bool[] calldata _isHook - ) public virtual override onlyOrganizationManager { - /// @dev Load the stack. - uint256 i; - uint256 hooksLength = _hooks.length; - address hook; - - require( - hooksLength == _isHook.length, - "BadgerScout::setHooks: _hooks and _isHook must be the same length." - ); - - /// @dev Loop through the arrays and update the state of the Hooks. - for (i; i < hooksLength; i++) { - /// @dev Load the loop stack. - hook = _hooks[i]; - - /// @dev Confirm a valid address was provided. - require( - hook != address(0), - "BadgerScout::setHooks: Hook cannot be the zero address." - ); - - /// @dev Update the state of the Hook for the Organization. - _setHook(_slot, hook, _isHook[i]); - } - } - - /** - * See {IBadgerOrganizationLogic.configManager} - */ - function configManager(address _manager, bytes calldata _config) - public - virtual - override - onlyOrganizationManager - { - /// @dev Configure the Organization manager. - _configManager(_manager, _managerHash(_manager), _config); - } - - /** - * See {IBadgerOrganizationLogic.configManager} - */ - function configManager( - uint256 _id, - address _manager, - bytes calldata _config - ) public virtual override onlyBadgeManager(_id) { - /// @dev Configure the Badge manager. - _configManager(_manager, _badgeManagerHash(_id, _manager), _config); - } - - /** - * See {IBadgerOrganizationLogic.configHook} - */ - function configHook( - bytes32 _slot, - address _slotHook, - bytes calldata _config - ) public virtual override onlyOrganizationManager { - /// @dev Configure the Organization hook. - _configHook(_slotHook, _slot, _config); - } - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerOrganizationLogic.isOrganizationManager} - */ - function isOrganizationManager(address _address) - public - view - virtual - override - returns (bool) - { - /// @dev Determine if the address is an Organization Manager. - return _isOrganizationManager(_address); - } - - /** - * See {IBadgerOrganizationLogic.isBadgeManager} - */ - function isBadgeManager(uint256 _id, address _address) - public - view - virtual - override - returns (bool) - { - /// @dev Determine if the address is a Badge Manager. - return _isBadgeManager(_id, _address); - } - - /** - * See {ERC165-supportsInterface} - */ - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override - returns (bool) - { - return - interfaceId == type(IBadgerOrganizationLogic).interfaceId || - super.supportsInterface(interfaceId); - } - - //////////////////////////////////////////////////////// - /// INTERNAL SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Allows the Owner of the contract to update the Organization URI. - * @param _uri The new URI for the Organization. - */ - function _setOrganizationURI(string memory _uri) internal virtual { - /// @dev Establish the URI used for the contract (Organization) metadata. - organizationURI = _uri; - - /// @dev Announce the URI change. - emit OrganizationUpdated(_uri); - } - - /** - * @notice Sets the URI for the Badge and emits event that URI was updated. - * @param _id The ID of the Badge. - * @param _uri The URI of the Badge. - */ - function _setBadgeURI(uint256 _id, string memory _uri) internal virtual { - /// @dev Set the URI of the Badge. - uris[_id] = _uri; - - /// @dev Announce the URI change for ERC1155 compliance. - emit URI(_uri, _id); - } - - /** - * @notice Runs enforcement logic before minting a token beyond the - * primary implementation of permissions. - * @dev Enables things such as Total Supply, Responsive Capacity, Etc. - * @param _operator The address of the operator. - * @param _to The address of the user. - * @param _id The id of the Badge. - * @param _amount The amount of the Badge to mint. - */ - function _mint( - address _operator, - address _to, - uint256 _id, - uint256 _amount, - bytes memory _data - ) internal virtual { - /// @dev Before minting, process any Organization hooks. - _hook(BEFORE_MINT, abi.encode(_operator, _to, _id, _amount, _data)); - - /// @dev Mint the Badge to the user. - ERC1155Upgradeable._mint(_to, _id, _amount, _data); - } - - /** - * @notice Revoke a Badge from a user. - * @dev Enables the ability to have condition specific revocation logic such as - * a time based revocation or preventing the act of all together. - * @param _from The address of the user. - * @param _id The id of the Badge. - * @param _amount The amount of the Badge to revoke. - */ - function _revoke( - address _operator, - address _from, - uint256 _id, - uint256 _amount - ) internal virtual { - /// @dev Before minting, process any Organization hooks. - _hook(BEFORE_REVOKE, abi.encode(_operator, _from, _id, _amount)); - - /// @dev Revoke the Badge from the user. - ERC1155Upgradeable._burn(_from, _id, _amount); - } - - /** - * @notice Burn the Badge from the user. - * @dev Enables the ability run exogenous logic before forfeiting a Badge. - * @param _from The address of the user. - * @param _id The id of the Badge. - * @param _amount The amount of the Badge to burn. - */ - function _forfeit( - address _from, - uint256 _id, - uint256 _amount - ) internal virtual { - /// @dev Before revoking, process any Organization hooks. - _hook(BEFORE_FORFEIT, abi.encode(_from, _id, _amount)); - - /// @dev Burn the Badge held by the user. - ERC1155Upgradeable._burn(_from, _id, _amount); - } - - /** - * See {ERC1155._beforeTokenTransfer} - * @dev Enables the ability to have modules such as Account Bound, etc. - */ - function _beforeTokenTransfer( - address _operator, - address _from, - address _to, - uint256[] memory _ids, - uint256[] memory _amounts, - bytes memory _data - ) internal virtual override { - /// @dev Before transferring, process any Organization hooks. - _hook( - BEFORE_TRANSFER, - abi.encode(_operator, _from, _to, _ids, _amounts, _data) - ); - - /// @dev Do not call the super as it is an empty function. - } - - //////////////////////////////////////////////////////// - /// INTERNAL GETTERS /// - //////////////////////////////////////////////////////// - - /* - * @notice Confirms whether this address is a Manager of the Organization or not. - * @param _address The address of the Manager to check. - * @return True if the address is a Manager of the Organization, false otherwise. - */ - function _isOrganizationManager(address _address) - internal - view - virtual - returns (bool) - { - /// @dev Confirm that the address is either the Owner of the contract or - /// a Manager of the Organization. - return (_address == owner() || - managerKeyToIsManager[_managerHash(_address)]); - } - - /** - * @notice Confirms whether this address is a Manager of the Badge or not. - * @param _id The id of the Badge to check. - * @param _address The address of the Manager to check. - * @return True if the address is a Manager of the Badge or Organization, false otherwise. - */ - function _isBadgeManager(uint256 _id, address _address) - internal - view - virtual - returns (bool) - { - /// @dev Confirm that the address is either a Manager of the Organization or - /// a Manager of the Badge. - return (_isOrganizationManager(_address) || - managerKeyToIsManager[_badgeManagerHash(_id, _address)]); - } - - /** - * @notice Calculates the hash that would be used for this sender pointer reference. - * @param _manager The address of the alleged Manager. - * @return The hash of the Manager. - */ - function _managerHash(address _manager) internal pure returns (bytes32) { - /// @dev Build the hash of the Manager. - return keccak256(abi.encode(_manager)); - } - - /** - * @notice Calculates the hash that would be used for this sender pointer reference. - * @param _id The id of the Badge. - * @param _manager The address of the alleged Manager. - * @return The hash of the Manager. - */ - function _badgeManagerHash(uint256 _id, address _manager) - internal - pure - returns (bytes32) - { - /// @dev Build the hash of the Manager. - return keccak256(abi.encode(_id, _manager)); - } -} diff --git a/contracts/contracts/Mocks/MockERC1155.sol b/contracts/contracts/Mocks/MockERC1155.sol new file mode 100644 index 0000000..3f6e273 --- /dev/null +++ b/contracts/contracts/Mocks/MockERC1155.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +import { ERC1155 } from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; + +contract MockERC1155 is + ERC1155 +{ + constructor( + string memory _uri + ) + ERC1155(_uri) + { } + + function mint( + address _to, + uint256 _id, + uint256 _amount, + bytes memory _data + ) + external + { + _mint( + _to, + _id, + _amount, + _data + ); + } +} \ No newline at end of file diff --git a/contracts/contracts/Mocks/MockERC20.sol b/contracts/contracts/Mocks/MockERC20.sol new file mode 100644 index 0000000..abc0ab2 --- /dev/null +++ b/contracts/contracts/Mocks/MockERC20.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract MockERC20 is + ERC20 +{ + constructor( + string memory _name, + string memory _symbol + ) + ERC20(_name, _symbol) + { } + + function mint( + address _to, + uint256 _amount + ) + external + { + _mint( + _to, + _amount + ); + } +} \ No newline at end of file diff --git a/contracts/contracts/Mocks/MockERC721.sol b/contracts/contracts/Mocks/MockERC721.sol new file mode 100644 index 0000000..9fdb1ee --- /dev/null +++ b/contracts/contracts/Mocks/MockERC721.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.16; + +import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +contract MockERC721 is + ERC721 +{ + constructor( + string memory _name, + string memory _symbol + ) + ERC721(_name, _symbol) + { } + + function mint( + address _to, + uint256 _id + ) + external + { + _mint( + _to, + _id + ); + } +} diff --git a/contracts/contracts/hooks/BadgerHook.sol b/contracts/contracts/hooks/BadgerHook.sol deleted file mode 100644 index 141ecde..0000000 --- a/contracts/contracts/hooks/BadgerHook.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -import {IBadgerHook} from "../interfaces/IBadgerHook.sol"; -import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; - -/** - * @dev Enforcement logic that keeps Hook quality consistent. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -abstract contract BadgerHook is IBadgerHook, ERC165 { - /** - * @dev See {ERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override - returns (bool) - { - return - interfaceId == type(IBadgerHook).interfaceId || - interfaceId == type(IBadgerConfigured).interfaceId || - super.supportsInterface(interfaceId); - } -} diff --git a/contracts/contracts/hooks/BadgerHooked.sol b/contracts/contracts/hooks/BadgerHooked.sol deleted file mode 100644 index 7c71443..0000000 --- a/contracts/contracts/hooks/BadgerHooked.sol +++ /dev/null @@ -1,184 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadgerHooked} from "../interfaces/IBadgerHooked.sol"; -import {BadgerNetwork} from "../BadgerNetwork.sol"; -import {Address} from "@openzeppelin/contracts/utils/Address.sol"; - -/// @dev Helper dependencies. -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; -import {IBadgerHook} from "../interfaces/IBadgerHook.sol"; - -/// @dev Libraries. -import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; - -/** - * @dev Every Badger Organization contact is built with the ability to hook into - * new core functionality as the consuming Organization and members evolve. - * With hooks, Organizations can utilize standardized or custom logic to - * extend the functionality of the Badger Organization simply by adding a - * hook contract to the Organization. - * @notice Compromises have been accepted in this Hook implementation to ignore - * several poorly written EIPs that do little but add burdened overhead. - * When the future is different and there is actually a network of - * consumption, things may be updated to be more compliant however - * for now, this is the best solution. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -abstract contract BadgerHooked is IBadgerHooked, BadgerNetwork { - using Address for address; - using EnumerableSet for EnumerableSet.AddressSet; - - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The hooks that are processed when a new hook is added. - bytes32 public constant BEFORE_SET_HOOK = keccak256("beforeSetHook"); - - /// @dev The hooks that are processed when a new Badge is minted. - bytes32 public constant BEFORE_MINT = keccak256("beforeMintingHook"); - - /// @dev The hooks that are processed when a Badge is revoked. - bytes32 public constant BEFORE_REVOKE = keccak256("beforeRevokingHook"); - - /// @dev The hooks that are processed when a Badge is forfeited. - bytes32 public constant BEFORE_FORFEIT = keccak256("beforeForfeitHook"); - - /// @dev The hooks that are processed when a Badge is transferred. - bytes32 public constant BEFORE_TRANSFER = keccak256("beforeTransferHook"); - - /// @dev The hooks that are processed when their triggers hit. - /// @notice Instead of needing to loop through all of the hooks, we can - /// just loop through the hooks that are registered for the - /// specific trigger without having to have a handle mechanism - /// for every type of hook. - /// @notice There is no quality enforcement on the hooks beyond a validating - /// the supplied address is a contract address due to the inherent - /// nature of suppporting multiple interfaces and functions from a - /// a single Hook Postman. - mapping(bytes32 => EnumerableSet.AddressSet) internal hooks; - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * @dev See {IBadgerOrganizationHooked-getHooks}. - */ - function getHooks(bytes32 _slot) - external - view - override - returns (address[] memory) - { - /// @dev Get the hooks for the specified slot. - EnumerableSet.AddressSet storage _hooks = hooks[_slot]; - - /// Load the stack. - uint256 i; - uint256 hooksLength = _hooks.length(); - - /// @dev Create an array to hold the hooks. - address[] memory _hookArray = new address[](hooksLength); - - /// @dev Loop through the hooks and add them to the array. - for (i; i < hooksLength; i++) { - _hookArray[i] = _hooks.at(i); - } - - /// @dev Return the array of hooks. - return _hookArray; - } - - //////////////////////////////////////////////////////// - /// INTERNAL SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @dev Update the state of hooks for a specified slot. - * @param _slot The slot to update. - * @param _slotHook The hook to add or remove. - * @param _isHook Whether or not the hook is active. - */ - function _setHook( - bytes32 _slot, - address _slotHook, - bool _isHook - ) internal { - /// @dev Confirm the hook being configured is a contract. - require( - _slotHook.isContract(), - "BadgerOrganizationHooked::_configManager: Manager is not a contract." - ); - - /// @dev Make sure the hook is a BadgerHook. - require( - IERC165(_slotHook).supportsInterface(type(IBadgerHook).interfaceId), - "BadgerHooks::_setHook: Hook does not implement IBadgerHook." - ); - - /// @dev If the hook is active, add it to the set. - if (_isHook) { - /// @dev Add the hook to the set. - hooks[_slot].add(_slotHook); - } else { - /// @dev If the hook is not active, remove it from the set. - hooks[_slot].remove(_slotHook); - } - - /// @dev Announce updates to the hooks. - emit HookUpdated(_slot, _slotHook, _isHook); - - /// @dev Run any hooks. - _hook(BEFORE_SET_HOOK, abi.encode(_slot, _slotHook, _isHook)); - } - - /** - * @notice Packs the logic for updating the state of a Hook into a reusable function. - * @param _targetHook The address of the Hook. - * @param _slot The slot the hook lives in. - * @param _config The configuration of the Hook. - */ - function _configHook( - address _targetHook, - bytes32 _slot, - bytes calldata _config - ) internal virtual { - /// @dev Make sure the hook is enabled. - require( - hooks[_slot].contains(_targetHook), - "BadgerOrganizationHooked::_configHook: Hook is not enabled." - ); - - /// @dev Announce the configuration of the hook. - emit HookConfigured(_slot, _config); - - /// @dev Configure the hook network object. - _configNetwork(_targetHook, _config); - } - - /** - * @dev Process the hooks for a specified slot. - * @param _slot The slot to process. - * @param _data The data to pass to the hooks. - */ - function _hook(bytes32 _slot, bytes memory _data) internal { - /// @dev Get the hooks for the slot. - address[] memory slotHooks = hooks[_slot].values(); - - /// @dev Load the stack. - uint256 i; - uint256 slotHooksLength = slotHooks.length; - - /// @dev Loop through the hooks and call them. - for (i; i < slotHooksLength; i++) { - /// @dev Make the execution call to the hook. - IBadgerHook(slotHooks[i]).execute(_data); - } - } -} diff --git a/contracts/contracts/hooks/forfeit/BadgerForfeitForbidden.sol b/contracts/contracts/hooks/forfeit/BadgerForfeitForbidden.sol deleted file mode 100644 index 04cbfa7..0000000 --- a/contracts/contracts/hooks/forfeit/BadgerForfeitForbidden.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerForfeitHook} from "../types/BadgerForfeitHook.sol"; - -/** - * @dev Hook module that prevents tokens from being forfeited. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerForfeitForbidden is BadgerForfeitHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,bool"; - - /// @dev Mapping of Organization to Badge Id to forfeit forbidden status. - mapping(address => mapping(uint256 => bool)) public forbidden; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, bool _isforbidden) = abi.decode(_data, (uint256, bool)); - - /// @dev Set the state of forfeit being `forbidden` for a Badge id. - forbidden[msg.sender][_id] = _isforbidden; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, uint256 _id, ) = abi.decode(_data, (address, uint256, uint256)); - - /// @dev Enforce the hook being processed is not blocklisted. - /// @notice Will not run when the hook is being disabled to bypass - /// a module that may be reverting or otherwise blocking. - require( - !forbidden[msg.sender][_id], - "BadgerForfeitForbidden::execute: Invalid permission to forfeit token." - ); - } -} diff --git a/contracts/contracts/hooks/hook/BadgerHookBlocklist.sol b/contracts/contracts/hooks/hook/BadgerHookBlocklist.sol deleted file mode 100644 index fa54f33..0000000 --- a/contracts/contracts/hooks/hook/BadgerHookBlocklist.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerHookHook} from "../types/BadgerHookHook.sol"; - -/** - * @dev Hook module that prevents certain hooks from being enabled. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerHookBlocklist is BadgerHookHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "address"; - - /// @dev Mapping of Organization to Hook to blocklisted status. - mapping(address => mapping(address => bool)) public blocked; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - address _hook = abi.decode(_data, (address)); - - /// @dev Forever lock away the hook from being enabled. - blocked[msg.sender][_hook] = true; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, address _slotHook, bool _isHook) = abi.decode( - _data, - (bytes32, address, bool) - ); - - /// @dev Enforce the hook being processed is not blocklisted. - /// @notice Will not run when the hook is being disabled to bypass - /// a module that may be reverting or otherwise blocking. - require( - !_isHook || !blocked[msg.sender][_slotHook], - "BadgerHookBlacklist::execute: Cannot enable blocklisted hook." - ); - } -} diff --git a/contracts/contracts/hooks/mint/BadgerMintMax.sol b/contracts/contracts/hooks/mint/BadgerMintMax.sol deleted file mode 100644 index 785fb24..0000000 --- a/contracts/contracts/hooks/mint/BadgerMintMax.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerMintHook} from "../types/BadgerMintHook.sol"; - -/** - * @dev Mint module that enforces a max mint per account for a Badge. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerMintMax is BadgerMintHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,uint256"; - - /// @dev Mapping of token addresses to accountBound status. - mapping(address => mapping(uint256 => uint256)) public maxMint; - - /// @dev Keep track of the number of tokens minted. - mapping(address => mapping(uint256 => mapping(address => uint256))) - public minted; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, uint256 _max) = abi.decode(_data, (uint256, uint256)); - - /// @dev Require the max to be greater than zero. - require( - _max != 0, - "BadgerMintMax::config: Max must be greater than zero." - ); - - /// @dev Set the max mint for the token. - maxMint[msg.sender][_id] = _max; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, address _to, uint256 _id, uint256 _amount, ) = abi.decode( - _data, - (address, address, uint256, uint256, bytes) - ); - - /// @dev Increment the minted amount. - minted[msg.sender][_id][_to] += _amount; - - /// @dev Ensure the minted amount is less than the set max. - require( - minted[msg.sender][_id][_to] <= maxMint[msg.sender][_id], - "BadgerMintMax::execute: Max mint reached." - ); - } -} diff --git a/contracts/contracts/hooks/mint/BadgerMintMaxAllowance.sol b/contracts/contracts/hooks/mint/BadgerMintMaxAllowance.sol deleted file mode 100644 index 0f5b426..0000000 --- a/contracts/contracts/hooks/mint/BadgerMintMaxAllowance.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerMintHook} from "../types/BadgerMintHook.sol"; - -/** - * @dev Mint module that enforces a max mint per operator for a Badge. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerMintMaxAllowance is BadgerMintHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,uint256"; - - /// @dev Mapping of token addresses to accountBound status. - mapping(address => mapping(uint256 => uint256)) public maxMint; - - /// @dev Keep track of the number of tokens minted. - mapping(address => mapping(uint256 => mapping(address => uint256))) - public minted; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, uint256 _max) = abi.decode(_data, (uint256, uint256)); - - /// @dev Require the max to be greater than zero. - require( - _max != 0, - "BadgerMintMaxAllowance::config: Max must be greater than zero." - ); - - /// @dev Set the max mint for the token. - maxMint[msg.sender][_id] = _max; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (address _operator, , uint256 _id, uint256 _amount, ) = abi.decode( - _data, - (address, address, uint256, uint256, bytes) - ); - - /// @dev Increment the minted amount. - minted[msg.sender][_id][_operator] += _amount; - - /// @dev Ensure the minted amount is less than the set max. - require( - minted[msg.sender][_id][_operator] <= maxMint[msg.sender][_id], - "BadgerMintMaxAllowance::execute: Max mint reached." - ); - } -} diff --git a/contracts/contracts/hooks/mint/BadgerMintMaxSupply.sol b/contracts/contracts/hooks/mint/BadgerMintMaxSupply.sol deleted file mode 100644 index 19ef20c..0000000 --- a/contracts/contracts/hooks/mint/BadgerMintMaxSupply.sol +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerMintHook} from "../types/BadgerMintHook.sol"; - -/** - * @dev Mint module that enforces a max supply for a Badge. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerMintMaxSupply is BadgerMintHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,uint256"; - - /// @dev Mapping of Organization address to Badge Id to Max Supply. - mapping(address => mapping(uint256 => uint256)) public maxSupply; - - /// @dev Keep track of the number of tokens minted. - mapping(address => mapping(uint256 => uint256)) public totalSupply; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, uint256 _maxSupply) = abi.decode( - _data, - (uint256, uint256) - ); - - /// @dev Require the max to be greater than zero. - require( - _maxSupply > totalSupply[msg.sender][_id], - "BadgerMintMaxSupply::config: Max must be greater than the already minted supply." - ); - - /// @dev Set the max supply for the token. - maxSupply[msg.sender][_id] = _maxSupply; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, , uint256 _id, uint256 _amount, ) = abi.decode( - _data, - (address, address, uint256, uint256, bytes) - ); - - /// @dev Add the newly minted amount to the total supply. - totalSupply[msg.sender][_id] += _amount; - - /// @dev Ensure the max supply has not been exceeded. - require( - totalSupply[msg.sender][_id] <= maxSupply[msg.sender][_id], - "BadgerMintMaxSupply::execute: Max supply exceeded." - ); - } -} diff --git a/contracts/contracts/hooks/mint/BadgerMintSelf.sol b/contracts/contracts/hooks/mint/BadgerMintSelf.sol deleted file mode 100644 index 4e8953f..0000000 --- a/contracts/contracts/hooks/mint/BadgerMintSelf.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerMintHook} from "../types/BadgerMintHook.sol"; - -/** - * @dev Mint module that enforces self-operation logic only preventing - * a user from minting a token to another address. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerMintSelf is BadgerMintHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,bool"; - - /// @dev Mapping of token addresses to accountBound status. - mapping(address => mapping(uint256 => bool)) public selfOperated; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, bool _selfOperated) = abi.decode(_data, (uint256, bool)); - - /// @dev Set the state of self-operation only for the token. - selfOperated[msg.sender][_id] = _selfOperated; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (address _operator, address _to, uint256 _id, , ) = abi.decode( - _data, - (address, address, uint256, uint256, bytes) - ); - - /// @dev Ensure the token is not being minted to another address - /// if self-operation is enabled. - require( - _operator == _to || !selfOperated[msg.sender][_id], - "BadgerMintSelfOperated::execute: Only mint to self" - ); - } -} diff --git a/contracts/contracts/hooks/revoke/BadgerRevokeForbidden.sol b/contracts/contracts/hooks/revoke/BadgerRevokeForbidden.sol deleted file mode 100644 index 8115f33..0000000 --- a/contracts/contracts/hooks/revoke/BadgerRevokeForbidden.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerRevokeHook} from "../types/BadgerRevokeHook.sol"; - -/** - * @dev Hook module that prevents tokens from being revokeed. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerRevokeForbidden is BadgerRevokeHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,bool"; - - /// @dev Mapping of Organization to Badge Id to revoke forbidden status. - mapping(address => mapping(uint256 => bool)) public forbidden; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, bool _isforbidden) = abi.decode(_data, (uint256, bool)); - - /// @dev Set the state of revoke being `forbidden` for a Badge id. - forbidden[msg.sender][_id] = _isforbidden; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, , uint256 _id, ) = abi.decode( - _data, - (address, address, uint256, uint256) - ); - - /// @dev Enforce the token being revoked has not been forbidden. - require( - !forbidden[msg.sender][_id], - "BadgerRevokeForbidden::execute: Invalid permission to revoke token." - ); - } -} diff --git a/contracts/contracts/hooks/transfer/BadgerTransferBlocklist.sol b/contracts/contracts/hooks/transfer/BadgerTransferBlocklist.sol deleted file mode 100644 index 7e11941..0000000 --- a/contracts/contracts/hooks/transfer/BadgerTransferBlocklist.sol +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerTransferHook} from "../types/BadgerTransferHook.sol"; - -/** - * @dev Transfer module that enforces prevents an Organization - * Badge from being transferred to certain addresses. - * @notice The `bool` is included in the decoded config to prevent - * disastorous states when Marketplaces inevitably change. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerTransferBlocklist is BadgerTransferHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "address,bool"; - - /// @dev Mapping of token addresses to accountBound status. - mapping(address => mapping(address => bool)) public blocked; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (address _target, bool _blocked) = abi.decode(_data, (address, bool)); - - /// @dev Set the receiving state for the token. - blocked[msg.sender][_target] = _blocked; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, , address _to, , , ) = abi.decode( - _data, - (address, address, address, uint256[], uint256[], bytes) - ); - - /// @dev Loop through all of the tokens moving. - require( - !blocked[msg.sender][_to], - "BadgerTransferBlocklist::execute: Invalid permission to transfer token." - ); - } -} diff --git a/contracts/contracts/hooks/transfer/BadgerTransferBound.sol b/contracts/contracts/hooks/transfer/BadgerTransferBound.sol deleted file mode 100644 index fdbb84d..0000000 --- a/contracts/contracts/hooks/transfer/BadgerTransferBound.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerTransferHook} from "../types/BadgerTransferHook.sol"; - -/** - * @dev Transfer module that enforces accountBound logic. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerTransferBound is BadgerTransferHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,bool"; - - /// @dev Mapping of token addresses to accountBound status. - mapping(address => mapping(uint256 => bool)) public accountBound; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, bool _accountBound) = abi.decode(_data, (uint256, bool)); - - /// @dev Set the accountBound status for the token. - accountBound[msg.sender][_id] = _accountBound; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - (, address _from, address _to, uint256[] memory _ids, , ) = abi.decode( - _data, - (address, address, address, uint256[], uint256[], bytes) - ); - - /// @dev Load the stack. - uint256 i; - uint256 idsLength = _ids.length; - bool isZero = _from == address(0) || _to == address(0); - - /// @dev Loop through all of the tokens moving. - for (i; i < idsLength; i++) { - /// @dev Require the transfer to be from or to the zero address. - require( - isZero || - !accountBound[msg.sender][_ids[i]], - "BadgerTransferBound::execute: Invalid permission to transfer token." - ); - } - } -} diff --git a/contracts/contracts/hooks/transfer/BadgerTransferBoundManaged.sol b/contracts/contracts/hooks/transfer/BadgerTransferBoundManaged.sol deleted file mode 100644 index 7ee325e..0000000 --- a/contracts/contracts/hooks/transfer/BadgerTransferBoundManaged.sol +++ /dev/null @@ -1,83 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Consumer dependencies. -import {BadgerOrganizationLogic} from "../../BadgerOrganizationLogic.sol"; - -/// @dev Core dependencies. -import {BadgerTransferHook} from "../types/BadgerTransferHook.sol"; - -/** - * @dev Transfer module that enforces accountBound logic that can be - * overridden by Badge Managers. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerTransferBoundManaged is BadgerTransferHook { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,bool"; - - /// @dev Mapping of token addresses to accountBound status. - mapping(address => mapping(uint256 => bool)) public accountBound; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerHook-config}. - */ - function config(bytes calldata _data) public virtual override { - /// @dev Decode the configuration data forwarded from the Organization. - (uint256 _id, bool _accountBound) = abi.decode(_data, (uint256, bool)); - - /// @dev Set the accountBound status for the token. - accountBound[msg.sender][_id] = _accountBound; - } - - /** - * See {IBadgerHook-execute}. - */ - function execute(bytes calldata _data) public virtual override { - /// @dev Decode the transfer data forwarded from the Organization. - ( - address _operator, - address _from, - address _to, - uint256[] memory _ids, - , - - ) = abi.decode( - _data, - (address, address, address, uint256[], uint256[], bytes) - ); - - /// @dev Load the stack. - uint256 i; - uint256 id; - uint256 idsLength = _ids.length; - bool isZero = _from == address(0) || _to == address(0); - - /// @dev Loop through all of the tokens moving. - for (i; i < idsLength; i++) { - /// @dev Load the token ID. - id = _ids[i]; - - /// @dev Require the transfer to be from or to the zero address. - require( - isZero || - !accountBound[msg.sender][id] || - BadgerOrganizationLogic(msg.sender).isBadgeManager( - id, - _operator - ), - "BadgerTransferBoundManaged::execute: Invalid permission to transfer token." - ); - } - } -} diff --git a/contracts/contracts/hooks/types/BadgerForfeitHook.sol b/contracts/contracts/hooks/types/BadgerForfeitHook.sol deleted file mode 100644 index 7dc9e51..0000000 --- a/contracts/contracts/hooks/types/BadgerForfeitHook.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerHook} from "../BadgerHook.sol"; - -abstract contract BadgerForfeitHook is BadgerHook { - /// @dev The schema used for the execute method. - string public constant override EXECUTE_SCHEMA = "address,uint256,uint256"; -} diff --git a/contracts/contracts/hooks/types/BadgerHookHook.sol b/contracts/contracts/hooks/types/BadgerHookHook.sol deleted file mode 100644 index a3a60df..0000000 --- a/contracts/contracts/hooks/types/BadgerHookHook.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerHook} from "../BadgerHook.sol"; - -abstract contract BadgerHookHook is BadgerHook { - /// @dev The schema used for the execute method. - string public constant override EXECUTE_SCHEMA = "bytes32,address,bool"; -} diff --git a/contracts/contracts/hooks/types/BadgerMintHook.sol b/contracts/contracts/hooks/types/BadgerMintHook.sol deleted file mode 100644 index 12d67a4..0000000 --- a/contracts/contracts/hooks/types/BadgerMintHook.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerHook} from "../BadgerHook.sol"; - -abstract contract BadgerMintHook is BadgerHook { - /// @dev The schema used for the execute method. - string public constant override EXECUTE_SCHEMA = - "address,address,uint256,uint256,bytes"; -} diff --git a/contracts/contracts/hooks/types/BadgerRevokeHook.sol b/contracts/contracts/hooks/types/BadgerRevokeHook.sol deleted file mode 100644 index 97c9f38..0000000 --- a/contracts/contracts/hooks/types/BadgerRevokeHook.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerHook} from "../BadgerHook.sol"; - -abstract contract BadgerRevokeHook is BadgerHook { - /// @dev The schema used for the execute method. - string public constant override EXECUTE_SCHEMA = - "address,address,uint256,uint256"; -} diff --git a/contracts/contracts/hooks/types/BadgerTransferHook.sol b/contracts/contracts/hooks/types/BadgerTransferHook.sol deleted file mode 100644 index 301154f..0000000 --- a/contracts/contracts/hooks/types/BadgerTransferHook.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerHook} from "../BadgerHook.sol"; - -abstract contract BadgerTransferHook is BadgerHook { - /// @dev The schema used for the execute method. - string public constant override EXECUTE_SCHEMA = - "address,address,address,uint256[],uint256[],bytes"; -} diff --git a/contracts/contracts/interfaces/IBadger.sol b/contracts/contracts/interfaces/IBadger.sol deleted file mode 100644 index 8379627..0000000 --- a/contracts/contracts/interfaces/IBadger.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Factory output. -import {BadgerOrganization} from "../BadgerOrganization.sol"; - -/// @dev Core dependencies. -import {IBadgerOrganizationStruct} from "./IBadgerOrganizationStruct.sol"; - -interface IBadger is IBadgerOrganizationStruct { - //////////////////////////////////////////////////////// - /// EVENTS /// - //////////////////////////////////////////////////////// - - /// @dev Announce when a new organization has been deployed. - event OrganizationCreated( - BadgerOrganization indexed organization, - address indexed owner, - uint256 indexed organizationId - ); - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @dev Deploy a new Badger Organization based on the provided `_organizationStruct`. - * @param _organizationStruct The Organization struct containing the details of the new Organization. - * @return badgerOrganization The newly deployed Organization contract. - * @return organizationId The `organizationId` of the newly deployed Organization. - */ - function createOrganization(Organization calldata _organizationStruct) - external - returns (BadgerOrganization badgerOrganization, uint256 organizationId); - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * @dev Determine the address of an Organization contract given its `organizationId`. - * @param _organizationId The `organizationId` of the Organization. - * @return The Organization contract that is deployed on the provided `organizationId`. - */ - function getOrganization(uint256 _organizationId) - external - view - returns (BadgerOrganization); -} diff --git a/contracts/contracts/interfaces/IBadgerConfigured.sol b/contracts/contracts/interfaces/IBadgerConfigured.sol deleted file mode 100644 index f9fccaf..0000000 --- a/contracts/contracts/interfaces/IBadgerConfigured.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/** - * @notice Interface for a Badger Hook that can be configured and executed. - * @dev It is critical to understand that Hooks should only ever be configured - * and executed by their consumer. Under no circumstances should anyone - * ever directly interact with a hook, and if you build a protocol with - * expectation of things working a certain way, you should always test. - * AGAIN, DO NOT DIRECTLY INTERACT WITH HOOKS IT IS NOT SUPPORTED. - */ -interface IBadgerConfigured { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - function CONFIG_SCHEMA() external view returns (string memory); - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Configure the Hook. - * @param _data The data to configure the Hook. - */ - function config(bytes calldata _data) external; -} diff --git a/contracts/contracts/interfaces/IBadgerHook.sol b/contracts/contracts/interfaces/IBadgerHook.sol deleted file mode 100644 index b3543bf..0000000 --- a/contracts/contracts/interfaces/IBadgerHook.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadgerConfigured} from "./IBadgerConfigured.sol"; - -/** - * @notice Interface for a Badger Hook that can be configured and executed. - * @dev It is critical to understand that Hooks should only ever be configured - * and executed by their consumer. Under no circumstances should anyone - * ever directly interact with a hook, and if you build a protocol with - * expectation of things working a certain way, you should always test. - * AGAIN, DO NOT DIRECTLY INTERACT WITH HOOKS IT IS NOT SUPPORTED. - */ -interface IBadgerHook is IBadgerConfigured { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - function EXECUTE_SCHEMA() external view returns (string memory); - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Execute the Hook. - * @param _data The data to execute the Hook. - */ - function execute(bytes calldata _data) external; -} diff --git a/contracts/contracts/interfaces/IBadgerHooked.sol b/contracts/contracts/interfaces/IBadgerHooked.sol deleted file mode 100644 index 2108800..0000000 --- a/contracts/contracts/interfaces/IBadgerHooked.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -interface IBadgerHooked { - //////////////////////////////////////////////////////// - /// EVENTS /// - //////////////////////////////////////////////////////// - - /// @dev Event that announces when a hook is updated. - event HookUpdated(bytes32 indexed hookKey, address, bool indexed isHook); - - /// @dev Event that announces when the config of a hook changes. - event HookConfigured(bytes32 indexed hookKey, bytes data); - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * @dev Returns the hooks for a given slot. - * @param _slot The slot to get hooks for. - * @return The hooks for the given slot. - */ - function getHooks(bytes32 _slot) external view returns (address[] memory); -} diff --git a/contracts/contracts/interfaces/IBadgerManaged.sol b/contracts/contracts/interfaces/IBadgerManaged.sol deleted file mode 100644 index 8e57177..0000000 --- a/contracts/contracts/interfaces/IBadgerManaged.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -interface IBadgerManaged { - //////////////////////////////////////////////////////// - /// EVENTS /// - //////////////////////////////////////////////////////// - - /// @dev Event that announces when the state of a Manager changes. - event ManagerUpdated(bytes32 indexed managerKey, bool indexed isManager); - - /// @dev Event that announces when the config of a Manager changes. - event ManagerConfigured(bytes32 indexed managerKey, bytes data); -} diff --git a/contracts/contracts/interfaces/IBadgerOrganization.sol b/contracts/contracts/interfaces/IBadgerOrganization.sol deleted file mode 100644 index 877b1ee..0000000 --- a/contracts/contracts/interfaces/IBadgerOrganization.sol +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.16; - -interface IBadgerOrganization { - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - /** - * @dev Allows a Manager of a Badge to mint to a user. - * @param _to The address to mint the Badge to. - * @param _id The id of the Badge to mint. - * @param _amount The amount of the Badge to mint. - * @param _data The data to pass to the receiver. - * - * Requirements: - * - `_msgSender` must be a Manager of the Badge or Organization. - */ - function mint( - address _to, - uint256 _id, - uint256 _amount, - bytes memory _data - ) external; - - /** - * @notice Allows a Manager of a Badge to mint a batch of recipients in a single transaction, - * enabling the ability to seamlessly roll out a new "season" with a single batch - * instead of needing hundreds of individual events. Because of this common use case, - * the constant is designed around the _id rather than the _to address. - * @param _tos The addresses to mint the Badge to. - * @param _id The id of the Badge to mint. - * @param _amounts The amounts of the Badge to mint. - * @param _data The data to pass to the receiver. - * - * Requirements: - * - `_msgSender` must be a Manager of the Badge or Organization. - */ - function mintBatch( - address[] memory _tos, - uint256 _id, - uint256[] memory _amounts, - bytes memory _data - ) external; - - /** - * @notice Allows a Manager of a Badge to revoke a Badge from a user. - * @param _from The address to revoke the Badge from. - * @param _id The id of the Badge to revoke. - * @param _amount The amount of the Badge to revoke. - * - * Requirements: - * - `_msgSender` must be a Manager of the Badge or Organization. - */ - function revoke( - address _from, - uint256 _id, - uint256 _amount - ) external; - - /** - * @notice Allows a Manager to revoke Badges from a user. - * @param _froms The addresses to revoke the Badge from. - * @param _id The id of the Badge to revoke. - * @param _amounts The amount of the Badge to revoke. - * - * Requirements: - * - `_msgSender` must be a Manager of the Badge or Organization. - */ - function revokeBatch( - address[] memory _froms, - uint256 _id, - uint256[] memory _amounts - ) external; - - /** - * @notice Allows the owner of a Badge to forfeit their ownership. - * @param _id The id of the Badge to forfeit. - * @param _amount The amount of the Badge to forfeit. - * @param _data The data to pass to the receiver. - */ - function forfeit( - uint256 _id, - uint256 _amount, - bytes memory _data - ) external; -} diff --git a/contracts/contracts/interfaces/IBadgerOrganizationLogic.sol b/contracts/contracts/interfaces/IBadgerOrganizationLogic.sol deleted file mode 100644 index d8e8f19..0000000 --- a/contracts/contracts/interfaces/IBadgerOrganizationLogic.sol +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadgerOrganizationStruct} from "./IBadgerOrganizationStruct.sol"; - -interface IBadgerOrganizationLogic is IBadgerOrganizationStruct { - //////////////////////////////////////////////////////// - /// EVENTS /// - //////////////////////////////////////////////////////// - - /// @dev Event that announces when the Organization is updated. - event OrganizationUpdated(string organizationURI); - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Set the URI for the Organization. - * @param _uri The URI for the Organization. - */ - function setOrganizationURI(string memory _uri) external; - - /** - * @notice Set the URI for a Badge. - * @param _uri The URI for the Badge. - * - * Requirements: - * - `_msgSender` must be a Manager of the Badge or Organization. - * - `_uri` cannot be empty. - */ - function setBadgeURI(uint256 _id, string memory _uri) external; - - /** - * @notice Allow the Owner of the Organization to control Organization Managers. - * @param _managers The addresses of the Managers to update. - * @param _isManager The status of the Managers being updated. - * - * Requirements: - * - `_msgSender` must be the Organization Owner. - */ - function setManagers( - address[] calldata _managers, - bool[] calldata _isManager - ) external; - - /** - * @notice Allow Organization Managers to control Badge Managers. - * @param _id The id of the Badge. - * @param _managers The addresses of the Managers to update. - * @param _isManager The status of the Managers being updated. - * - * Requirements: - * - `_msgSender` must be an Organization Manager or Owner. - */ - function setManagers( - uint256 _id, - address[] calldata _managers, - bool[] calldata _isManager - ) external; - - /** - * @notice Allow Organization Managers to configure Organization Hooks. - * @dev The slot is used to differentiate between different types of hooks. - * @param _slot The slot of the hook. - * @param _hooks The addresses of the hooks to update. - * @param _isHook The status of the hooks being updated. - */ - function setHooks( - bytes32 _slot, - address[] calldata _hooks, - bool[] calldata _isHook - ) external; - - /** - * @notice Allow Organization Managers to configure Organization Managers. - * @param _manager The address of the Manager to update. - * @param _data The data to configure the Manager with. - */ - function configManager(address _manager, bytes calldata _data) external; - - /** - * @notice Allow Organization Managers to configure Badge Managers. - * @param _id The id of the Badge. - * @param _manager The address of the Manager to update. - * @param _data The data to configure the Manager with. - */ - function configManager( - uint256 _id, - address _manager, - bytes calldata _data - ) external; - - /** - * @notice Allow Organization Managers to configure Organization Hooks. - * @dev The slot is used to differentiate between different types of hooks. - * @param _slot The slot of the hook. - * @param _hook The address of the hook to update. - * @param _data The data to configure the hook with. - */ - function configHook( - bytes32 _slot, - address _hook, - bytes calldata _data - ) external; - - //////////////////////////////////////////////////////// - /// GETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Determine if an address is an Organization Manager. - * @param _manager The address to check. - * @return True if the address is an Organization Manager, otherwise false. - */ - function isOrganizationManager(address _manager) - external - view - returns (bool); - - /** - * @notice Determine if an address is a Badge Manager. - * @param _id The id of the Badge. - * @param _manager The address to check. - * @return True if the address is a Badge Manager, otherwise false. - */ - function isBadgeManager(uint256 _id, address _manager) - external - view - returns (bool); -} diff --git a/contracts/contracts/interfaces/IBadgerOrganizationStruct.sol b/contracts/contracts/interfaces/IBadgerOrganizationStruct.sol deleted file mode 100644 index c2d3086..0000000 --- a/contracts/contracts/interfaces/IBadgerOrganizationStruct.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -interface IBadgerOrganizationStruct { - //////////////////////////////////////////////////////// - /// SCHEMA /// - //////////////////////////////////////////////////////// - - struct Organization { - address deployer; - string uri; - string organizationURI; - string name; - string symbol; - } -} diff --git a/contracts/contracts/managers/BadgerManaged.sol b/contracts/contracts/managers/BadgerManaged.sol deleted file mode 100644 index 3ca4a07..0000000 --- a/contracts/contracts/managers/BadgerManaged.sol +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadgerManaged} from "../interfaces/IBadgerManaged.sol"; -import {BadgerNetwork} from "../BadgerNetwork.sol"; -import {Address} from "@openzeppelin/contracts/utils/Address.sol"; - -/// @dev Helper dependencies. -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; - -import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; - -contract BadgerManaged is IBadgerManaged, BadgerNetwork { - using Address for address; - - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev Tracking the Managers of a Badge. - mapping(bytes32 => bool) public managerKeyToIsManager; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * @notice Packs the logic for updating the state of a Manager into a reusable function. - * @dev The key is a `keccak256` hash of the address of the Manager. - * @param _key The key used to identify the Manager. - * @param _isManager The state of the Manager. - */ - function _setManager(bytes32 _key, bool _isManager) internal virtual { - /// @dev Save the Manager state based on the encoded key. - managerKeyToIsManager[_key] = _isManager; - - /// @dev Announce the change of Manager state. - emit ManagerUpdated(_key, _isManager); - } - - /** - * @notice Packs the logic for updating the config of a Manager into a reusable function. - * @param _manager The address of the Manager. - * @param _key The key used to identify the Manager. - * @param _config The configuration of the Manager. - */ - function _configManager( - address _manager, - bytes32 _key, - bytes calldata _config - ) internal virtual { - /// @dev Confirm the manager is active. - require( - managerKeyToIsManager[_key], - "BadgerOrganizationHooked::_configManager: Manager is not enabled." - ); - - /// @dev Confirm the manager being configured is a contract. - require( - _manager.isContract(), - "BadgerOrganizationHooked::_configManager: Manager is not a contract." - ); - - /// @dev Confirm the address is a configured badger module. - require( - IERC165(_manager).supportsInterface( - type(IBadgerConfigured).interfaceId - ), - "BadgerOrganizationHooked::_configManager: Manager is not a configured Badger module." - ); - - /// @dev Announce the configuration of the manager. - emit ManagerConfigured(_key, _config); - - /// @dev Configure the manager network object. - _configNetwork(_manager, _config); - } -} diff --git a/contracts/contracts/managers/BadgerManager.sol b/contracts/contracts/managers/BadgerManager.sol deleted file mode 100644 index 0b61ee6..0000000 --- a/contracts/contracts/managers/BadgerManager.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {IBadgerConfigured} from "../interfaces/IBadgerConfigured.sol"; -import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; - -abstract contract BadgerManager is IBadgerConfigured, ERC165 { - /** - * @dev See {ERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override - returns (bool) - { - return - interfaceId == type(IBadgerConfigured).interfaceId || - super.supportsInterface(interfaceId); - } -} diff --git a/contracts/contracts/managers/BadgerManagerClaimable.sol b/contracts/contracts/managers/BadgerManagerClaimable.sol deleted file mode 100644 index 3e011e8..0000000 --- a/contracts/contracts/managers/BadgerManagerClaimable.sol +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerManager} from "./BadgerManager.sol"; -import {BadgerOrganization} from "../BadgerOrganization.sol"; - -/** - * @dev Implements the ability for individuals to claim Badges with an open - * link to the Organization. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerManagerClaimable is BadgerManager { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,uint256"; - - /// @dev Keep track of the amount of the Badge to mint with each claim. - mapping(address => mapping(uint256 => uint256)) public amounts; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerConfigured-config}. - */ - function config(bytes calldata _data) public virtual { - /// @dev Decode the config data forwarded from the Organization. - (uint256 _id, uint256 _amount) = abi.decode(_data, (uint256, uint256)); - - require( - _amount != 0, - "BadgerManagerClaimable::config: Amount must be greater than zero." - ); - - /// @dev Set the amount of the Badge to mint with each claim. - amounts[msg.sender][_id] = _amount; - } - - /** - * @dev Sets a new Badge as an open claim. - * @param _targetOrganization The Organization to mint the Badge for. - * @param _id The ID of the Badge to mint. - * @param _data The data to pass to the mint method. - */ - function mint( - address _targetOrganization, - uint256 _id, - bytes calldata _data - ) external { - /// @dev Mint a new badge for the organization. - BadgerOrganization(_targetOrganization).mint( - msg.sender, - _id, - amounts[msg.sender][_id], - _data - ); - } -} diff --git a/contracts/contracts/managers/BadgerManagerPaidERC1155.sol b/contracts/contracts/managers/BadgerManagerPaidERC1155.sol deleted file mode 100644 index 40c558a..0000000 --- a/contracts/contracts/managers/BadgerManagerPaidERC1155.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; \ No newline at end of file diff --git a/contracts/contracts/managers/BadgerManagerPaidERC20.sol b/contracts/contracts/managers/BadgerManagerPaidERC20.sol deleted file mode 100644 index 40c558a..0000000 --- a/contracts/contracts/managers/BadgerManagerPaidERC20.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; \ No newline at end of file diff --git a/contracts/contracts/managers/BadgerManagerPaidERC721.sol b/contracts/contracts/managers/BadgerManagerPaidERC721.sol deleted file mode 100644 index 40c558a..0000000 --- a/contracts/contracts/managers/BadgerManagerPaidERC721.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; \ No newline at end of file diff --git a/contracts/contracts/managers/BadgerManagerPaidNative.sol b/contracts/contracts/managers/BadgerManagerPaidNative.sol deleted file mode 100644 index 11d6d30..0000000 --- a/contracts/contracts/managers/BadgerManagerPaidNative.sol +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -// TODO: Enable the ability for minting a token when caller pays the specified amount. \ No newline at end of file diff --git a/contracts/contracts/managers/BadgerManagerSignature.sol b/contracts/contracts/managers/BadgerManagerSignature.sol deleted file mode 100644 index 836644d..0000000 --- a/contracts/contracts/managers/BadgerManagerSignature.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-or-later - -pragma solidity ^0.8.16; - -/// @dev Core dependencies. -import {BadgerManager} from "./BadgerManager.sol"; -import {BadgerOrganization} from "../BadgerOrganization.sol"; - -/// @dev Helper dependencies. -import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; - -/** - * @dev Implements the ability for individuals to mint Badges with a - * valid signature from the signer of the Badge. - * @author CHANCE (@nftchance) - * @author masonthechain (@masonthechain) - */ -contract BadgerManagerSignature is BadgerManager { - //////////////////////////////////////////////////////// - /// STATE /// - //////////////////////////////////////////////////////// - - /// @dev The schema used for the config method. - string public constant override CONFIG_SCHEMA = "uint256,address"; - - /// @dev Keep track of the signer for minting a Badge. - mapping(address => mapping(uint256 => address)) public signers; - - /// @dev Tracking the nonce of each wallet that could have a valid signature. - mapping(address => uint256) nonces; - - //////////////////////////////////////////////////////// - /// SETTERS /// - //////////////////////////////////////////////////////// - - /** - * See {IBadgerConfigured-config}. - */ - function config(bytes calldata _data) public virtual { - /// @dev Decode the config data forwarded from the Organization. - (uint256 _id, address _signer) = abi.decode(_data, (uint256, address)); - - /// @dev Set the signer for minting a Badge. - signers[msg.sender][_id] = _signer; - } - - /** - * @dev Allows individuals to mint a Badge with a valid signature. - * @param _targetOrganization The Organization to mint the Badge for. - * @param _id The ID of the Badge to mint. - * @param _amount The amount of the Badge to mint. - * @param _data The data to pass to the mint method. - * @param _signature The signature to validate. - * @param _nonce The nonce to validate. - * @param _deadline The deadline to validate. - */ - function mint( - address _targetOrganization, - uint256 _id, - uint256 _amount, - bytes calldata _data, - bytes calldata _signature, - uint256 _nonce, - uint256 _deadline - ) external { - /// @dev Confirm the signature has not expired. - require( - _deadline >= block.timestamp, - "BadgerManagerSignature::mint: Signature expired." - ); - - /// @dev Confirm the nonce is equal to the value + 1. - require( - _nonce == nonces[msg.sender]++, - "BadgerManagerSignature::mint: Invalid nonce." - ); - - /// @dev Recover the signer from the signature. - bytes32 message = keccak256( - abi.encodePacked( - msg.sender, - _id, - _amount, - _nonce, - _deadline, - _targetOrganization - ) - ); - - /// @dev Hash the message. - bytes32 hash = ECDSA.toEthSignedMessageHash(message); - - /// @dev Recover the signer. - address signer = ECDSA.recover(hash, _signature); - - /// @dev Validate the signer. - require( - signer == signers[_targetOrganization][_id], - "BadgerManagerSignature::mint: Invalid signer." - ); - - /// @dev Mint a new badge for the organization. - BadgerOrganization(_targetOrganization).mint( - msg.sender, - _id, - _amount, - _data - ); - } -} diff --git a/contracts/example.env b/contracts/example.env new file mode 100644 index 0000000..60ad58e --- /dev/null +++ b/contracts/example.env @@ -0,0 +1,3 @@ +POLYGON_PRIVATE_KEY="" +ETHEREUM_PRIVATE_KEY="" +ALCHEMY_API_KEY="" \ No newline at end of file diff --git a/contracts/hardhat.config.js b/contracts/hardhat.config.js index c424691..c125f55 100644 --- a/contracts/hardhat.config.js +++ b/contracts/hardhat.config.js @@ -3,24 +3,12 @@ require('hardhat-deploy'); require("hardhat-watcher"); require("hardhat-tracer"); require("hardhat-abi-exporter"); +require("hardhat-api-builder"); +require("hardhat-docgen"); +require("@nomiclabs/hardhat-waffle"); require("@nomiclabs/hardhat-etherscan"); require('solidity-coverage'); -require('@nomicfoundation/hardhat-chai-matchers') require("dotenv").config(); -require("@typechain/hardhat"); - -// All of these keys have been knowingly leaked to make the startup process easier for new onboards. -// Do not use any of these keys in production. -const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY; -const POLYGONSCAN_API_KEY = process.env.POLYGONSCAN_API_KEY; -const COINMARKETCAP_API_KEY = process.env.COINMARKETCAP_API_KEY; -const PRIVATE_KEY_ACCOUNTS = [process.env.PRIVATE_KEY]; - -const mining = process.env.MINING === 'true' ? { auto: true } : { - auto: false, - order: 'fifo', - interval: 500, -} task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { const accounts = await hre.ethers.getSigners(); @@ -33,48 +21,41 @@ task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { task("deploy", "Deploys the protocol") .addFlag("verify", "Verify the deployed contracts on Etherscan") .setAction(async (taskArgs, hre) => { - const chainId = await getChainId(); - - // Run a local node if we are on the hardhat network - if (chainId === '1337') hre.run('node'); - // Compiling all of the contracts again just in case await hre.run('compile'); const [deployer] = await ethers.getSigners(); - const balance = ethers.utils.formatEther(await deployer.getBalance()); + console.log(`✅ Connected to ${deployer.address}`); - console.table({ - "Deployer Address": deployer.address, - "Deployer Balance": balance, - }) + const chainId = await getChainId() - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - badgerSingleton = await BadgerSingleton.deploy(); - badgerSingleton = await badgerSingleton.deployed(); - console.log("✅ Organization Implementation Deployed."); + // Deploying the primitive master BadgerOrganization contract that is used for clones + const BadgerOrganization = await ethers.getContractFactory("BadgerOrganization"); + organizationMaster = await BadgerOrganization.deploy(); + organizationMaster = await organizationMaster.deployed(); + console.log("✅ Organization Implementation Deployed.") organizationDeployment = { "Chain ID": chainId, "Deployer": deployer.address, - "Organization Implementation Address": badgerSingleton.address, + "Organization Implementation Address": organizationMaster.address, "Remaining ETH Balance": parseInt((await deployer.getBalance()).toString()) / 1000000000000000000, - }; - console.table(organizationDeployment); + } + console.table(organizationDeployment) // Deploy the protocol - const BadgerFactory = await ethers.getContractFactory("Badger"); - badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - badgerFactory = await badgerFactory.deployed(); - console.log("✅ Badger Deployed."); + const Badger = await ethers.getContractFactory("Badger"); + badger = await Badger.deploy(organizationMaster.address); + badger = await badger.deployed(); + console.log("✅ Badger Deployed.") badgerDeployment = { "Chain ID": chainId, "Deployer": deployer.address, - "Badger Address": badgerFactory.address, + "Badger Address": badger.address, "Remaining ETH Balance": parseInt((await deployer.getBalance()).toString()) / 1000000000000000000, } - console.table(badgerDeployment); + console.table(badgerDeployment) // Verifying if (taskArgs.verify !== false && chainId != '31337') { @@ -94,11 +75,6 @@ task("deploy", "Deploys the protocol") }); console.log("✅ Badger Verified.") } - - console.log("✅ Deployment Complete.") - - // Keep Promise open to keep node running - await new Promise((resolve) => { }); }); @@ -110,7 +86,7 @@ module.exports = { settings: { optimizer: { // Keeps the amount of gas used in check enabled: true, - runs: 1000000000 + runs: 1000 } } } @@ -119,11 +95,9 @@ module.exports = { gasReporter: { currency: 'USD', gasPrice: 60, - coinmarketcap: COINMARKETCAP_API_KEY, + coinmarketcap: process.env.COINMARKETCAP_API_KEY, showMethodSig: true, showTimeSpent: true, - noColors: true, - outputFile: 'build/gas-report.txt' }, watcher: { compilation: { @@ -132,15 +106,26 @@ module.exports = { verbose: true, }, ci: { - tasks: ["clean", { command: "compile", params: { quiet: true } }, { command: "test", params: { noCompile: true, testFiles: ["./test/"] } }], + tasks: ["clean", { command: "compile", params: { quiet: true } }, { command: "test", params: { noCompile: true, testFiles: ["testfile.ts"] } }], } }, + abiExporter: { + path: 'abis/', + runOnCompile: true, + clear: true, + flat: true, + spacing: 2, + format: "minimal" + }, etherscan: { apiKey: { - goerli: ETHERSCAN_API_KEY, - mumbai: POLYGONSCAN_API_KEY, - mainnet: ETHERSCAN_API_KEY, - matic: POLYGONSCAN_API_KEY, + mainnet: process.env.ETHERSCAN_API_KEY, + rinkeby: process.env.ETHERSCAN_API_KEY, + goerli: process.env.ETHERSCAN_API_KEY, + kovan: process.env.ETHERSCAN_API_KEY, + ropsten: process.env.ETHERSCAN_API_KEY, + mumbai: process.env.POLYGONSCAN_API_KEY, + matic: process.env.POLYGONSCAN_API_KEY, } }, defaultNetwork: "hardhat", @@ -150,57 +135,32 @@ module.exports = { gas: "auto", gasPrice: "auto", saveDeployments: false, - mining + mining: { + auto: false, + order: 'fifo', + interval: 1500, + } }, goerli: { - url: `https://eth-goerli.g.alchemy.com/v2/${process.env.REACT_APP_ALCHEMY_API_KEY}`, - accounts: PRIVATE_KEY_ACCOUNTS, + url: `https://eth-goerli.g.alchemy.com/v2/${process.env.ETH_ALCHEMY_KEY}`, + accounts: [`0x${process.env.ETHEREUM_PRIVATE_KEY}`], gasPrice: 5000000000, // 5 gwei }, mumbai: { - url: `https://polygon-mumbai.g.alchemy.com/v2/${process.env.REACT_APP_ALCHEMY_API_KEY}`, - accounts: PRIVATE_KEY_ACCOUNTS, + url: `https://polygon-mumbai.g.alchemy.com/v2/${process.env.POLYGON_ALCHEMY_KEY}`, + accounts: [`0x${process.env.POLYGON_PRIVATE_KEY}`], gas: 3000000, gasPrice: 100000000000 // 100 gwei }, mainnet: { - url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.REACT_APP_ALCHEMY_API_KEY}`, - accounts: PRIVATE_KEY_ACCOUNTS, + url: `https://eth-mainnet.alchemyapi.io/v2/${process.env.ETH_ALCHEMY_KEY}`, + accounts: [`0x${process.env.ETHEREUM_PRIVATE_KEY}`], gasPrice: 50000000000, // 50 gwei }, polygon: { - url: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.REACT_APP_ALCHEMY_API_KEY}`, - accounts: PRIVATE_KEY_ACCOUNTS, + url: `https://polygon-mainnet.g.alchemy.com/v2/${process.env.POLYGON_ALCHEMY_KEY}`, + accounts: [`0x${process.env.POLYGON_PRIVATE_KEY}`], gasPrice: 'auto' }, - }, - abiExporter: [{ - path: './build/abis/', - runOnCompile: true, - clear: true, - flat: true, - format: "json" - }, { - path: '../frontend/src/abis/', - runOnCompile: true, - clear: true, - flat: true, - spacing: 4, - format: "json" - }, { - path: '../api/abis/', - runOnCompile: true, - clear: true, - flat: true, - pretty: true - }, { - path: '../api/abis/full/', - runOnCompile: true, - clear: true, - flat: true, - format: "json" - }], - typechain: { - outDir: 'build/types' } }; \ No newline at end of file diff --git a/contracts/package-lock.json b/contracts/package-lock.json index f18cb93..127c74a 100644 --- a/contracts/package-lock.json +++ b/contracts/package-lock.json @@ -1,28 +1,27 @@ { - "name": "trybadger", - "version": "1.2.0", + "name": "contracts", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "trybadger", - "version": "1.2.0", - "license": "AGPL-3.0-or-later", + "name": "contracts", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "ganache-cli": "^6.12.2", + "solidity-coverage": "^0.8.2" + }, "devDependencies": { - "@ethersproject/abi": "^5.7.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.8", - "@nomicfoundation/hardhat-toolbox": "^2.0.1", "@nomiclabs/hardhat-ethers": "^2.1.1", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", "@openzeppelin/contracts": "^4.7.3", "@openzeppelin/contracts-upgradeable": "^4.7.3", - "@typechain/hardhat": "^6.1.5", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "dotenv": "^16.0.2", "ethers": "^5.7.1", - "ganache-cli": "^6.12.2", "hardhat": "^2.11.2", "hardhat-abi-exporter": "^2.10.0", "hardhat-api-builder": "^0.0.5", @@ -31,10 +30,7 @@ "hardhat-gas-reporter": "^1.0.9", "hardhat-tracer": "^1.1.0-rc.9", "hardhat-watcher": "^2.5.0", - "mocha": "^10.0.0", - "solady": "^0.0.78", - "solidity-coverage": "^0.8.2", - "solmate": "^6.7.0" + "mocha": "^10.0.0" } }, "node_modules/@babel/parser": { @@ -49,30 +45,6 @@ "node": ">=6.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@ensdomains/ens": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", @@ -303,492 +275,92 @@ "peer": true }, "node_modules/@ethereum-waffle/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", + "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", "dev": true, "peer": true, "dependencies": { - "@ethereum-waffle/provider": "4.0.5", - "debug": "^4.3.4", - "json-bigint": "^1.0.0" + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.5.2" }, "engines": { "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" } }, "node_modules/@ethereum-waffle/compiler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", - "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", + "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", "dev": true, "peer": true, "dependencies": { "@resolver-engine/imports": "^0.3.3", "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^10.0.0", + "@typechain/ethers-v5": "^2.0.0", "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.6.1", + "@types/node-fetch": "^2.5.5", + "ethers": "^5.0.1", "mkdirp": "^0.5.1", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.1", + "solc": "^0.6.3", + "ts-generator": "^0.1.1", + "typechain": "^3.0.0" }, "engines": { "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*", - "solc": "*", - "typechain": "^8.0.0" } }, "node_modules/@ethereum-waffle/ens": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", - "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", + "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", "dev": true, "peer": true, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { + "dependencies": { "@ensdomains/ens": "^0.4.4", "@ensdomains/resolver": "^0.2.4", - "ethers": "*" + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" } }, "node_modules/@ethereum-waffle/mock-contract": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", - "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", + "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", "dev": true, "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.5.0", + "ethers": "^5.5.2" + }, "engines": { "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" } }, "node_modules/@ethereum-waffle/provider": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", - "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", + "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", "dev": true, "peer": true, "dependencies": { - "@ethereum-waffle/ens": "4.0.3", - "@ganache/ethereum-options": "0.1.4", - "debug": "^4.3.4", - "ganache": "7.4.3" + "@ethereum-waffle/ens": "^3.4.4", + "ethers": "^5.5.2", + "ganache-core": "^2.13.2", + "patch-package": "^6.2.2", + "postinstall-postinstall": "^2.1.0" }, "engines": { "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" } }, - "node_modules/@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "node_modules/@ethereumjs/block/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "peer": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "peer": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", - "dev": true, - "peer": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.3" - } - }, - "node_modules/@ethereumjs/common/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/common": "^2.6.0", - "ethereumjs-util": "^7.1.3" - } - }, - "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/vm": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", - "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/block": "^3.6.0", - "@ethereumjs/blockchain": "^5.5.0", - "@ethereumjs/common": "^2.6.0", - "@ethereumjs/tx": "^3.4.0", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^2.2.0", - "ethereumjs-util": "^7.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.2", - "rustbn.js": "~0.2.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, "funding": [ { "type": "individual", @@ -815,7 +387,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, "funding": [ { "type": "individual", @@ -840,7 +411,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, "funding": [ { "type": "individual", @@ -863,7 +433,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, "funding": [ { "type": "individual", @@ -886,7 +455,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, "funding": [ { "type": "individual", @@ -925,7 +493,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, "funding": [ { "type": "individual", @@ -946,7 +513,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, "funding": [ { "type": "individual", @@ -965,7 +531,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, "funding": [ { "type": "individual", @@ -1012,7 +577,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, "funding": [ { "type": "individual", @@ -1100,7 +664,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, "funding": [ { "type": "individual", @@ -1120,7 +683,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true, "funding": [ { "type": "individual", @@ -1136,7 +698,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1175,7 +736,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, "funding": [ { "type": "individual", @@ -1252,7 +812,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, "funding": [ { "type": "individual", @@ -1293,7 +852,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, "funding": [ { "type": "individual", @@ -1341,7 +899,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, "funding": [ { "type": "individual", @@ -1362,7 +919,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1443,7 +999,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, "funding": [ { "type": "individual", @@ -1485,163 +1040,6 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ganache/ethereum-address": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", - "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", - "dev": true, - "peer": true, - "dependencies": { - "@ganache/utils": "0.1.4" - } - }, - "node_modules/@ganache/ethereum-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", - "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", - "dev": true, - "peer": true, - "dependencies": { - "@ganache/ethereum-address": "0.1.4", - "@ganache/ethereum-utils": "0.1.4", - "@ganache/options": "0.1.4", - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "node_modules/@ganache/ethereum-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", - "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/common": "2.6.0", - "@ethereumjs/tx": "3.4.0", - "@ethereumjs/vm": "5.6.0", - "@ganache/ethereum-address": "0.1.4", - "@ganache/rlp": "0.1.4", - "@ganache/utils": "0.1.4", - "emittery": "0.10.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "7.1.3" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/ethereumjs-util": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ganache/options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", - "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", - "dev": true, - "peer": true, - "dependencies": { - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "node_modules/@ganache/rlp": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", - "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@ganache/utils": "0.1.4", - "rlp": "2.2.6" - } - }, - "node_modules/@ganache/rlp/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "node_modules/@ganache/rlp/node_modules/rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/@ganache/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", - "dev": true, - "peer": true, - "dependencies": { - "emittery": "0.10.0", - "keccak": "3.0.1", - "seedrandom": "3.0.5" - }, - "optionalDependencies": { - "@trufflesuite/bigint-buffer": "1.1.9" - } - }, - "node_modules/@ganache/utils/node_modules/keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -1704,7 +1102,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -1716,45 +1113,10 @@ "node": ">=12.0.0" } }, - "node_modules/@morgan-stanley/ts-mocking-bird": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", - "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.16", - "uuid": "^7.0.3" - }, - "peerDependencies": { - "jasmine": "2.x || 3.x || 4.x", - "jest": "26.x || 27.x || 28.x", - "typescript": ">=4.2" - }, - "peerDependenciesMeta": { - "jasmine": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/@morgan-stanley/ts-mocking-bird/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@noble/hashes": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true, "funding": [ { "type": "individual", @@ -1766,7 +1128,6 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true, "funding": [ { "type": "individual", @@ -1778,7 +1139,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1791,7 +1151,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -1800,7 +1159,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1813,7 +1171,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -1830,7 +1187,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -1853,7 +1209,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-block": "^4.0.0", "@nomicfoundation/ethereumjs-common": "^3.0.0", @@ -1876,7 +1231,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -1899,7 +1253,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-util": "^8.0.0", "crc-32": "^1.2.0" @@ -1909,7 +1262,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-block": "^4.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -1926,7 +1278,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -1949,7 +1300,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-util": "^8.0.0", @@ -1968,7 +1318,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -1991,7 +1340,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", - "dev": true, "bin": { "rlp": "bin/rlp" }, @@ -2003,7 +1351,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -2018,7 +1365,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2041,7 +1387,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-rlp": "^4.0.0", "@nomicfoundation/ethereumjs-util": "^8.0.0", @@ -2056,7 +1401,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2079,7 +1423,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -2094,7 +1437,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2117,7 +1459,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", "ethereum-cryptography": "0.1.3" @@ -2130,7 +1471,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2153,7 +1493,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, "dependencies": { "@nomicfoundation/ethereumjs-block": "^4.0.0", "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", @@ -2180,7 +1519,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2199,122 +1537,10 @@ "setimmediate": "^1.0.5" } }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "chai": "^4.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers/node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "peer": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.8.tgz", - "integrity": "sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q==", - "dev": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.9.5" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.1.tgz", - "integrity": "sha512-/pr8m9xlqiNlq6fXv4hEPNwdNwUhysoB2qbDCKqERfPpq34EydUQTC3Vis4aIea8RLwSrU8sDXFdv4TQxYstKw==", - "dev": true, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", - "chai": "^4.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.1.0", - "typescript": ">=4.5.0" - } - }, "node_modules/@nomicfoundation/solidity-analyzer": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz", "integrity": "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==", - "dev": true, "engines": { "node": ">= 12" }, @@ -2338,7 +1564,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -2354,7 +1579,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -2370,7 +1594,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -2386,7 +1609,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2402,7 +1624,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2418,7 +1639,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2434,7 +1654,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2450,7 +1669,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2466,7 +1684,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2482,7 +1699,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2594,13 +1810,17 @@ } }, "node_modules/@nomiclabs/hardhat-waffle": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz", - "integrity": "sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", "dev": true, + "dependencies": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + }, "peerDependencies": { "@nomiclabs/hardhat-ethers": "^2.0.0", - "ethereum-waffle": "*", + "ethereum-waffle": "^3.2.0", "ethers": "^5.0.0", "hardhat": "^2.0.0" } @@ -2710,7 +1930,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true, "funding": [ { "type": "individual", @@ -2722,7 +1941,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, "funding": [ { "type": "individual", @@ -2739,7 +1957,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, "funding": [ { "type": "individual", @@ -2755,7 +1972,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -2771,7 +1987,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -2785,7 +2000,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -2799,7 +2013,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -2819,7 +2032,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -2835,7 +2047,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, "engines": { "node": ">=6" } @@ -2844,7 +2055,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -2857,167 +2067,33 @@ "version": "0.14.3", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, "dependencies": { "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true, - "peer": true - }, "node_modules/@typechain/ethers-v5": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", - "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/@typechain/ethers-v5/node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz", - "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typechain/hardhat/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@typechain/hardhat/node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "peer": true, + "dependencies": { + "ethers": "^5.0.2" + }, + "peerDependencies": { + "ethers": "^5.0.0", + "typechain": "^3.0.0" } }, - "node_modules/@types/abstract-leveldown": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz", - "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==", - "dev": true, - "peer": true - }, "node_modules/@types/async-eventemitter": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true + "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" }, "node_modules/@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -3026,18 +2102,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", - "dev": true, - "peer": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/chai": "*" - } + "dev": true }, "node_modules/@types/concat-stream": { "version": "1.6.1", @@ -3087,7 +2152,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -3105,36 +2169,15 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, "node_modules/@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/mkdirp": { "version": "0.5.2", @@ -3146,18 +2189,10 @@ "@types/node": "*" } }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true, - "peer": true - }, "node_modules/@types/node": { "version": "18.7.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", - "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", - "dev": true + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==" }, "node_modules/@types/node-fetch": { "version": "2.6.2", @@ -3174,7 +2209,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -3192,20 +2226,69 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "node_modules/@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/sinon": { + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", + "dev": true, + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "node_modules/@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "node_modules/@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "dependencies": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" }, "node_modules/@vue/compiler-sfc": { "version": "2.7.10", @@ -3434,17 +2517,22 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "peer": true + }, "node_modules/abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==" }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3456,7 +2544,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, "dependencies": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -3470,61 +2557,6 @@ "node": ">=12" } }, - "node_modules/abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/abstract-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/abstract-leveldown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/acorn": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", @@ -3546,21 +2578,10 @@ "acorn": "^8" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/address": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "dev": true, "engines": { "node": ">= 10.0.0" } @@ -3569,7 +2590,6 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, "engines": { "node": ">=0.3.0" } @@ -3584,7 +2604,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -3596,7 +2615,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3634,7 +2652,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, "optional": true, "engines": { "node": ">=0.4.2" @@ -3644,7 +2661,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, "engines": { "node": ">=6" } @@ -3653,7 +2669,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -3668,7 +2683,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3677,7 +2691,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3691,14 +2704,12 @@ "node_modules/antlr4ts": { "version": "0.5.0-alpha.4", "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3707,34 +2718,28 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "dev": true, "peer": true, + "dependencies": { + "typical": "^2.6.1" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { "node": ">=8" } @@ -3752,7 +2757,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -3813,7 +2817,6 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, "dependencies": { "lodash": "^4.17.14" } @@ -3822,7 +2825,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, "dependencies": { "async": "^2.4.0" } @@ -3833,15 +2835,6 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3869,14 +2862,12 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base-x": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.0.1" } @@ -3885,7 +2876,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -3935,7 +2925,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.6.tgz", "integrity": "sha512-k5ljSLHx94jQTW3+18KEfxLJR8/XFBHqhfhEGF48qT8p/jL6EdiG7oNOiiIRGMFh2wEP8kaCXZbVd+5dYkngUg==", - "dev": true, "dependencies": { "bigint-mod-arith": "^3.1.0" }, @@ -3947,7 +2936,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.1.tgz", "integrity": "sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ==", - "dev": true, "engines": { "node": ">=10.4.0" } @@ -3965,36 +2953,14 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true, - "peer": true - }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, "node_modules/bluebird": { "version": "3.7.2", @@ -4005,8 +2971,7 @@ "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/boolbase": { "version": "1.0.0", @@ -4018,7 +2983,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4028,7 +2992,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -4039,14 +3002,12 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-level": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, "dependencies": { "abstract-level": "^1.0.2", "catering": "^2.1.1", @@ -4057,14 +3018,12 @@ "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4106,7 +3065,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, "dependencies": { "base-x": "^3.0.2" } @@ -4115,7 +3073,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -4126,7 +3083,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "funding": [ { "type": "github", @@ -4149,32 +3105,17 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -4183,7 +3124,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4212,7 +3152,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "engines": { "node": ">=10" }, @@ -4246,7 +3185,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true, "engines": { "node": ">=6" } @@ -4298,7 +3236,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4332,7 +3269,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -4367,14 +3303,12 @@ "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -4384,7 +3318,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", - "dev": true, "hasInstallScript": true, "dependencies": { "abstract-level": "^1.0.2", @@ -4413,7 +3346,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -4438,7 +3370,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -4449,7 +3380,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -4458,7 +3388,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4482,7 +3411,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4493,8 +3421,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colors": { "version": "1.4.0", @@ -4520,137 +3447,21 @@ "node_modules/command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", "dev": true, "peer": true, "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "bin": { + "command-line-args": "bin/cli.js" } }, "node_modules/commander": { @@ -4665,8 +3476,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -4729,23 +3539,10 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -4756,7 +3553,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, "bin": { "crc32": "bin/crc32.njs" }, @@ -4768,7 +3564,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -4781,7 +3576,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -4791,12 +3585,32 @@ "sha.js": "^2.4.8" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "peer": true + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } }, "node_modules/crypt": { "version": "0.0.2", @@ -4933,14 +3747,12 @@ "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4957,7 +3769,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -4977,96 +3788,15 @@ "node": ">=0.12" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "peer": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deferred-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/deferred-leveldown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -5109,7 +3839,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -5118,7 +3847,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dev": true, "dependencies": { "address": "^1.0.1", "debug": "4" @@ -5132,7 +3860,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, "engines": { "node": ">=0.3.1" } @@ -5141,7 +3868,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, "dependencies": { "heap": ">= 0.2.0" }, @@ -5153,7 +3879,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -5165,7 +3890,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -5279,7 +4003,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -5293,27 +4016,12 @@ "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", @@ -5330,22 +4038,6 @@ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", "dev": true }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "peer": true, - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/enhanced-resolve": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", @@ -5363,7 +4055,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, @@ -5384,24 +4075,10 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, "engines": { "node": ">=6" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "peer": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5416,7 +4093,6 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -5453,7 +4129,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -5470,8 +4145,7 @@ "node_modules/es-array-method-boxes-properly": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, "node_modules/es-module-lexer": { "version": "0.9.3", @@ -5483,7 +4157,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5500,7 +4173,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -5509,7 +4181,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -5521,7 +4192,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, "dependencies": { "esprima": "^2.7.1", "estraverse": "^1.9.1", @@ -5543,7 +4213,6 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5556,7 +4225,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5565,7 +4233,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, "optional": true, "dependencies": { "amdefine": ">=0.0.4" @@ -5591,7 +4258,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5634,7 +4300,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6259,7 +4924,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, "dependencies": { "js-sha3": "^0.8.0" } @@ -6268,7 +4932,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, "dependencies": { "@noble/hashes": "1.1.2", "@noble/secp256k1": "1.6.3", @@ -6277,34 +4940,29 @@ } }, "node_modules/ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", + "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", "dev": true, "peer": true, "dependencies": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" + "@ethereum-waffle/chai": "^3.4.4", + "@ethereum-waffle/compiler": "^3.4.4", + "@ethereum-waffle/mock-contract": "^3.4.4", + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.0.1" }, "bin": { "waffle": "bin/waffle" }, "engines": { "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" } }, "node_modules/ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, "dependencies": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -6313,14 +4971,12 @@ "node_modules/ethereumjs-abi/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -6335,7 +4991,6 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -6343,14 +4998,12 @@ "node_modules/ethereumjs-util/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -6421,7 +5074,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, "dependencies": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -6434,14 +5086,12 @@ "node_modules/ethjs-unit/node_modules/bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/ethjs-util": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -6455,7 +5105,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, "engines": { "node": ">=6" } @@ -6473,7 +5122,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6504,7 +5152,6 @@ "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6525,14 +5172,12 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -6541,7 +5186,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6550,23 +5194,36 @@ } }, "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", "dev": true, "peer": true, "dependencies": { - "array-back": "^3.0.1" + "array-back": "^1.0.4", + "test-value": "^2.1.0" }, "engines": { "node": ">=4.0.0" } }, + "node_modules/find-replace/node_modules/array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "dev": true, + "peer": true, + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, "dependencies": { "locate-path": "^2.0.0" }, @@ -6574,11 +5231,20 @@ "node": ">=4" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "peer": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, "bin": { "flat": "cli.js" } @@ -6596,7 +5262,6 @@ "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, "funding": [ { "type": "individual", @@ -6639,8 +5304,7 @@ "node_modules/fp-ts": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "node_modules/fs": { "version": "0.0.1-security", @@ -6652,7 +5316,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -6671,14 +5334,12 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -6691,14 +5352,12 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -6715,54 +5374,16 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", - "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", - "bundleDependencies": [ - "@trufflesuite/bigint-buffer", - "emittery", - "keccak", - "leveldown", - "secp256k1", - "@types/bn.js", - "@types/lru-cache", - "@types/seedrandom" - ], - "dev": true, - "hasShrinkwrap": true, - "peer": true, - "dependencies": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3" - }, - "bin": { - "ganache": "dist/node/cli.js", - "ganache-cli": "dist/node/cli.js" - }, - "optionalDependencies": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7" - } - }, "node_modules/ganache-cli": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", @@ -6773,7 +5394,6 @@ "ethereumjs-util" ], "deprecated": "ganache-cli is now ganache; visit https://trfl.io/g7 for details", - "dev": true, "dependencies": { "ethereumjs-util": "6.2.1", "source-map-support": "0.5.12", @@ -6785,7 +5405,6 @@ }, "node_modules/ganache-cli/node_modules/@types/bn.js": { "version": "4.11.6", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6794,13 +5413,11 @@ }, "node_modules/ganache-cli/node_modules/@types/node": { "version": "14.11.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/@types/pbkdf2": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6809,7 +5426,6 @@ }, "node_modules/ganache-cli/node_modules/@types/secp256k1": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6818,7 +5434,6 @@ }, "node_modules/ganache-cli/node_modules/ansi-regex": { "version": "4.1.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6827,7 +5442,6 @@ }, "node_modules/ganache-cli/node_modules/ansi-styles": { "version": "3.2.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6839,7 +5453,6 @@ }, "node_modules/ganache-cli/node_modules/base-x": { "version": "3.0.8", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6848,25 +5461,21 @@ }, "node_modules/ganache-cli/node_modules/blakejs": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/ganache-cli/node_modules/bn.js": { "version": "4.11.9", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/brorand": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/browserify-aes": { "version": "1.2.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6880,7 +5489,6 @@ }, "node_modules/ganache-cli/node_modules/bs58": { "version": "4.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6889,7 +5497,6 @@ }, "node_modules/ganache-cli/node_modules/bs58check": { "version": "2.1.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6900,19 +5507,16 @@ }, "node_modules/ganache-cli/node_modules/buffer-from": { "version": "1.1.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/buffer-xor": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/camelcase": { "version": "5.3.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -6921,7 +5525,6 @@ }, "node_modules/ganache-cli/node_modules/cipher-base": { "version": "1.0.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6931,7 +5534,6 @@ }, "node_modules/ganache-cli/node_modules/cliui": { "version": "5.0.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -6942,7 +5544,6 @@ }, "node_modules/ganache-cli/node_modules/color-convert": { "version": "1.9.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6951,13 +5552,11 @@ }, "node_modules/ganache-cli/node_modules/color-name": { "version": "1.1.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/create-hash": { "version": "1.2.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6970,7 +5569,6 @@ }, "node_modules/ganache-cli/node_modules/create-hmac": { "version": "1.1.7", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -6984,7 +5582,6 @@ }, "node_modules/ganache-cli/node_modules/cross-spawn": { "version": "6.0.5", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7000,7 +5597,6 @@ }, "node_modules/ganache-cli/node_modules/decamelize": { "version": "1.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7009,7 +5605,6 @@ }, "node_modules/ganache-cli/node_modules/elliptic": { "version": "6.5.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7024,13 +5619,11 @@ }, "node_modules/ganache-cli/node_modules/emoji-regex": { "version": "7.0.3", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/end-of-stream": { "version": "1.4.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7039,7 +5632,6 @@ }, "node_modules/ganache-cli/node_modules/ethereum-cryptography": { "version": "0.1.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7062,7 +5654,6 @@ }, "node_modules/ganache-cli/node_modules/ethereumjs-util": { "version": "6.2.1", - "dev": true, "inBundle": true, "license": "MPL-2.0", "dependencies": { @@ -7077,7 +5668,6 @@ }, "node_modules/ganache-cli/node_modules/ethjs-util": { "version": "0.1.6", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7091,7 +5681,6 @@ }, "node_modules/ganache-cli/node_modules/evp_bytestokey": { "version": "1.0.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7101,7 +5690,6 @@ }, "node_modules/ganache-cli/node_modules/execa": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7119,7 +5707,6 @@ }, "node_modules/ganache-cli/node_modules/find-up": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7131,7 +5718,6 @@ }, "node_modules/ganache-cli/node_modules/get-caller-file": { "version": "2.0.5", - "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7140,7 +5726,6 @@ }, "node_modules/ganache-cli/node_modules/get-stream": { "version": "4.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7152,7 +5737,6 @@ }, "node_modules/ganache-cli/node_modules/hash-base": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7166,7 +5750,6 @@ }, "node_modules/ganache-cli/node_modules/hash.js": { "version": "1.1.7", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7176,7 +5759,6 @@ }, "node_modules/ganache-cli/node_modules/hmac-drbg": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7187,13 +5769,11 @@ }, "node_modules/ganache-cli/node_modules/inherits": { "version": "2.0.4", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/invert-kv": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7202,7 +5782,6 @@ }, "node_modules/ganache-cli/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7211,7 +5790,6 @@ }, "node_modules/ganache-cli/node_modules/is-hex-prefixed": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7221,7 +5799,6 @@ }, "node_modules/ganache-cli/node_modules/is-stream": { "version": "1.1.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7230,13 +5807,11 @@ }, "node_modules/ganache-cli/node_modules/isexe": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/keccak": { "version": "3.0.1", - "dev": true, "hasInstallScript": true, "inBundle": true, "license": "MIT", @@ -7250,7 +5825,6 @@ }, "node_modules/ganache-cli/node_modules/lcid": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7262,7 +5836,6 @@ }, "node_modules/ganache-cli/node_modules/locate-path": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7275,7 +5848,6 @@ }, "node_modules/ganache-cli/node_modules/map-age-cleaner": { "version": "0.1.3", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7287,7 +5859,6 @@ }, "node_modules/ganache-cli/node_modules/md5.js": { "version": "1.3.5", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7298,7 +5869,6 @@ }, "node_modules/ganache-cli/node_modules/mem": { "version": "4.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7312,7 +5882,6 @@ }, "node_modules/ganache-cli/node_modules/mimic-fn": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7321,31 +5890,26 @@ }, "node_modules/ganache-cli/node_modules/minimalistic-assert": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/nice-try": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/node-addon-api": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/node-gyp-build": { "version": "4.2.3", - "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -7356,7 +5920,6 @@ }, "node_modules/ganache-cli/node_modules/npm-run-path": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7368,7 +5931,6 @@ }, "node_modules/ganache-cli/node_modules/once": { "version": "1.4.0", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7377,7 +5939,6 @@ }, "node_modules/ganache-cli/node_modules/os-locale": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7391,7 +5952,6 @@ }, "node_modules/ganache-cli/node_modules/p-defer": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7400,7 +5960,6 @@ }, "node_modules/ganache-cli/node_modules/p-finally": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7409,7 +5968,6 @@ }, "node_modules/ganache-cli/node_modules/p-is-promise": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7418,7 +5976,6 @@ }, "node_modules/ganache-cli/node_modules/p-limit": { "version": "2.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7433,7 +5990,6 @@ }, "node_modules/ganache-cli/node_modules/p-locate": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7445,7 +6001,6 @@ }, "node_modules/ganache-cli/node_modules/p-try": { "version": "2.2.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7454,7 +6009,6 @@ }, "node_modules/ganache-cli/node_modules/path-exists": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7463,7 +6017,6 @@ }, "node_modules/ganache-cli/node_modules/path-key": { "version": "2.0.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7472,7 +6025,6 @@ }, "node_modules/ganache-cli/node_modules/pbkdf2": { "version": "3.1.1", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7488,7 +6040,6 @@ }, "node_modules/ganache-cli/node_modules/pump": { "version": "3.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7498,7 +6049,6 @@ }, "node_modules/ganache-cli/node_modules/randombytes": { "version": "2.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7507,7 +6057,6 @@ }, "node_modules/ganache-cli/node_modules/readable-stream": { "version": "3.6.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7521,7 +6070,6 @@ }, "node_modules/ganache-cli/node_modules/require-directory": { "version": "2.1.1", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7530,13 +6078,11 @@ }, "node_modules/ganache-cli/node_modules/require-main-filename": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/ripemd160": { "version": "2.0.2", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7546,7 +6092,6 @@ }, "node_modules/ganache-cli/node_modules/rlp": { "version": "2.2.6", - "dev": true, "inBundle": true, "license": "MPL-2.0", "dependencies": { @@ -7558,7 +6103,6 @@ }, "node_modules/ganache-cli/node_modules/safe-buffer": { "version": "5.2.1", - "dev": true, "funding": [ { "type": "github", @@ -7578,13 +6122,11 @@ }, "node_modules/ganache-cli/node_modules/scrypt-js": { "version": "3.0.1", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/secp256k1": { "version": "4.0.2", - "dev": true, "hasInstallScript": true, "inBundle": true, "license": "MIT", @@ -7599,7 +6141,6 @@ }, "node_modules/ganache-cli/node_modules/semver": { "version": "5.7.1", - "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -7608,19 +6149,16 @@ }, "node_modules/ganache-cli/node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/setimmediate": { "version": "1.0.5", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/sha.js": { "version": "2.4.11", - "dev": true, "inBundle": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { @@ -7633,7 +6171,6 @@ }, "node_modules/ganache-cli/node_modules/shebang-command": { "version": "1.2.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7645,7 +6182,6 @@ }, "node_modules/ganache-cli/node_modules/shebang-regex": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7654,13 +6190,11 @@ }, "node_modules/ganache-cli/node_modules/signal-exit": { "version": "3.0.3", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/source-map": { "version": "0.6.1", - "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -7669,7 +6203,6 @@ }, "node_modules/ganache-cli/node_modules/source-map-support": { "version": "0.5.12", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7679,7 +6212,6 @@ }, "node_modules/ganache-cli/node_modules/string_decoder": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7688,7 +6220,6 @@ }, "node_modules/ganache-cli/node_modules/string-width": { "version": "3.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7702,7 +6233,6 @@ }, "node_modules/ganache-cli/node_modules/strip-ansi": { "version": "5.2.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7714,7 +6244,6 @@ }, "node_modules/ganache-cli/node_modules/strip-eof": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7723,7 +6252,6 @@ }, "node_modules/ganache-cli/node_modules/strip-hex-prefix": { "version": "1.0.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7736,13 +6264,11 @@ }, "node_modules/ganache-cli/node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/ganache-cli/node_modules/which": { "version": "1.3.1", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7754,13 +6280,11 @@ }, "node_modules/ganache-cli/node_modules/which-module": { "version": "2.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/wrap-ansi": { "version": "5.1.0", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7774,19 +6298,16 @@ }, "node_modules/ganache-cli/node_modules/wrappy": { "version": "1.0.2", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/y18n": { "version": "4.0.0", - "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/ganache-cli/node_modules/yargs": { "version": "13.2.4", - "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7805,7 +6326,6 @@ }, "node_modules/ganache-cli/node_modules/yargs-parser": { "version": "13.1.2", - "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7813,111 +6333,1826 @@ "decamelize": "^1.2.0" } }, - "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", + "node_modules/ganache-core": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", + "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", + "bundleDependencies": [ + "keccak" + ], + "deprecated": "ganache-core is now ganache; visit https://trfl.io/g7 for details", "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "Apache-2.0", + "hasShrinkwrap": true, "peer": true, "dependencies": { - "node-gyp-build": "4.4.0" + "abstract-leveldown": "3.0.0", + "async": "2.6.2", + "bip39": "2.5.0", + "cachedown": "1.0.0", + "clone": "2.1.2", + "debug": "3.2.6", + "encoding-down": "5.0.4", + "eth-sig-util": "3.0.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-account": "3.0.0", + "ethereumjs-block": "2.2.2", + "ethereumjs-common": "1.5.0", + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "6.2.1", + "ethereumjs-vm": "4.2.0", + "heap": "0.2.6", + "keccak": "3.0.1", + "level-sublevel": "6.6.4", + "levelup": "3.1.1", + "lodash": "4.17.20", + "lru-cache": "5.1.1", + "merkle-patricia-tree": "3.0.0", + "patch-package": "6.2.2", + "seedrandom": "3.0.1", + "source-map-support": "0.5.12", + "tmp": "0.1.0", + "web3-provider-engine": "14.2.1", + "websocket": "1.0.32" }, "engines": { - "node": ">= 14.0.0" + "node": ">=8.9.0" + }, + "optionalDependencies": { + "ethereumjs-wallet": "0.6.5", + "web3": "1.2.11" } }, - "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "node_modules/ganache-core/node_modules/@ethersproject/abi": { + "version": "5.0.0-beta.153", "dev": true, - "inBundle": true, "license": "MIT", + "optional": true, "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "dependencies": { + "@ethersproject/address": ">=5.0.0-beta.128", + "@ethersproject/bignumber": ">=5.0.0-beta.130", + "@ethersproject/bytes": ">=5.0.0-beta.129", + "@ethersproject/constants": ">=5.0.0-beta.128", + "@ethersproject/hash": ">=5.0.0-beta.128", + "@ethersproject/keccak256": ">=5.0.0-beta.127", + "@ethersproject/logger": ">=5.0.0-beta.129", + "@ethersproject/properties": ">=5.0.0-beta.131", + "@ethersproject/strings": ">=5.0.0-beta.130" } }, - "node_modules/ganache/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "node_modules/ganache-core/node_modules/@ethersproject/abstract-provider": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/networks": "^5.0.7", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/transactions": "^5.0.9", + "@ethersproject/web": "^5.0.12" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/abstract-signer": { + "version": "5.0.10", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.0.8", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/address": { + "version": "5.0.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/rlp": "^5.0.7" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/base64": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/bignumber": { + "version": "5.0.13", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "bn.js": "^4.4.0" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/bytes": { + "version": "5.0.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/constants": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.0.13" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/hash": { + "version": "5.0.10", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abstract-signer": "^5.0.10", + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/keccak256": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "js-sha3": "0.5.7" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/logger": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/@ethersproject/networks": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/properties": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/rlp": { + "version": "5.0.7", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/signing-key": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "elliptic": "6.5.3" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/strings": { + "version": "5.0.8", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/logger": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/transactions": { + "version": "5.0.9", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/rlp": "^5.0.7", + "@ethersproject/signing-key": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@ethersproject/web": { + "version": "5.0.12", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/base64": "^5.0.7", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "node_modules/ganache-core/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/@types/bn.js": { + "version": "4.11.6", "dev": true, - "inBundle": true, "license": "MIT", "peer": true, "dependencies": { "@types/node": "*" } }, - "node_modules/ganache/node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "node_modules/ganache-core/node_modules/@types/node": { + "version": "14.14.20", "dev": true, - "inBundle": true, "license": "MIT", "peer": true }, - "node_modules/ganache/node_modules/@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", + "node_modules/ganache-core/node_modules/@types/pbkdf2": { + "version": "3.1.0", "dev": true, - "inBundle": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "@types/node": "*" + } }, - "node_modules/ganache/node_modules/@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", + "node_modules/ganache-core/node_modules/@types/secp256k1": { + "version": "4.0.1", "dev": true, - "inBundle": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "@types/node": "*" + } }, - "node_modules/ganache/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache/node_modules/brorand": { + "node_modules/ganache-core/node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true, - "inBundle": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/ganache-core/node_modules/abstract-leveldown": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/accepts": { + "version": "1.3.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/aes-js": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ganache-core/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/arr-diff": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/arr-flatten": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/arr-union": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/array-unique": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/asn1": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/ganache-core/node_modules/asn1.js": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ganache-core/node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ganache-core/node_modules/assign-symbols": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/async": { + "version": "2.6.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lodash": "^4.17.11" + } + }, + "node_modules/ganache-core/node_modules/async-eventemitter": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/ganache-core/node_modules/async-limiter": { + "version": "1.0.1", + "dev": true, "license": "MIT", "peer": true }, - "node_modules/ganache/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/ganache-core/node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/atob": { + "version": "2.1.2", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "peer": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/ganache-core/node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-code-frame": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ganache-core/node_modules/babel-core": { + "version": "6.26.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/json5": { + "version": "0.5.1", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-core/node_modules/slash": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-generator": { + "version": "6.26.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/babel-generator/node_modules/jsesc": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-define-map": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-function-name": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-regex": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-helpers": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-messages": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/ganache-core/node_modules/babel-preset-env": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/ganache-core/node_modules/babel-preset-env/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/babel-register": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "node_modules/ganache-core/node_modules/babel-register/node_modules/source-map-support": { + "version": "0.4.18", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/ganache-core/node_modules/babel-runtime": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/ganache-core/node_modules/babel-template": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/babel-types": { + "version": "6.26.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/ganache-core/node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/babelify": { + "version": "7.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "babel-core": "^6.0.14", + "object-assign": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/babylon": { + "version": "6.18.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/ganache-core/node_modules/backoff": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/balanced-match": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/base": { + "version": "0.11.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/base-x": { + "version": "3.0.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-core/node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/ganache-core/node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/bignumber.js": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/bip39": { + "version": "2.5.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" + } + }, + "node_modules/ganache-core/node_modules/blakejs": { + "version": "1.1.0", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/ganache-core/node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/bn.js": { + "version": "4.11.9", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/body-parser": { + "version": "1.19.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/ganache-core/node_modules/brorand": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/browserify-aes": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-core/node_modules/browserify-cipher": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/browserify-des": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/browserify-rsa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/ganache-core/node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/browserify-sign": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/ganache-core/node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/browserslist": { + "version": "3.2.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/ganache-core/node_modules/bs58": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/ganache-core/node_modules/bs58check": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/buffer": { + "version": "5.7.1", "dev": true, "funding": [ { @@ -7933,339 +8168,3563 @@ "url": "https://feross.org/support" } ], - "inBundle": true, "license": "MIT", "peer": true, "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "ieee754": "^1.1.13" } }, - "node_modules/ganache/node_modules/bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "node_modules/ganache-core/node_modules/buffer-from": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/buffer-xor": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/bufferutil": { + "version": "4.0.3", "dev": true, "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - } - }, - "node_modules/ganache/node_modules/catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "dev": true, - "inBundle": true, "license": "MIT", "peer": true, "dependencies": { - "queue-tick": "^1.0.0" + "node-gyp-build": "^4.2.0" + } + }, + "node_modules/ganache-core/node_modules/bytes": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/bytewise": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/ganache-core/node_modules/bytewise-core": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "typewise-core": "^1.2" + } + }, + "node_modules/ganache-core/node_modules/cache-base": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/cacheable-request": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache-core/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache-core/node_modules/cachedown": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "^2.4.1", + "lru-cache": "^3.2.0" + } + }, + "node_modules/ganache-core/node_modules/cachedown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/cachedown/node_modules/lru-cache": { + "version": "3.2.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "pseudomap": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/caniuse-lite": { + "version": "1.0.30001174", + "dev": true, + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/ganache-core/node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/ganache-core/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/checkpoint-store": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/cids": { + "version": "0.7.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/ganache-core/node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/cipher-base": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-core/node_modules/class-is": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/class-utils": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/clone": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ganache-core/node_modules/clone-response": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/collection-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ganache-core/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/component-emitter": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/ganache-core/node_modules/content-disposition": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/content-hash": { + "version": "2.5.2", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/ganache-core/node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/convert-source-map": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/cookie": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/cookiejar": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/copy-descriptor": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/core-js": { + "version": "2.6.12", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/core-js-pure": { + "version": "3.8.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/ganache-core/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache-core/node_modules/create-ecdh": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/ganache-core/node_modules/create-hash": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/ganache-core/node_modules/create-hmac": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/ganache-core/node_modules/cross-fetch": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + } + }, + "node_modules/ganache-core/node_modules/crypto-browserify": { + "version": "3.12.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/d": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ganache-core/node_modules/debug": { + "version": "3.2.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ganache-core/node_modules/decode-uri-component": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ganache-core/node_modules/decompress-response": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/deep-equal": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/defer-to-connect": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/deferred-leveldown": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" }, "engines": { "node": ">=6" } }, - "node_modules/ganache/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { + "version": "5.0.0", "dev": true, - "inBundle": true, "license": "MIT", "peer": true, "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "node_modules/ganache-core/node_modules/define-properties": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache-core/node_modules/define-property": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/defined": { + "version": "1.0.0", "dev": true, - "inBundle": true, "license": "MIT", "peer": true }, - "node_modules/ganache/node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", + "node_modules/ganache-core/node_modules/delayed-stream": { + "version": "1.0.0", "dev": true, - "inBundle": true, "license": "MIT", "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "node": ">=0.4.0" } }, - "node_modules/ganache/node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/ganache-core/node_modules/depd": { + "version": "1.1.2", "dev": true, - "inBundle": true, "license": "MIT", + "optional": true, "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/ganache/node_modules/hmac-drbg": { + "node_modules/ganache-core/node_modules/des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, - "inBundle": true, "license": "MIT", + "optional": true, "peer": true, "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/ganache/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/ganache-core/node_modules/destroy": { + "version": "1.0.4", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause", + "license": "MIT", + "optional": true, "peer": true }, - "node_modules/ganache/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/ganache-core/node_modules/detect-indent": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/diffie-hellman": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/dom-walk": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/dotignore": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimatch": "^3.0.4" + }, + "bin": { + "ignored": "bin/ignored" + } + }, + "node_modules/ganache-core/node_modules/duplexer3": { + "version": "0.1.4", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ganache-core/node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/electron-to-chromium": { + "version": "1.3.636", "dev": true, - "inBundle": true, "license": "ISC", "peer": true }, - "node_modules/ganache/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "node_modules/ganache-core/node_modules/elliptic": { + "version": "6.5.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/ganache-core/node_modules/encoding-down": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/encoding-down/node_modules/abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ganache-core/node_modules/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/ganache-core/node_modules/es-abstract": { + "version": "1.18.0-next.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/es5-ext": { + "version": "0.10.53", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/ganache-core/node_modules/es6-iterator": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/ganache-core/node_modules/es6-symbol": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/ganache-core/node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ganache-core/node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "eth-query": "^2.1.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.3", + "ethjs-util": "^0.1.3", + "json-rpc-engine": "^3.6.0", + "pify": "^2.3.0", + "tape": "^4.6.3" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/eth-ens-namehash": { + "version": "2.0.8", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-infura": { + "version": "3.2.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cross-fetch": "^2.1.1", + "eth-json-rpc-middleware": "^1.5.0", + "json-rpc-engine": "^3.4.0", + "json-rpc-error": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware": { + "version": "1.6.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "async": "^2.5.0", + "eth-query": "^2.1.2", + "eth-tx-summary": "^3.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.1.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^3.6.0", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "tape": "^4.6.3" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block/node_modules/ethereum-common": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-lib": { + "version": "0.1.29", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-query": { + "version": "2.1.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "4.5.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary": { + "version": "3.2.4", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "clone": "^2.0.0", + "concat-stream": "^1.5.1", + "end-of-stream": "^1.1.0", + "eth-query": "^2.0.2", + "ethereumjs-block": "^1.4.1", + "ethereumjs-tx": "^1.1.1", + "ethereumjs-util": "^5.0.1", + "ethereumjs-vm": "^2.6.0", + "through2": "^2.0.3" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block/node_modules/ethereum-common": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethashjs": { + "version": "0.0.8", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.0.2", + "miller-rabin": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethashjs/node_modules/bn.js": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethashjs/node_modules/buffer-xor": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethashjs/node_modules/ethereumjs-util": { + "version": "7.0.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereum-bloom-filters": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ganache-core/node_modules/ethereum-bloom-filters/node_modules/js-sha3": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereum-common": { + "version": "0.0.18", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-abi": { + "version": "0.6.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-account": { + "version": "3.0.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^6.0.0", + "rlp": "^2.2.1", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-blockchain": { + "version": "4.0.4", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.6.1", + "ethashjs": "~0.0.7", + "ethereumjs-block": "~2.2.2", + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.1.0", + "flow-stoplight": "^1.0.0", + "level-mem": "^3.0.1", + "lru-cache": "^5.1.1", + "rlp": "^2.2.2", + "semaphore": "^1.1.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-common": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm": { + "version": "4.2.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "core-js-pure": "^3.0.1", + "ethereumjs-account": "^3.0.0", + "ethereumjs-block": "^2.2.2", + "ethereumjs-blockchain": "^4.0.3", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.2", + "ethereumjs-util": "^6.2.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1", + "util.promisify": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ethereumjs-wallet": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "aes-js": "^3.1.1", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^6.0.0", + "randombytes": "^2.0.6", + "safe-buffer": "^5.1.2", + "scryptsy": "^1.2.1", + "utf8": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "node_modules/ganache-core/node_modules/ethjs-unit": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ethjs-util": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/eventemitter3": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/events": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/ganache-core/node_modules/evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/express": { + "version": "4.17.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/ganache-core/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/express/node_modules/qs": { + "version": "6.7.0", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/express/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ext": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/ext/node_modules/type": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/extend-shallow": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" ], - "inBundle": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/fake-merkle-patricia-tree": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "checkpoint-store": "^1.1.0" + } + }, + "node_modules/ganache-core/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/fetch-ponyfill": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-fetch": "~1.7.1" + } + }, + "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { + "version": "1.2.1", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/micromatch": { + "version": "3.1.10", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/flow-stoplight": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/ganache-core/node_modules/for-in": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/ganache-core/node_modules/forwarded": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/fragment-cache": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/ganache-core/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/get-intrinsic": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ganache-core/node_modules/get-value": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/glob": { + "version": "7.1.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/global": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/ganache-core/node_modules/got": { + "version": "9.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ganache-core/node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/graceful-fs": { + "version": "4.2.4", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/ganache-core/node_modules/has-ansi": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, "license": "MIT", "peer": true, "engines": { "node": ">=4" } }, - "node_modules/ganache/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "node_modules/ganache-core/node_modules/has-symbol-support-x": { + "version": "1.4.2", "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache/node_modules/leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "dependencies": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true, - "dependencies": { - "catering": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true, - "inBundle": true, "license": "MIT", + "optional": true, "peer": true, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/ganache/node_modules/minimalistic-assert": { + "node_modules/ganache-core/node_modules/has-symbols": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, - "inBundle": true, - "license": "ISC", - "peer": true - }, - "node_modules/ganache/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache/node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache/node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "peer": true - }, - "node_modules/ganache/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "inBundle": true, "license": "MIT", "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/ganache-core/node_modules/has-to-string-tag-x": { + "version": "1.4.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, "license": "MIT", - "peer": true + "optional": true, + "peer": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } }, - "node_modules/ganache/node_modules/queue-tick": { + "node_modules/ganache-core/node_modules/has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", "dev": true, - "inBundle": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, "license": "MIT", "peer": true }, - "node_modules/ganache/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/ganache-core/node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/hash-base": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", "dev": true, - "inBundle": true, "license": "MIT", "peer": true, "dependencies": { @@ -8277,10 +11736,136 @@ "node": ">= 6" } }, - "node_modules/ganache/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/ganache-core/node_modules/hash.js": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/heap": { + "version": "0.2.6", + "dev": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/hmac-drbg": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/home-or-tmp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/http-errors": { + "version": "1.7.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/http-https": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/ganache-core/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/idna-uts46-hx": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ganache-core/node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/ieee754": { + "version": "1.2.1", "dev": true, "funding": [ { @@ -8296,21 +11881,447 @@ "url": "https://feross.org/support" } ], - "inBundle": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/ganache-core/node_modules/immediate": { + "version": "3.2.3", + "dev": true, "license": "MIT", "peer": true }, - "node_modules/ganache/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "node_modules/ganache-core/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/ganache-core/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/invariant": { + "version": "2.2.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache-core/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-arguments": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-callable": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/ganache-core/node_modules/is-data-descriptor": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-date-object": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-descriptor": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-extendable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-finite": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ganache-core/node_modules/is-fn": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-function": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/is-hex-prefixed": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/is-negative-zero": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-object": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-regex": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-retry-allowed": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/is-symbol": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/isurl": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ganache-core/node_modules/js-sha3": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/json-buffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/json-rpc-engine": { + "version": "3.8.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "babel-preset-env": "^1.7.0", + "babelify": "^7.3.0", + "json-rpc-error": "^2.0.0", + "promise-to-callback": "^1.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/json-rpc-error": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/ganache-core/node_modules/json-rpc-random-id": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/json-schema": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/json-stable-stringify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/ganache-core/node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/ganache-core/node_modules/jsonify": { + "version": "0.0.0", + "dev": true, + "license": "Public Domain", + "peer": true + }, + "node_modules/ganache-core/node_modules/jsprim": { + "version": "1.4.1", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/ganache-core/node_modules/keccak": { + "version": "3.0.1", "dev": true, "hasInstallScript": true, "inBundle": true, "license": "MIT", "peer": true, "dependencies": { - "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" }, @@ -8318,44 +12329,4093 @@ "node": ">=10.0.0" } }, - "node_modules/ganache/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/ganache-core/node_modules/keyv": { + "version": "3.1.0", "dev": true, - "inBundle": true, "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/ganache/node_modules/utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "hasInstallScript": true, "optional": true, "peer": true, "dependencies": { - "node-gyp-build": "^4.3.0" + "json-buffer": "3.0.0" } }, - "node_modules/ganache/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "node_modules/ganache-core/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/klaw-sync": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/ganache-core/node_modules/level-codec": { + "version": "9.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-errors": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-iterator-stream": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.5", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/level-mem": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/memdown": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-mem/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/level-packager": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-post": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ltgt": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/level-sublevel": { + "version": "6.6.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bytewise": "~1.1.0", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "level-iterator-stream": "^2.0.3", + "ltgt": "~2.1.1", + "pull-defer": "^0.2.2", + "pull-level": "^2.0.3", + "pull-stream": "^3.6.8", + "typewiselite": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/level-ws": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/levelup": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/levelup/node_modules/level-iterator-stream": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/lodash": { + "version": "4.17.20", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/looper": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/loose-envify": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/ganache-core/node_modules/lowercase-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ganache-core/node_modules/ltgt": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/map-cache": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/map-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/md5.js": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree": { + "version": "3.0.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/miller-rabin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/ganache-core/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/mime-db": { + "version": "1.45.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/mime-types": { + "version": "2.1.28", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.45.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/min-document": { + "version": "2.19.0", + "dev": true, + "peer": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/minimatch": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/minizlib": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/ganache-core/node_modules/minizlib/node_modules/minipass": { + "version": "2.9.0", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/ganache-core/node_modules/mixin-deep": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ganache-core/node_modules/mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/mock-fs": { + "version": "4.13.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/multibase": { + "version": "0.6.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/ganache-core/node_modules/multicodec": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/multihashes": { + "version": "0.4.21", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/ganache-core/node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/nanomatch": { + "version": "1.2.13", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/negotiator": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/next-tick": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/node-addon-api": { + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", "peer": true }, + "node_modules/ganache-core/node_modules/node-fetch": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/ganache-core/node_modules/node-gyp-build": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/ganache-core/node_modules/normalize-url": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ganache-core/node_modules/number-to-bn": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object-inspect": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object-is": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ganache-core/node_modules/object-visit": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/object.assign": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object.getownpropertydescriptors": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/object.pick": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/oboe": { + "version": "2.1.4", + "dev": true, + "license": "BSD", + "optional": true, + "peer": true, + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ganache-core/node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/p-cancelable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/p-timeout": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/p-timeout/node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/parse-asn1": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/parse-headers": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/pascalcase": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/ganache-core/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/path-parse": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/pbkdf2": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ganache-core/node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/posix-character-classes": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/precond": { + "version": "0.2.3", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/prepend-http": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/private": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/ganache-core/node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/promise-to-callback": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/proxy-addr": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ganache-core/node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pseudomap": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/public-encrypt": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-core/node_modules/pull-cat": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-defer": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-level": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "level-post": "^1.0.7", + "pull-cat": "^1.1.9", + "pull-live": "^1.0.1", + "pull-pushable": "^2.0.0", + "pull-stream": "^3.4.0", + "pull-window": "^2.1.4", + "stream-to-pull-stream": "^1.7.1" + } + }, + "node_modules/ganache-core/node_modules/pull-live": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "pull-cat": "^1.1.9", + "pull-stream": "^3.4.0" + } + }, + "node_modules/ganache-core/node_modules/pull-pushable": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-stream": { + "version": "3.6.14", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/pull-window": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "looper": "^2.0.0" + } + }, + "node_modules/ganache-core/node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/ganache-core/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/qs": { + "version": "6.5.2", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/query-string": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/ganache-core/node_modules/randomfill": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/ganache-core/node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/raw-body": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/ganache-core/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regenerator-runtime": { + "version": "0.11.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regenerator-transform": { + "version": "0.10.1", + "dev": true, + "license": "BSD", + "peer": true, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/ganache-core/node_modules/regex-not": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/regexp.prototype.flags/node_modules/es-abstract": { + "version": "1.17.7", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/regexpu-core": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/ganache-core/node_modules/regjsgen": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/regjsparser": { + "version": "0.1.5", + "dev": true, + "license": "BSD", + "peer": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/ganache-core/node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/ganache-core/node_modules/repeat-element": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ganache-core/node_modules/repeating": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/node_modules/resolve-url": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/responselike": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/resumer": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "through": "~2.3.4" + } + }, + "node_modules/ganache-core/node_modules/ret": { + "version": "0.1.15", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ganache-core/node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ganache-core/node_modules/ripemd160": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/ganache-core/node_modules/rlp": { + "version": "2.2.6", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.1" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/ganache-core/node_modules/rustbn.js": { + "version": "0.2.0", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "peer": true + }, + "node_modules/ganache-core/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/safe-event-emitter": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "events": "^3.0.0" + } + }, + "node_modules/ganache-core/node_modules/safe-regex": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/ganache-core/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/scrypt-js": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/scryptsy": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pbkdf2": "^3.0.3" + } + }, + "node_modules/ganache-core/node_modules/secp256k1": { + "version": "4.0.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-core/node_modules/seedrandom": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/semaphore": { + "version": "1.1.0", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ganache-core/node_modules/send": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ganache-core/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/send/node_modules/ms": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/serve-static": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ganache-core/node_modules/servify": { + "version": "0.1.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/set-immediate-shim": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/set-value": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/setimmediate": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/setprototypeof": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/sha.js": { + "version": "2.4.11", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/ganache-core/node_modules/simple-concat": { + "version": "1.0.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/simple-get": { + "version": "2.8.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon": { + "version": "0.8.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-node": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-util": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-resolve": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-support": { + "version": "0.5.12", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-url": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/split-string": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/sshpk": { + "version": "1.16.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/static-extend": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/stream-to-pull-stream": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "looper": "^3.0.0", + "pull-stream": "^3.2.3" + } + }, + "node_modules/ganache-core/node_modules/stream-to-pull-stream/node_modules/looper": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/strict-uri-encode": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ganache-core/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/string.prototype.trim": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/string.prototype.trimend": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/string.prototype.trimstart": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/strip-hex-prefix": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-core/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js": { + "version": "0.1.40", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/prepend-http": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/tape": { + "version": "4.13.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.6", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.0.5", + "minimist": "~1.2.5", + "object-inspect": "~1.7.0", + "resolve": "~1.17.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.1", + "through": "~2.3.8" + }, + "bin": { + "tape": "bin/tape" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/glob": { + "version": "7.1.6", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/is-regex": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/object-inspect": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/tape/node_modules/resolve": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/tar": { + "version": "4.4.13", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/ganache-core/node_modules/tar/node_modules/fs-minipass": { + "version": "1.2.7", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/ganache-core/node_modules/tar/node_modules/minipass": { + "version": "2.9.0", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/ganache-core/node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/ganache-core/node_modules/timed-out": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/tmp": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/to-object-path": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/to-object-path/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/to-readable-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/to-regex": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/toidentifier": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ganache-core/node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ganache-core/node_modules/trim-right": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ganache-core/node_modules/tweetnacl": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/tweetnacl-util": { + "version": "0.15.1", + "dev": true, + "license": "Unlicense", + "peer": true + }, + "node_modules/ganache-core/node_modules/type": { + "version": "1.2.0", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ganache-core/node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/typewise": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/ganache-core/node_modules/typewise-core": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/typewiselite": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/ultron": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/underscore": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/union-value": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/ganache-core/node_modules/unorm": { + "version": "1.6.0", + "dev": true, + "license": "MIT or GPL-2.0", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/ganache-core/node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/unset-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/ganache-core/node_modules/urix": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/url-parse-lax": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/url-set-query": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/url-to-options": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ganache-core/node_modules/use": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/utf-8-validate": { + "version": "5.0.4", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "node-gyp-build": "^4.2.0" + } + }, + "node_modules/ganache-core/node_modules/utf8": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/util.promisify": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core/node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/ganache-core/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/ganache-core/node_modules/varint": { + "version": "5.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ganache-core/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/ganache-core/node_modules/web3": { + "version": "1.2.11", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-bzz": "1.2.11", + "web3-core": "1.2.11", + "web3-eth": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-shh": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-bzz": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40", + "underscore": "1.9.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.19.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-core": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-requestmanager": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-helpers": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-method": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-promievent": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-requestmanager": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-providers-http": "1.2.11", + "web3-providers-ipc": "1.2.11", + "web3-providers-ws": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core-subscriptions": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-core/node_modules/@types/node": { + "version": "12.19.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-eth": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-accounts": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-eth-ens": "1.2.11", + "web3-eth-iban": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-abi": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.0.0-beta.153", + "underscore": "1.9.1", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-accounts": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-common": "^1.3.2", + "ethereumjs-tx": "^2.1.1", + "scrypt-js": "^3.0.1", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-contract": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-ens": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-iban": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.9", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-personal": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.19.12", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-net": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine": { + "version": "14.2.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^3.0.0", + "eth-json-rpc-infura": "^3.1.0", + "eth-sig-util": "3.0.0", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.2.0", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/eth-sig-util": { + "version": "1.4.2", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block/node_modules/ethereum-common": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-codec": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-errors": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws": { + "version": "0.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/levelup": { + "version": "1.3.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ltgt": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/object-keys": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/semver": { + "version": "5.4.1", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/string_decoder": { + "version": "0.10.31", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ws": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-providers-http": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-core-helpers": "1.2.11", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-providers-ipc": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-providers-ws": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "websocket": "^1.0.31" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-shh": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-net": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-utils": { + "version": "1.2.11", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ganache-core/node_modules/web3-utils/node_modules/eth-lib": { + "version": "0.2.8", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/ganache-core/node_modules/websocket": { + "version": "1.0.32", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ganache-core/node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ganache-core/node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/whatwg-fetch": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ganache-core/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/ganache-core/node_modules/ws": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ganache-core/node_modules/ws/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/ganache-core/node_modules/xhr": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/xhr-request": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/ganache-core/node_modules/xhr-request-promise": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/ganache-core/node_modules/xhr2-cookies": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/ganache-core/node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/yaeti": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/ganache-core/node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -8373,7 +16433,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -8396,7 +16455,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -8421,7 +16479,6 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, "dependencies": { "chalk": "^2.4.2", "node-emoji": "^1.10.0" @@ -8434,7 +16491,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -8446,7 +16502,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -8460,7 +16515,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -8468,14 +16522,12 @@ "node_modules/ghost-testrpc/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -8484,7 +16536,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -8493,7 +16544,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -8505,7 +16555,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8525,7 +16574,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -8543,7 +16591,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, "dependencies": { "global-prefix": "^3.0.0" }, @@ -8555,7 +16602,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -8569,7 +16615,6 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, "dependencies": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -8588,7 +16633,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "engines": { "node": ">=8" } @@ -8596,14 +16640,12 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, "engines": { "node": ">=4.x" } @@ -8612,7 +16654,6 @@ "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -8656,7 +16697,6 @@ "version": "2.11.2", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz", "integrity": "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==", - "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -8891,7 +16931,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -8903,7 +16942,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -8917,7 +16955,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -8925,20 +16962,17 @@ "node_modules/hardhat/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/hardhat/node_modules/commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, "node_modules/hardhat/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -8947,7 +16981,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -8956,7 +16989,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -8965,7 +16997,6 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, "dependencies": { "command-exists": "^1.2.8", "commander": "3.0.2", @@ -8988,7 +17019,6 @@ "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -9001,7 +17031,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -9010,7 +17039,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -9022,7 +17050,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -9034,7 +17061,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9043,7 +17069,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -9052,7 +17077,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -9064,7 +17088,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -9076,7 +17099,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -9091,7 +17113,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -9111,7 +17132,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -9121,7 +17141,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "bin": { "he": "bin/he" } @@ -9129,14 +17148,12 @@ "node_modules/heap": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -9232,7 +17249,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -9278,7 +17294,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -9291,7 +17306,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -9328,7 +17342,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -9348,23 +17361,14 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, "engines": { "node": ">= 4" } }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true, - "peer": true - }, "node_modules/immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "node_modules/imul": { "version": "1.0.1", @@ -9379,7 +17383,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -9388,7 +17391,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -9397,20 +17399,17 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -9424,7 +17423,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, "engines": { "node": ">= 0.10" } @@ -9443,7 +17441,6 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, "dependencies": { "fp-ts": "^1.0.0" } @@ -9459,7 +17456,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -9471,7 +17467,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -9483,7 +17478,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9499,7 +17493,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, "funding": [ { "type": "github", @@ -9522,7 +17515,6 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz", "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -9530,11 +17522,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "peer": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9545,11 +17549,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9558,7 +17577,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, "engines": { "node": ">=4" } @@ -9567,7 +17585,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -9579,7 +17596,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true, "engines": { "node": ">=6.5.0", "npm": ">=3" @@ -9589,7 +17605,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -9601,7 +17616,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -9610,7 +17624,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9625,7 +17638,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, "engines": { "node": ">=8" } @@ -9634,7 +17646,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9650,7 +17661,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -9662,7 +17672,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9677,7 +17686,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -9698,7 +17706,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "engines": { "node": ">=10" }, @@ -9724,7 +17731,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -9732,6 +17738,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -9741,8 +17760,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isstream": { "version": "0.1.2", @@ -9782,14 +17800,12 @@ "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -9803,16 +17819,6 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "peer": true, - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -9838,9 +17844,9 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -9853,7 +17859,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -9862,7 +17867,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, "engines": { "node": "*" } @@ -9886,7 +17890,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, "hasInstallScript": true, "dependencies": { "node-addon-api": "^2.0.0", @@ -9901,7 +17904,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9910,11 +17912,20 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.9" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -9932,7 +17943,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, "dependencies": { "browser-level": "^1.0.1", "classic-level": "^1.2.0" @@ -9945,115 +17955,10 @@ "url": "https://opencollective.com/level" } }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-codec/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "peer": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "peer": true, - "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "peer": true, - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/level-supports": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true, "engines": { "node": ">=12" } @@ -10062,7 +17967,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, "dependencies": { "buffer": "^6.0.3", "module-error": "^1.0.1" @@ -10071,56 +17975,10 @@ "node": ">=12" } }, - "node_modules/level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "peer": true, - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -10156,9 +18014,9 @@ } }, "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { "big.js": "^5.2.2", @@ -10173,7 +18031,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -10185,8 +18042,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.assign": { "version": "4.2.0", @@ -10195,13 +18051,6 @@ "dev": true, "peer": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "peer": true - }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -10212,7 +18061,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -10251,32 +18099,16 @@ "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true, - "peer": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true - }, "node_modules/markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -10293,7 +18125,6 @@ "version": "0.7.9", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true, "engines": { "node": ">=8.9.0" } @@ -10302,98 +18133,16 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "peer": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true, - "peer": true - }, - "node_modules/memdown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/memory-level": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, "dependencies": { "abstract-level": "^1.0.0", "functional-red-black-tree": "^1.0.1", @@ -10407,7 +18156,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, "engines": { "node": ">= 0.10.0" } @@ -10431,72 +18179,14 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "peer": true, - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -10505,27 +18195,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -10550,20 +18219,17 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10574,14 +18240,12 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, "dependencies": { "minimist": "^1.2.6" }, @@ -10593,7 +18257,6 @@ "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, "dependencies": { "obliterator": "^2.0.0" } @@ -10602,7 +18265,6 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -10643,7 +18305,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, "engines": { "node": ">=6" } @@ -10652,7 +18313,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -10661,7 +18321,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -10677,7 +18336,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -10692,7 +18350,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10703,14 +18360,12 @@ "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10725,7 +18380,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -10740,7 +18394,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -10749,7 +18402,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -10764,7 +18416,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true, "engines": { "node": ">=10" } @@ -10772,8 +18423,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/murmur-128": { "version": "0.2.1", @@ -10790,7 +18440,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -10801,14 +18450,19 @@ "node_modules/napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "peer": true }, "node_modules/no-case": { "version": "3.0.4", @@ -10829,14 +18483,12 @@ "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, "dependencies": { "lodash": "^4.17.21" } @@ -10845,7 +18497,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, "dependencies": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" @@ -10855,15 +18506,14 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "peer": true, "dependencies": { @@ -10885,7 +18535,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "dev": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -10911,7 +18560,6 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, "dependencies": { "abbrev": "1" }, @@ -10946,7 +18594,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -10977,7 +18624,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, "dependencies": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -10990,8 +18636,7 @@ "node_modules/number-to-bn/node_modules/bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/oauth-sign": { "version": "0.9.0", @@ -11015,7 +18660,6 @@ "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11024,7 +18668,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -11033,7 +18676,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "dependencies": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -11048,7 +18690,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dev": true, "dependencies": { "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", @@ -11065,23 +18706,37 @@ "node_modules/obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -11094,13 +18749,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true - }, "node_modules/os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -11118,7 +18766,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11127,7 +18774,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, "dependencies": { "p-try": "^1.0.0" }, @@ -11139,7 +18785,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, "dependencies": { "p-limit": "^1.1.0" }, @@ -11151,7 +18796,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -11166,7 +18810,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, "engines": { "node": ">=4" } @@ -11222,6 +18865,122 @@ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, + "node_modules/patch-package": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "dev": true, + "peer": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/patch-package/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -11233,7 +18992,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, "engines": { "node": ">=4" } @@ -11242,16 +19000,24 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-starts-with": { "version": "2.0.0", @@ -11290,7 +19056,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -11318,7 +19083,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -11473,11 +19237,18 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/postinstall-postinstall": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", + "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", + "dev": true, + "hasInstallScript": true, + "peer": true + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -11522,13 +19293,6 @@ "asap": "~2.0.6" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "peer": true - }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -11554,7 +19318,6 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -11580,7 +19343,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -11600,7 +19362,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -11609,7 +19370,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -11680,7 +19440,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11694,7 +19453,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -11706,7 +19464,6 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, "dependencies": { "resolve": "^1.1.6" }, @@ -11715,32 +19472,31 @@ } }, "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "dependencies": { - "minimatch": "^3.0.5" + "minimatch": "3.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "peer": true, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6" + "node": "*" } }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -11901,7 +19657,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11910,7 +19665,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11926,7 +19680,6 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, "dependencies": { "path-parse": "^1.0.6" }, @@ -11947,7 +19700,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -11957,7 +19709,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -11969,7 +19720,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -11979,7 +19729,6 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, "dependencies": { "bn.js": "^5.2.0" }, @@ -11991,7 +19740,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -12014,7 +19762,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, "funding": [ { "type": "github", @@ -12036,14 +19783,12 @@ "node_modules/rustbn.js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -12062,14 +19807,12 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sc-istanbul": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, "dependencies": { "abbrev": "1.0.x", "async": "1.x", @@ -12094,7 +19837,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -12102,14 +19844,12 @@ "node_modules/sc-istanbul/node_modules/async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" }, "node_modules/sc-istanbul/node_modules/esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -12122,7 +19862,6 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -12138,7 +19877,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12147,7 +19885,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12160,7 +19897,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -12172,14 +19908,12 @@ "node_modules/sc-istanbul/node_modules/resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" }, "node_modules/sc-istanbul/node_modules/supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, "dependencies": { "has-flag": "^1.0.0" }, @@ -12208,14 +19942,12 @@ "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, "hasInstallScript": true, "dependencies": { "elliptic": "^6.5.4", @@ -12226,28 +19958,10 @@ "node": ">=10.0.0" } }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true, - "peer": true - }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.1" - } - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -12256,7 +19970,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "dependencies": { "randombytes": "^2.1.0" } @@ -12264,26 +19977,22 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -12305,11 +20014,33 @@ "node": "*" } }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "peer": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -12326,7 +20057,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12336,6 +20066,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -12362,32 +20102,58 @@ "node": ">=8" } }, - "node_modules/solady": { - "version": "0.0.78", - "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.78.tgz", - "integrity": "sha512-GMc0i+XxaXwGLFlgXjZXByZezaxr+FfTjobdaaeogwXEY1+E4/3pOOvyc+Y9mtKKEKDDC6uwp+fJa46rjsFfNQ==", - "dev": true - }, "node_modules/solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", + "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", "dev": true, "peer": true, "dependencies": { "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", + "commander": "3.0.2", + "fs-extra": "^0.30.0", "js-sha3": "0.8.0", "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", "semver": "^5.5.0", "tmp": "0.0.33" }, "bin": { - "solcjs": "solc.js" + "solcjs": "solcjs" }, "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true, + "peer": true + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, "node_modules/solc/node_modules/semver": { @@ -12404,7 +20170,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.2.tgz", "integrity": "sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ==", - "dev": true, "dependencies": { "@ethersproject/abi": "^5.0.9", "@solidity-parser/parser": "^0.14.1", @@ -12438,7 +20203,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, "engines": { "node": ">=6" } @@ -12447,7 +20211,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, "engines": { "node": ">=6" } @@ -12456,7 +20219,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -12468,7 +20230,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -12477,7 +20238,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } @@ -12486,7 +20246,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -12500,7 +20259,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -12521,7 +20279,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -12532,7 +20289,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -12540,15 +20296,13 @@ "node_modules/solidity-coverage/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/solidity-coverage/node_modules/debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -12557,7 +20311,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12566,7 +20319,6 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, "engines": { "node": ">=0.3.1" } @@ -12574,14 +20326,12 @@ "node_modules/solidity-coverage/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "node_modules/solidity-coverage/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -12590,7 +20340,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "dependencies": { "locate-path": "^3.0.0" }, @@ -12602,7 +20351,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, "dependencies": { "is-buffer": "~2.0.3" }, @@ -12614,7 +20362,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -12629,7 +20376,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -12643,7 +20389,6 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12660,7 +20405,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -12669,7 +20413,6 @@ "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12682,7 +20425,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -12695,7 +20437,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, "dependencies": { "chalk": "^2.4.2" }, @@ -12707,7 +20448,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -12719,7 +20459,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12731,7 +20470,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "dependencies": { "minimist": "^1.2.5" }, @@ -12743,7 +20481,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", - "dev": true, "dependencies": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", @@ -12786,7 +20523,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -12797,14 +20533,12 @@ "node_modules/solidity-coverage/node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "node_modules/solidity-coverage/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -12819,7 +20553,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "dependencies": { "p-limit": "^2.0.0" }, @@ -12831,7 +20564,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -12840,7 +20572,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, "engines": { "node": ">=6" } @@ -12849,7 +20580,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, "dependencies": { "picomatch": "^2.0.4" }, @@ -12860,14 +20590,12 @@ "node_modules/solidity-coverage/node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "node_modules/solidity-coverage/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -12882,7 +20610,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -12896,7 +20623,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -12908,7 +20634,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -12917,7 +20642,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -12928,14 +20652,12 @@ "node_modules/solidity-coverage/node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, "node_modules/solidity-coverage/node_modules/wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -12948,20 +20670,17 @@ "node_modules/solidity-coverage/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/solidity-coverage/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/solidity-coverage/node_modules/yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -12979,7 +20698,6 @@ "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -12989,7 +20707,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, "dependencies": { "flat": "^4.1.0", "lodash": "^4.17.15", @@ -12999,17 +20716,10 @@ "node": ">=6" } }, - "node_modules/solmate": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/solmate/-/solmate-6.7.0.tgz", - "integrity": "sha512-iMPr+gKbKjXBB12a+Iz5Tua5r7T4yugHaGXDWSJbBZB4Gr3vLeUUvKeLyMxCWWqk1xlLhFDFFuAmOzeyVBuyvQ==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -13027,7 +20737,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13072,8 +20781,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/sshpk": { "version": "1.17.0", @@ -13110,7 +20818,6 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, "dependencies": { "type-fest": "^0.7.1" }, @@ -13122,7 +20829,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, "engines": { "node": ">=8" } @@ -13131,7 +20837,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -13145,36 +20850,18 @@ "node": ">=0.10.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true, - "peer": true - }, "node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -13187,7 +20874,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, "engines": { "node": ">=4" } @@ -13196,7 +20882,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, @@ -13208,7 +20893,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -13222,7 +20906,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -13236,7 +20919,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13261,7 +20943,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, "dependencies": { "is-hex-prefixed": "1.0.0" }, @@ -13274,7 +20955,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -13286,7 +20966,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -13333,42 +21012,6 @@ "node": ">=10.0.0" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/table/node_modules/ajv": { "version": "8.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", @@ -13481,6 +21124,33 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/test-value": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/test-value/node_modules/array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "dev": true, + "peer": true, + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/testrpc": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", @@ -13535,7 +21205,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -13547,7 +21216,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -13559,7 +21227,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "engines": { "node": ">=0.6" } @@ -13593,88 +21260,121 @@ "dev": true, "peer": true }, - "node_modules/ts-command-line-args": { + "node_modules/ts-essentials": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", + "dev": true, + "peer": true + }, + "node_modules/ts-generator": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" + }, + "bin": { + "ts-generator": "dist/cli/run.js" + } + }, + "node_modules/ts-generator/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-generator/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz", - "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "peer": true, "dependencies": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "bin": { - "write-markdown": "dist/write-markdown.js" + "engines": { + "node": ">=4" } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "node_modules/ts-generator/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "peer": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "color-name": "1.1.3" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/ts-generator/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/ts-generator/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "peer": true, "engines": { - "node": ">=0.3.1" + "node": ">=0.8.0" + } + }, + "node_modules/ts-generator/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-generator/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -13691,20 +21391,17 @@ "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "node_modules/tweetnacl-util": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, @@ -13725,7 +21422,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -13734,68 +21430,28 @@ } }, "node_modules/typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", "dev": true, "peer": true, "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", + "command-line-args": "^4.0.7", + "debug": "^4.1.1", "fs-extra": "^7.0.0", - "glob": "7.1.7", "js-sha3": "^0.8.0", "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" + "ts-essentials": "^6.0.3", + "ts-generator": "^0.1.1" }, "bin": { "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/typechain/node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", "dev": true, "peer": true, "peerDependencies": { @@ -13812,7 +21468,7 @@ "version": "4.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true, + "devOptional": true, "peer": true, "bin": { "tsc": "bin/tsc", @@ -13823,20 +21479,16 @@ } }, "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } + "peer": true }, "node_modules/uglify-js": { "version": "3.17.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", - "dev": true, "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -13849,7 +21501,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -13861,13 +21512,9 @@ } }, "node_modules/undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", + "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==", "engines": { "node": ">=12.18" } @@ -13876,7 +21523,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -13885,7 +21531,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -13946,14 +21591,12 @@ "node_modules/utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utila": { "version": "0.4.0", @@ -13965,18 +21608,10 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "peer": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -14092,7 +21727,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", - "dev": true, "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -14110,7 +21744,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -14133,7 +21766,6 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -14223,7 +21855,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -14235,7 +21866,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -14258,7 +21888,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, "dependencies": { "string-width": "^1.0.2 || 2" } @@ -14280,7 +21909,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14288,44 +21916,17 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "peer": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14342,7 +21943,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -14351,7 +21951,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14364,14 +21963,12 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, "engines": { "node": ">=8.3.0" }, @@ -14397,21 +21994,10 @@ "node": ">=0.4.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -14419,14 +22005,12 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -14444,7 +22028,6 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, "engines": { "node": ">=10" } @@ -14453,7 +22036,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -14468,7 +22050,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -14477,7 +22058,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14487,21 +22067,10 @@ "node": ">=8" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -14526,29 +22095,6 @@ "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", "dev": true }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, "@ensdomains/ens": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", @@ -14749,454 +22295,77 @@ "peer": true }, "@ethereum-waffle/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", + "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", "dev": true, "peer": true, "requires": { - "@ethereum-waffle/provider": "4.0.5", - "debug": "^4.3.4", - "json-bigint": "^1.0.0" + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.5.2" } }, "@ethereum-waffle/compiler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", - "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", + "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", "dev": true, "peer": true, "requires": { "@resolver-engine/imports": "^0.3.3", "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^10.0.0", + "@typechain/ethers-v5": "^2.0.0", "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.6.1", + "@types/node-fetch": "^2.5.5", + "ethers": "^5.0.1", "mkdirp": "^0.5.1", - "node-fetch": "^2.6.7" + "node-fetch": "^2.6.1", + "solc": "^0.6.3", + "ts-generator": "^0.1.1", + "typechain": "^3.0.0" } }, "@ethereum-waffle/ens": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", - "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", + "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", "dev": true, "peer": true, - "requires": {} + "requires": { + "@ensdomains/ens": "^0.4.4", + "@ensdomains/resolver": "^0.2.4", + "ethers": "^5.5.2" + } }, "@ethereum-waffle/mock-contract": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", - "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", + "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", "dev": true, "peer": true, - "requires": {} + "requires": { + "@ethersproject/abi": "^5.5.0", + "ethers": "^5.5.2" + } }, "@ethereum-waffle/provider": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", - "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", + "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", "dev": true, "peer": true, "requires": { - "@ethereum-waffle/ens": "4.0.3", - "@ganache/ethereum-options": "0.1.4", - "debug": "^4.3.4", - "ganache": "7.4.3" - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "peer": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "peer": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/common": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", - "dev": true, - "peer": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/common": "^2.6.0", - "ethereumjs-util": "^7.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/vm": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", - "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/block": "^3.6.0", - "@ethereumjs/blockchain": "^5.5.0", - "@ethereumjs/common": "^2.6.0", - "@ethereumjs/tx": "^3.4.0", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^2.2.0", - "ethereumjs-util": "^7.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.2", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - } + "@ethereum-waffle/ens": "^3.4.4", + "ethers": "^5.5.2", + "ganache-core": "^2.13.2", + "patch-package": "^6.2.2", + "postinstall-postinstall": "^2.1.0" } }, "@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, "requires": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -15213,7 +22382,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -15228,7 +22396,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -15241,7 +22408,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, "requires": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -15254,7 +22420,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.7.0" } @@ -15273,7 +22438,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -15284,7 +22448,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, "requires": { "@ethersproject/logger": "^5.7.0" } @@ -15293,7 +22456,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, "requires": { "@ethersproject/bignumber": "^5.7.0" } @@ -15320,7 +22482,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, "requires": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -15378,7 +22539,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" @@ -15387,14 +22547,12 @@ "@ethersproject/logger": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, "@ethersproject/networks": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, "requires": { "@ethersproject/logger": "^5.7.0" } @@ -15413,7 +22571,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, "requires": { "@ethersproject/logger": "^5.7.0" } @@ -15460,7 +22617,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -15481,7 +22637,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -15509,7 +22664,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, "requires": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -15520,7 +22674,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, "requires": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -15571,7 +22724,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, "requires": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -15593,157 +22745,6 @@ "@ethersproject/strings": "^5.7.0" } }, - "@ganache/ethereum-address": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", - "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", - "dev": true, - "peer": true, - "requires": { - "@ganache/utils": "0.1.4" - } - }, - "@ganache/ethereum-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", - "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", - "dev": true, - "peer": true, - "requires": { - "@ganache/ethereum-address": "0.1.4", - "@ganache/ethereum-utils": "0.1.4", - "@ganache/options": "0.1.4", - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "@ganache/ethereum-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", - "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", - "dev": true, - "peer": true, - "requires": { - "@ethereumjs/common": "2.6.0", - "@ethereumjs/tx": "3.4.0", - "@ethereumjs/vm": "5.6.0", - "@ganache/ethereum-address": "0.1.4", - "@ganache/rlp": "0.1.4", - "@ganache/utils": "0.1.4", - "emittery": "0.10.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "7.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ganache/options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", - "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", - "dev": true, - "peer": true, - "requires": { - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "@ganache/rlp": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", - "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", - "dev": true, - "peer": true, - "requires": { - "@ganache/utils": "0.1.4", - "rlp": "2.2.6" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - }, - "rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.1" - } - } - } - }, - "@ganache/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", - "dev": true, - "peer": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.9", - "emittery": "0.10.0", - "keccak": "3.0.1", - "seedrandom": "3.0.5" - }, - "dependencies": { - "keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "peer": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - } - } - }, "@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", @@ -15797,7 +22798,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, "requires": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -15806,43 +22806,20 @@ "tweetnacl-util": "^0.15.1" } }, - "@morgan-stanley/ts-mocking-bird": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", - "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", - "dev": true, - "peer": true, - "requires": { - "lodash": "^4.17.16", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true, - "peer": true - } - } - }, "@noble/hashes": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "dev": true + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" }, "@noble/secp256k1": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", - "dev": true + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -15851,14 +22828,12 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -15868,7 +22843,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -15882,7 +22856,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -15907,7 +22880,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-block": "^4.0.0", "@nomicfoundation/ethereumjs-common": "^3.0.0", @@ -15927,7 +22899,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -15952,7 +22923,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-util": "^8.0.0", "crc-32": "^1.2.0" @@ -15962,7 +22932,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-block": "^4.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -15976,7 +22945,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16001,7 +22969,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-util": "^8.0.0", @@ -16017,7 +22984,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16041,14 +23007,12 @@ "@nomicfoundation/ethereumjs-rlp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", - "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", - "dev": true + "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==" }, "@nomicfoundation/ethereumjs-statemanager": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -16063,7 +23027,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16088,7 +23051,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-rlp": "^4.0.0", "@nomicfoundation/ethereumjs-util": "^8.0.0", @@ -16100,7 +23062,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16125,7 +23086,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-common": "^3.0.0", "@nomicfoundation/ethereumjs-rlp": "^4.0.0", @@ -16137,7 +23097,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16162,7 +23121,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", "ethereum-cryptography": "0.1.3" @@ -16172,7 +23130,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16197,7 +23154,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", - "dev": true, "requires": { "@nomicfoundation/ethereumjs-block": "^4.0.0", "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", @@ -16221,7 +23177,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -16242,91 +23197,10 @@ } } }, - "@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", - "dev": true, - "peer": true, - "requires": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "dependencies": { - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "peer": true, - "requires": { - "type-detect": "^4.0.0" - } - } - } - }, - "@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.8.tgz", - "integrity": "sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q==", - "dev": true, - "requires": { - "ethereumjs-util": "^7.1.4" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@nomicfoundation/hardhat-toolbox": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.1.tgz", - "integrity": "sha512-/pr8m9xlqiNlq6fXv4hEPNwdNwUhysoB2qbDCKqERfPpq34EydUQTC3Vis4aIea8RLwSrU8sDXFdv4TQxYstKw==", - "dev": true, - "requires": {} - }, "@nomicfoundation/solidity-analyzer": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz", "integrity": "sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg==", - "dev": true, "requires": { "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.0.3", "@nomicfoundation/solidity-analyzer-darwin-x64": "0.0.3", @@ -16344,70 +23218,60 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz", "integrity": "sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-darwin-x64": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz", "integrity": "sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-freebsd-x64": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz", "integrity": "sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz", "integrity": "sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz", "integrity": "sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz", "integrity": "sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-linux-x64-musl": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz", "integrity": "sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz", "integrity": "sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz", "integrity": "sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A==", - "dev": true, "optional": true }, "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz", "integrity": "sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ==", - "dev": true, "optional": true }, "@nomiclabs/hardhat-ethers": { @@ -16494,11 +23358,14 @@ } }, "@nomiclabs/hardhat-waffle": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.5.tgz", - "integrity": "sha512-U1RH9OQ1mWYQfb+moX5aTgGjpVVlOcpiFI47wwnaGG4kLhcTy90cNiapoqZenxcRAITVbr0/+QSduINL5EsUIQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz", + "integrity": "sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg==", "dev": true, - "requires": {} + "requires": { + "@types/sinon-chai": "^3.2.3", + "@types/web3": "1.0.19" + } }, "@openzeppelin/contracts": { "version": "4.7.3", @@ -16612,14 +23479,12 @@ "@scure/base": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" }, "@scure/bip32": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "dev": true, "requires": { "@noble/hashes": "~1.1.1", "@noble/secp256k1": "~1.6.0", @@ -16630,7 +23495,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "dev": true, "requires": { "@noble/hashes": "~1.1.1", "@scure/base": "~1.1.0" @@ -16640,7 +23504,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, "requires": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -16653,7 +23516,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, "requires": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -16664,7 +23526,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, "requires": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -16675,7 +23536,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, "requires": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -16692,7 +23552,6 @@ "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, "requires": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -16704,14 +23563,12 @@ "@sentry/types": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" }, "@sentry/utils": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, "requires": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -16721,138 +23578,29 @@ "version": "0.14.3", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "dev": true, "requires": { "antlr4ts": "^0.5.0-alpha.4" } }, - "@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-gyp-build": "4.3.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true, - "peer": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "peer": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "peer": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true, - "peer": true - }, "@typechain/ethers-v5": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", - "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", "dev": true, "peer": true, "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "dependencies": { - "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peer": true, - "requires": {} - } + "ethers": "^5.0.2" } }, - "@typechain/hardhat": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz", - "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@types/abstract-leveldown": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz", - "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==", - "dev": true, - "peer": true - }, "@types/async-eventemitter": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true + "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==" }, "@types/bn.js": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dev": true, "requires": { "@types/node": "*" } @@ -16861,18 +23609,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", - "dev": true, - "peer": true - }, - "@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "peer": true, - "requires": { - "@types/chai": "*" - } + "dev": true }, "@types/concat-stream": { "version": "1.6.1", @@ -16922,7 +23659,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" @@ -16940,36 +23676,15 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true, - "peer": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "peer": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, "@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" }, "@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "@types/mkdirp": { "version": "0.5.2", @@ -16981,18 +23696,10 @@ "@types/node": "*" } }, - "@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true, - "peer": true - }, "@types/node": { "version": "18.7.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.18.tgz", - "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==", - "dev": true + "integrity": "sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==" }, "@types/node-fetch": { "version": "2.6.2", @@ -17009,7 +23716,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, "requires": { "@types/node": "*" } @@ -17027,20 +23733,69 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, "@types/secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, "requires": { "@types/node": "*" } }, + "@types/sinon": { + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "@types/web3": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz", + "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" }, "@vue/compiler-sfc": { "version": "2.7.10", @@ -17262,17 +24017,22 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "peer": true + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==" }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, "requires": { "event-target-shim": "^5.0.0" } @@ -17281,7 +24041,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, "requires": { "buffer": "^6.0.3", "catering": "^2.1.0", @@ -17292,43 +24051,6 @@ "queue-microtask": "^1.2.3" } }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, "acorn": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", @@ -17342,24 +24064,15 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "peer": true - }, "address": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "dev": true + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" }, "adm-zip": { "version": "0.4.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" }, "aes-js": { "version": "3.0.0", @@ -17371,7 +24084,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" } @@ -17380,7 +24092,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -17409,20 +24120,17 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, "optional": true }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" } @@ -17430,14 +24138,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -17445,44 +24151,36 @@ "antlr4ts": { "version": "0.5.0-alpha.4", "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "dev": true, - "peer": true + "peer": true, + "requires": { + "typical": "^2.6.1" + } }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array-uniq": { "version": "1.0.3", @@ -17494,7 +24192,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -17540,7 +24237,6 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, "requires": { "lodash": "^4.17.14" } @@ -17549,7 +24245,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, "requires": { "async": "^2.4.0" } @@ -17560,12 +24255,6 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -17590,14 +24279,12 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base-x": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -17605,8 +24292,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -17641,7 +24327,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.6.tgz", "integrity": "sha512-k5ljSLHx94jQTW3+18KEfxLJR8/XFBHqhfhEGF48qT8p/jL6EdiG7oNOiiIRGMFh2wEP8kaCXZbVd+5dYkngUg==", - "dev": true, "requires": { "bigint-mod-arith": "^3.1.0" } @@ -17649,8 +24334,7 @@ "bigint-mod-arith": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.1.tgz", - "integrity": "sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ==", - "dev": true + "integrity": "sha512-SzFqdncZKXq5uh3oLFZXmzaZEMDsA7ml9l53xKaVGO6/+y26xNwAaTQEg2R+D+d07YduLbKi0dni3YPsR51UDQ==" }, "bignumber.js": { "version": "9.1.0", @@ -17661,36 +24345,12 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true, - "peer": true - } - } + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, "bluebird": { "version": "3.7.2", @@ -17701,8 +24361,7 @@ "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "boolbase": { "version": "1.0.0", @@ -17714,7 +24373,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17724,7 +24382,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -17732,14 +24389,12 @@ "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "browser-level": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, "requires": { "abstract-level": "^1.0.2", "catering": "^2.1.1", @@ -17750,14 +24405,12 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -17783,7 +24436,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, "requires": { "base-x": "^3.0.2" } @@ -17792,7 +24444,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, "requires": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -17803,7 +24454,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -17812,35 +24462,22 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -17867,8 +24504,7 @@ "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "caniuse-lite": { "version": "1.0.30001400", @@ -17885,8 +24521,7 @@ "catering": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" }, "cbor": { "version": "5.2.0", @@ -17926,7 +24561,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17948,7 +24582,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -17969,14 +24602,12 @@ "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -17986,7 +24617,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", - "dev": true, "requires": { "abstract-level": "^1.0.2", "catering": "^2.1.0", @@ -18007,8 +24637,7 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-table3": { "version": "0.5.1", @@ -18025,7 +24654,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -18035,14 +24663,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -18062,7 +24688,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -18070,8 +24695,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colors": { "version": "1.4.0", @@ -18091,112 +24715,18 @@ "command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" }, "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", "dev": true, "peer": true, "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "peer": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true - } + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" } }, "commander": { @@ -18208,8 +24738,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", @@ -18267,15 +24796,7 @@ "cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", - "dev": true, - "peer": true + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "core-util-is": { "version": "1.0.2", @@ -18286,14 +24807,12 @@ "crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -18306,7 +24825,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -18316,12 +24834,28 @@ "sha.js": "^2.4.8" } }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "peer": true + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true + } + } }, "crypt": { "version": "0.0.2", @@ -18420,14 +24954,12 @@ "death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==" }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -18435,8 +24967,7 @@ "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" }, "deep-eql": { "version": "3.0.1", @@ -18447,72 +24978,15 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "peer": true - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "requires": { - "xtend": "^4.0.2" - } - } - } + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -18539,14 +25013,12 @@ "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "detect-port": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dev": true, "requires": { "address": "^1.0.1", "debug": "4" @@ -18555,14 +25027,12 @@ "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" }, "difflib": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, "requires": { "heap": ">= 0.2.0" } @@ -18571,7 +25041,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, "requires": { "path-type": "^4.0.0" }, @@ -18579,8 +25048,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" } } }, @@ -18674,7 +25142,6 @@ "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -18688,23 +25155,14 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "peer": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -18718,19 +25176,6 @@ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", "dev": true }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, "enhanced-resolve": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", @@ -18745,7 +25190,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -18759,18 +25203,7 @@ "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "peer": true, - "requires": { - "prr": "~1.0.1" - } + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "error-ex": { "version": "1.3.2", @@ -18786,7 +25219,6 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -18817,7 +25249,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18830,8 +25261,7 @@ "es-array-method-boxes-properly": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, "es-module-lexer": { "version": "0.9.3", @@ -18843,7 +25273,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -18853,20 +25282,17 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "escodegen": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, "requires": { "esprima": "^2.7.1", "estraverse": "^1.9.1", @@ -18878,20 +25304,17 @@ "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" }, "estraverse": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==" }, "source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, "optional": true, "requires": { "amdefine": ">=0.0.4" @@ -18912,8 +25335,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esrecurse": { "version": "4.3.0", @@ -18941,8 +25363,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eth-ens-namehash": { "version": "2.0.8", @@ -19449,7 +25870,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, "requires": { "js-sha3": "^0.8.0" } @@ -19458,7 +25878,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, "requires": { "@noble/hashes": "1.1.2", "@noble/secp256k1": "1.6.3", @@ -19467,25 +25886,23 @@ } }, "ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", + "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", "dev": true, "peer": true, "requires": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" + "@ethereum-waffle/chai": "^3.4.4", + "@ethereum-waffle/compiler": "^3.4.4", + "@ethereum-waffle/mock-contract": "^3.4.4", + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.0.1" } }, "ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -19494,8 +25911,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -19503,7 +25919,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -19518,7 +25933,6 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, "requires": { "@types/node": "*" } @@ -19526,14 +25940,12 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -19596,7 +26008,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, "requires": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -19605,8 +26016,7 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, @@ -19614,7 +26024,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -19623,8 +26032,7 @@ "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "events": { "version": "3.3.0", @@ -19636,7 +26044,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -19664,7 +26071,6 @@ "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -19682,14 +26088,12 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -19698,35 +26102,55 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", "dev": true, "peer": true, "requires": { - "array-back": "^3.0.1" + "array-back": "^1.0.4", + "test-value": "^2.1.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "dev": true, + "peer": true, + "requires": { + "typical": "^2.6.0" + } + } } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, "requires": { "locate-path": "^2.0.0" } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "peer": true, + "requires": { + "micromatch": "^4.0.2" + } + }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, "fmix": { "version": "0.1.0", @@ -19740,8 +26164,7 @@ "follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "forever-agent": { "version": "0.6.1", @@ -19764,8 +26187,7 @@ "fp-ts": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" }, "fs": { "version": "0.0.1-security", @@ -19777,7 +26199,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -19793,27 +26214,23 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -19824,414 +26241,17 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "ganache": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", - "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", - "dev": true, - "peer": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "bufferutil": "4.0.5", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3", - "utf-8-validate": "5.0.7" - }, - "dependencies": { - "@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "node-gyp-build": "4.4.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "bundled": true, - "dev": true, - "peer": true - } - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "bundled": true, - "dev": true, - "peer": true - }, - "@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "bundled": true, - "dev": true, - "peer": true - }, - "@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "bundled": true, - "dev": true, - "peer": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "bundled": true, - "dev": true, - "peer": true - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "bundled": true, - "dev": true, - "peer": true - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "queue-tick": "^1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "bundled": true, - "dev": true, - "peer": true - } - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "bundled": true, - "dev": true, - "peer": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "bundled": true, - "dev": true, - "peer": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "bundled": true, - "dev": true, - "peer": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "bundled": true, - "dev": true, - "peer": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "bundled": true, - "dev": true, - "peer": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "bundled": true, - "dev": true, - "peer": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "bundled": true, - "dev": true, - "peer": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "bundled": true, - "dev": true, - "peer": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "bundled": true, - "dev": true, - "peer": true - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "bundled": true, - "dev": true, - "peer": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "bundled": true, - "dev": true, - "peer": true - }, - "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "bundled": true, - "dev": true, - "peer": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "bundled": true, - "dev": true, - "peer": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "bundled": true, - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "bundled": true, - "dev": true, - "peer": true - } - } + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "ganache-cli": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", "integrity": "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==", - "dev": true, "requires": { "ethereumjs-util": "6.2.1", "source-map-support": "0.5.12", @@ -20241,20 +26261,17 @@ "@types/bn.js": { "version": "4.11.6", "bundled": true, - "dev": true, "requires": { "@types/node": "*" } }, "@types/node": { "version": "14.11.2", - "bundled": true, - "dev": true + "bundled": true }, "@types/pbkdf2": { "version": "3.1.0", "bundled": true, - "dev": true, "requires": { "@types/node": "*" } @@ -20262,20 +26279,17 @@ "@types/secp256k1": { "version": "4.0.1", "bundled": true, - "dev": true, "requires": { "@types/node": "*" } }, "ansi-regex": { "version": "4.1.0", - "bundled": true, - "dev": true + "bundled": true }, "ansi-styles": { "version": "3.2.1", "bundled": true, - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -20283,30 +26297,25 @@ "base-x": { "version": "3.0.8", "bundled": true, - "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "blakejs": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "bn.js": { "version": "4.11.9", - "bundled": true, - "dev": true + "bundled": true }, "brorand": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "browserify-aes": { "version": "1.2.0", "bundled": true, - "dev": true, "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -20319,7 +26328,6 @@ "bs58": { "version": "4.0.1", "bundled": true, - "dev": true, "requires": { "base-x": "^3.0.2" } @@ -20327,7 +26335,6 @@ "bs58check": { "version": "2.1.2", "bundled": true, - "dev": true, "requires": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -20336,23 +26343,19 @@ }, "buffer-from": { "version": "1.1.1", - "bundled": true, - "dev": true + "bundled": true }, "buffer-xor": { "version": "1.0.3", - "bundled": true, - "dev": true + "bundled": true }, "camelcase": { "version": "5.3.1", - "bundled": true, - "dev": true + "bundled": true }, "cipher-base": { "version": "1.0.4", "bundled": true, - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -20361,7 +26364,6 @@ "cliui": { "version": "5.0.0", "bundled": true, - "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -20371,20 +26373,17 @@ "color-convert": { "version": "1.9.3", "bundled": true, - "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", - "bundled": true, - "dev": true + "bundled": true }, "create-hash": { "version": "1.2.0", "bundled": true, - "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -20396,7 +26395,6 @@ "create-hmac": { "version": "1.1.7", "bundled": true, - "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -20409,7 +26407,6 @@ "cross-spawn": { "version": "6.0.5", "bundled": true, - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -20420,13 +26417,11 @@ }, "decamelize": { "version": "1.2.0", - "bundled": true, - "dev": true + "bundled": true }, "elliptic": { "version": "6.5.3", "bundled": true, - "dev": true, "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -20439,13 +26434,11 @@ }, "emoji-regex": { "version": "7.0.3", - "bundled": true, - "dev": true + "bundled": true }, "end-of-stream": { "version": "1.4.4", "bundled": true, - "dev": true, "requires": { "once": "^1.4.0" } @@ -20453,7 +26446,6 @@ "ethereum-cryptography": { "version": "0.1.3", "bundled": true, - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -20475,7 +26467,6 @@ "ethereumjs-util": { "version": "6.2.1", "bundled": true, - "dev": true, "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -20489,7 +26480,6 @@ "ethjs-util": { "version": "0.1.6", "bundled": true, - "dev": true, "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -20498,7 +26488,6 @@ "evp_bytestokey": { "version": "1.0.3", "bundled": true, - "dev": true, "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -20507,7 +26496,6 @@ "execa": { "version": "1.0.0", "bundled": true, - "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -20521,20 +26509,17 @@ "find-up": { "version": "3.0.0", "bundled": true, - "dev": true, "requires": { "locate-path": "^3.0.0" } }, "get-caller-file": { "version": "2.0.5", - "bundled": true, - "dev": true + "bundled": true }, "get-stream": { "version": "4.1.0", "bundled": true, - "dev": true, "requires": { "pump": "^3.0.0" } @@ -20542,7 +26527,6 @@ "hash-base": { "version": "3.1.0", "bundled": true, - "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -20552,7 +26536,6 @@ "hash.js": { "version": "1.1.7", "bundled": true, - "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -20561,7 +26544,6 @@ "hmac-drbg": { "version": "1.0.1", "bundled": true, - "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -20570,38 +26552,31 @@ }, "inherits": { "version": "2.0.4", - "bundled": true, - "dev": true + "bundled": true }, "invert-kv": { "version": "2.0.0", - "bundled": true, - "dev": true + "bundled": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true, - "dev": true + "bundled": true }, "is-hex-prefixed": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "is-stream": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "isexe": { "version": "2.0.0", - "bundled": true, - "dev": true + "bundled": true }, "keccak": { "version": "3.0.1", "bundled": true, - "dev": true, "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" @@ -20610,7 +26585,6 @@ "lcid": { "version": "2.0.0", "bundled": true, - "dev": true, "requires": { "invert-kv": "^2.0.0" } @@ -20618,7 +26592,6 @@ "locate-path": { "version": "3.0.0", "bundled": true, - "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -20627,7 +26600,6 @@ "map-age-cleaner": { "version": "0.1.3", "bundled": true, - "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -20635,7 +26607,6 @@ "md5.js": { "version": "1.3.5", "bundled": true, - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -20645,7 +26616,6 @@ "mem": { "version": "4.3.0", "bundled": true, - "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", @@ -20654,38 +26624,31 @@ }, "mimic-fn": { "version": "2.1.0", - "bundled": true, - "dev": true + "bundled": true }, "minimalistic-assert": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "nice-try": { "version": "1.0.5", - "bundled": true, - "dev": true + "bundled": true }, "node-addon-api": { "version": "2.0.2", - "bundled": true, - "dev": true + "bundled": true }, "node-gyp-build": { "version": "4.2.3", - "bundled": true, - "dev": true + "bundled": true }, "npm-run-path": { "version": "2.0.2", "bundled": true, - "dev": true, "requires": { "path-key": "^2.0.0" } @@ -20693,7 +26656,6 @@ "once": { "version": "1.4.0", "bundled": true, - "dev": true, "requires": { "wrappy": "1" } @@ -20701,7 +26663,6 @@ "os-locale": { "version": "3.1.0", "bundled": true, - "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -20710,23 +26671,19 @@ }, "p-defer": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "p-finally": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "p-is-promise": { "version": "2.1.0", - "bundled": true, - "dev": true + "bundled": true }, "p-limit": { "version": "2.3.0", "bundled": true, - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -20734,30 +26691,25 @@ "p-locate": { "version": "3.0.0", "bundled": true, - "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", - "bundled": true, - "dev": true + "bundled": true }, "path-exists": { "version": "3.0.0", - "bundled": true, - "dev": true + "bundled": true }, "path-key": { "version": "2.0.1", - "bundled": true, - "dev": true + "bundled": true }, "pbkdf2": { "version": "3.1.1", "bundled": true, - "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -20769,7 +26721,6 @@ "pump": { "version": "3.0.0", "bundled": true, - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -20778,7 +26729,6 @@ "randombytes": { "version": "2.1.0", "bundled": true, - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -20786,7 +26736,6 @@ "readable-stream": { "version": "3.6.0", "bundled": true, - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -20795,18 +26744,15 @@ }, "require-directory": { "version": "2.1.1", - "bundled": true, - "dev": true + "bundled": true }, "require-main-filename": { "version": "2.0.0", - "bundled": true, - "dev": true + "bundled": true }, "ripemd160": { "version": "2.0.2", "bundled": true, - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -20815,25 +26761,21 @@ "rlp": { "version": "2.2.6", "bundled": true, - "dev": true, "requires": { "bn.js": "^4.11.1" } }, "safe-buffer": { "version": "5.2.1", - "bundled": true, - "dev": true + "bundled": true }, "scrypt-js": { "version": "3.0.1", - "bundled": true, - "dev": true + "bundled": true }, "secp256k1": { "version": "4.0.2", "bundled": true, - "dev": true, "requires": { "elliptic": "^6.5.2", "node-addon-api": "^2.0.0", @@ -20842,23 +26784,19 @@ }, "semver": { "version": "5.7.1", - "bundled": true, - "dev": true + "bundled": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, - "dev": true + "bundled": true }, "setimmediate": { "version": "1.0.5", - "bundled": true, - "dev": true + "bundled": true }, "sha.js": { "version": "2.4.11", "bundled": true, - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -20867,30 +26805,25 @@ "shebang-command": { "version": "1.2.0", "bundled": true, - "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "signal-exit": { "version": "3.0.3", - "bundled": true, - "dev": true + "bundled": true }, "source-map": { "version": "0.6.1", - "bundled": true, - "dev": true + "bundled": true }, "source-map-support": { "version": "0.5.12", "bundled": true, - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -20899,7 +26832,6 @@ "string_decoder": { "version": "1.3.0", "bundled": true, - "dev": true, "requires": { "safe-buffer": "~5.2.0" } @@ -20907,7 +26839,6 @@ "string-width": { "version": "3.1.0", "bundled": true, - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -20917,46 +26848,39 @@ "strip-ansi": { "version": "5.2.0", "bundled": true, - "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "strip-eof": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "strip-hex-prefix": { "version": "1.0.0", "bundled": true, - "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } }, "util-deprecate": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "which": { "version": "1.3.1", "bundled": true, - "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", - "bundled": true, - "dev": true + "bundled": true }, "wrap-ansi": { "version": "5.1.0", "bundled": true, - "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -20965,18 +26889,15 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "y18n": { "version": "4.0.0", - "bundled": true, - "dev": true + "bundled": true }, "yargs": { "version": "13.2.4", "bundled": true, - "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -20994,7 +26915,6 @@ "yargs-parser": { "version": "13.1.2", "bundled": true, - "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -21002,11 +26922,7962 @@ } } }, + "ganache-core": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", + "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "3.0.0", + "async": "2.6.2", + "bip39": "2.5.0", + "cachedown": "1.0.0", + "clone": "2.1.2", + "debug": "3.2.6", + "encoding-down": "5.0.4", + "eth-sig-util": "3.0.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-account": "3.0.0", + "ethereumjs-block": "2.2.2", + "ethereumjs-common": "1.5.0", + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "6.2.1", + "ethereumjs-vm": "4.2.0", + "ethereumjs-wallet": "0.6.5", + "heap": "0.2.6", + "keccak": "3.0.1", + "level-sublevel": "6.6.4", + "levelup": "3.1.1", + "lodash": "4.17.20", + "lru-cache": "5.1.1", + "merkle-patricia-tree": "3.0.0", + "patch-package": "6.2.2", + "seedrandom": "3.0.1", + "source-map-support": "0.5.12", + "tmp": "0.1.0", + "web3": "1.2.11", + "web3-provider-engine": "14.2.1", + "websocket": "1.0.32" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.0.0-beta.153", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/address": ">=5.0.0-beta.128", + "@ethersproject/bignumber": ">=5.0.0-beta.130", + "@ethersproject/bytes": ">=5.0.0-beta.129", + "@ethersproject/constants": ">=5.0.0-beta.128", + "@ethersproject/hash": ">=5.0.0-beta.128", + "@ethersproject/keccak256": ">=5.0.0-beta.127", + "@ethersproject/logger": ">=5.0.0-beta.129", + "@ethersproject/properties": ">=5.0.0-beta.131", + "@ethersproject/strings": ">=5.0.0-beta.130" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/networks": "^5.0.7", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/transactions": "^5.0.9", + "@ethersproject/web": "^5.0.12" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.0.10", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/abstract-provider": "^5.0.8", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7" + } + }, + "@ethersproject/address": { + "version": "5.0.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/rlp": "^5.0.7" + } + }, + "@ethersproject/base64": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9" + } + }, + "@ethersproject/bignumber": { + "version": "5.0.13", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "bn.js": "^4.4.0" + } + }, + "@ethersproject/bytes": { + "version": "5.0.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/constants": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bignumber": "^5.0.13" + } + }, + "@ethersproject/hash": { + "version": "5.0.10", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/abstract-signer": "^5.0.10", + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "@ethersproject/keccak256": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "js-sha3": "0.5.7" + } + }, + "@ethersproject/logger": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true + }, + "@ethersproject/networks": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/properties": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/rlp": { + "version": "5.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/signing-key": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "elliptic": "6.5.3" + } + }, + "@ethersproject/strings": { + "version": "5.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/logger": "^5.0.8" + } + }, + "@ethersproject/transactions": { + "version": "5.0.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/address": "^5.0.9", + "@ethersproject/bignumber": "^5.0.13", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/constants": "^5.0.8", + "@ethersproject/keccak256": "^5.0.7", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/rlp": "^5.0.7", + "@ethersproject/signing-key": "^5.0.8" + } + }, + "@ethersproject/web": { + "version": "5.0.12", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/base64": "^5.0.7", + "@ethersproject/bytes": "^5.0.9", + "@ethersproject/logger": "^5.0.8", + "@ethersproject/properties": "^5.0.7", + "@ethersproject/strings": "^5.0.8" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "optional": true, + "peer": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bn.js": { + "version": "4.11.6", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.14.20", + "dev": true, + "peer": true + }, + "@types/pbkdf2": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/secp256k1": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "abstract-leveldown": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "accepts": { + "version": "1.3.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "aes-js": { + "version": "3.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "arr-flatten": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "arr-union": { + "version": "3.1.0", + "dev": true, + "peer": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "array-unique": { + "version": "0.3.2", + "dev": true, + "peer": true + }, + "asn1": { + "version": "0.2.4", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "assign-symbols": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "async": { + "version": "2.6.2", + "dev": true, + "peer": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "dev": true, + "peer": true, + "requires": { + "async": "^2.4.0" + } + }, + "async-limiter": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "atob": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true, + "peer": true + }, + "aws4": { + "version": "1.11.0", + "dev": true, + "peer": true + }, + "babel-code-frame": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "ansi-styles": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "chalk": { + "version": "1.1.3", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "dev": true, + "peer": true + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "babel-core": { + "version": "6.26.3", + "dev": true, + "peer": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "json5": { + "version": "0.5.1", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "slash": { + "version": "1.0.0", + "dev": true, + "peer": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "dev": true, + "peer": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "dev": true, + "peer": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "dev": true, + "peer": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "dev": true, + "peer": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "dev": true, + "peer": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "dev": true, + "peer": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true, + "peer": true + } + } + }, + "babel-register": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + }, + "dependencies": { + "source-map-support": { + "version": "0.4.18", + "dev": true, + "peer": true, + "requires": { + "source-map": "^0.5.6" + } + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "dev": true, + "peer": true + } + } + }, + "babelify": { + "version": "7.3.0", + "dev": true, + "peer": true, + "requires": { + "babel-core": "^6.0.14", + "object-assign": "^4.0.0" + } + }, + "babylon": { + "version": "6.18.0", + "dev": true, + "peer": true + }, + "backoff": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "precond": "0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "base": { + "version": "0.11.2", + "dev": true, + "peer": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base-x": { + "version": "3.0.8", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "dev": true, + "peer": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "dev": true, + "peer": true + } + } + }, + "bignumber.js": { + "version": "9.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "bip39": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" + } + }, + "blakejs": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "bluebird": { + "version": "3.7.2", + "dev": true, + "optional": true, + "peer": true + }, + "bn.js": { + "version": "4.11.9", + "dev": true, + "peer": true + }, + "body-parser": { + "version": "1.19.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "qs": { + "version": "6.7.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "browserify-aes": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "dev": true, + "optional": true, + "peer": true + }, + "readable-stream": { + "version": "3.6.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserslist": { + "version": "3.2.8", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "bs58": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "peer": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "dev": true, + "optional": true, + "peer": true + }, + "buffer-xor": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "bufferutil": { + "version": "4.0.3", + "dev": true, + "peer": true, + "requires": { + "node-gyp-build": "^4.2.0" + } + }, + "bytes": { + "version": "3.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "bytewise": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "bytewise-core": { + "version": "1.2.3", + "dev": true, + "peer": true, + "requires": { + "typewise-core": "^1.2" + } + }, + "cache-base": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "6.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "cachedown": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "^2.4.1", + "lru-cache": "^3.2.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "lru-cache": { + "version": "3.2.0", + "dev": true, + "peer": true, + "requires": { + "pseudomap": "^1.0.1" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001174", + "dev": true, + "peer": true + }, + "caseless": { + "version": "0.12.0", + "dev": true, + "peer": true + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "checkpoint-store": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "functional-red-black-tree": "^1.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "dev": true, + "optional": true, + "peer": true + }, + "ci-info": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "cids": { + "version": "0.7.5", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "dependencies": { + "multicodec": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-is": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "class-utils": { + "version": "0.3.6", + "dev": true, + "peer": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + } + } + }, + "clone": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "clone-response": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true, + "peer": true + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "peer": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "dev": true, + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "concat-stream": { + "version": "1.6.2", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "content-disposition": { + "version": "0.5.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "content-hash": { + "version": "2.5.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "content-type": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "convert-source-map": { + "version": "1.7.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "cookie": { + "version": "0.4.0", + "dev": true, + "optional": true, + "peer": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true, + "optional": true, + "peer": true + }, + "cookiejar": { + "version": "2.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "copy-descriptor": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "core-js": { + "version": "2.6.12", + "dev": true, + "peer": true + }, + "core-js-pure": { + "version": "3.8.2", + "dev": true, + "peer": true + }, + "core-util-is": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-ecdh": { + "version": "4.0.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "create-hash": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "dev": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-fetch": { + "version": "2.2.3", + "dev": true, + "peer": true, + "requires": { + "node-fetch": "2.1.2", + "whatwg-fetch": "2.0.4" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.6", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "decompress-response": { + "version": "3.3.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "dev": true, + "optional": true, + "peer": true + }, + "deferred-leveldown": { + "version": "4.0.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "define-properties": { + "version": "1.1.3", + "dev": true, + "peer": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "defined": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "depd": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "des.js": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "detect-indent": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "dotignore": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "duplexer3": { + "version": "0.1.4", + "dev": true, + "optional": true, + "peer": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "electron-to-chromium": { + "version": "1.3.636", + "dev": true, + "peer": true + }, + "elliptic": { + "version": "6.5.3", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "encodeurl": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "dev": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "encoding-down": { + "version": "5.0.4", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "peer": true, + "requires": { + "once": "^1.4.0" + } + }, + "errno": { + "version": "0.1.8", + "dev": true, + "peer": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "dev": true, + "peer": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "dev": true, + "peer": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "dev": true, + "peer": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "dev": true, + "peer": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "dev": true, + "optional": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "esutils": { + "version": "2.0.3", + "dev": true, + "peer": true + }, + "etag": { + "version": "1.8.1", + "dev": true, + "optional": true, + "peer": true + }, + "eth-block-tracker": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "eth-query": "^2.1.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.3", + "ethjs-util": "^0.1.3", + "json-rpc-engine": "^3.6.0", + "pify": "^2.3.0", + "tape": "^4.6.3" + }, + "dependencies": { + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "pify": { + "version": "2.3.0", + "dev": true, + "peer": true + } + } + }, + "eth-ens-namehash": { + "version": "2.0.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "eth-json-rpc-infura": { + "version": "3.2.1", + "dev": true, + "peer": true, + "requires": { + "cross-fetch": "^2.1.1", + "eth-json-rpc-middleware": "^1.5.0", + "json-rpc-engine": "^3.4.0", + "json-rpc-error": "^2.0.0" + } + }, + "eth-json-rpc-middleware": { + "version": "1.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.5.0", + "eth-query": "^2.1.2", + "eth-tx-summary": "^3.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.1.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^3.6.0", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "tape": "^4.6.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereum-common": { + "version": "0.2.0", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "eth-lib": { + "version": "0.1.29", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "eth-query": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "eth-sig-util": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" + }, + "dependencies": { + "ethereumjs-abi": { + "version": "0.6.5", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "4.5.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" + } + } + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "eth-tx-summary": { + "version": "3.2.4", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "clone": "^2.0.0", + "concat-stream": "^1.5.1", + "end-of-stream": "^1.1.0", + "eth-query": "^2.0.2", + "ethereumjs-block": "^1.4.1", + "ethereumjs-tx": "^1.1.1", + "ethereumjs-util": "^5.0.1", + "ethereumjs-vm": "^2.6.0", + "through2": "^2.0.3" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereum-common": { + "version": "0.2.0", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "ethashjs": { + "version": "0.0.8", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.0.2", + "miller-rabin": "^4.0.0" + }, + "dependencies": { + "bn.js": { + "version": "5.1.3", + "dev": true, + "peer": true + }, + "buffer-xor": { + "version": "2.0.2", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-util": { + "version": "7.0.7", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.4" + } + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "js-sha3": "^0.8.0" + }, + "dependencies": { + "js-sha3": { + "version": "0.8.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ethereum-common": { + "version": "0.0.18", + "dev": true, + "peer": true + }, + "ethereum-cryptography": { + "version": "0.1.3", + "dev": true, + "peer": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-account": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^6.0.0", + "rlp": "^2.2.1", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-blockchain": { + "version": "4.0.4", + "dev": true, + "peer": true, + "requires": { + "async": "^2.6.1", + "ethashjs": "~0.0.7", + "ethereumjs-block": "~2.2.2", + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.1.0", + "flow-stoplight": "^1.0.0", + "level-mem": "^3.0.1", + "lru-cache": "^5.1.1", + "rlp": "^2.2.2", + "semaphore": "^1.1.0" + } + }, + "ethereumjs-common": { + "version": "1.5.0", + "dev": true, + "peer": true + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "ethereumjs-vm": { + "version": "4.2.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "core-js-pure": "^3.0.1", + "ethereumjs-account": "^3.0.0", + "ethereumjs-block": "^2.2.2", + "ethereumjs-blockchain": "^4.0.3", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.2", + "ethereumjs-util": "^6.2.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1", + "util.promisify": "^1.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-wallet": { + "version": "0.6.5", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "aes-js": "^3.1.1", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^6.0.0", + "randombytes": "^2.0.6", + "safe-buffer": "^5.1.2", + "scryptsy": "^1.2.1", + "utf8": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "ethjs-unit": { + "version": "0.1.6", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "4.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "events": { + "version": "3.2.0", + "dev": true, + "peer": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "dev": true, + "peer": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "express": { + "version": "4.17.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "qs": { + "version": "6.7.0", + "dev": true, + "optional": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ext": { + "version": "1.4.0", + "dev": true, + "peer": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "dev": true, + "peer": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true, + "peer": true + }, + "extend-shallow": { + "version": "3.0.2", + "dev": true, + "peer": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "dev": true, + "peer": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "dev": true, + "peer": true + }, + "fake-merkle-patricia-tree": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "checkpoint-store": "^1.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "fetch-ponyfill": { + "version": "4.1.0", + "dev": true, + "peer": true, + "requires": { + "node-fetch": "~1.7.1" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "node-fetch": { + "version": "1.7.3", + "dev": true, + "peer": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "find-yarn-workspace-root": { + "version": "1.2.1", + "dev": true, + "peer": true, + "requires": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fs-extra": { + "version": "4.0.3", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "dev": true, + "peer": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "flow-stoplight": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "for-each": { + "version": "0.3.3", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "forever-agent": { + "version": "0.6.1", + "dev": true, + "peer": true + }, + "form-data": { + "version": "2.3.3", + "dev": true, + "peer": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "fragment-cache": { + "version": "0.2.1", + "dev": true, + "peer": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "dev": true, + "optional": true, + "peer": true + }, + "fs-extra": { + "version": "7.0.1", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "get-intrinsic": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "dev": true, + "peer": true + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.4.0", + "dev": true, + "peer": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "got": { + "version": "9.6.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "dev": true, + "peer": true + }, + "har-schema": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "peer": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true, + "peer": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true, + "peer": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "dev": true, + "optional": true, + "peer": true + }, + "has-symbols": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-value": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "heap": { + "version": "0.2.6", + "dev": true, + "peer": true + }, + "hmac-drbg": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "http-errors": { + "version": "1.7.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "http-https": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ieee754": { + "version": "1.2.1", + "dev": true, + "peer": true + }, + "immediate": { + "version": "3.2.3", + "dev": true, + "peer": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "peer": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true, + "peer": true + }, + "invariant": { + "version": "2.2.4", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true, + "optional": true, + "peer": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-arguments": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.2", + "dev": true, + "peer": true + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-date-object": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "is-descriptor": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-finite": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "is-fn": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "is-function": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "is-hex-prefixed": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "is-negative-zero": { + "version": "2.0.1", + "dev": true, + "peer": true + }, + "is-object": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true + }, + "is-plain-obj": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "peer": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "dev": true, + "optional": true, + "peer": true + }, + "is-symbol": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "is-windows": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "isarray": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "isexe": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "isobject": { + "version": "3.0.1", + "dev": true, + "peer": true + }, + "isstream": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "isurl": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "js-sha3": { + "version": "0.5.7", + "dev": true, + "optional": true, + "peer": true + }, + "js-tokens": { + "version": "4.0.0", + "dev": true, + "peer": true + }, + "jsbn": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "json-buffer": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "json-rpc-engine": { + "version": "3.8.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "babel-preset-env": "^1.7.0", + "babelify": "^7.3.0", + "json-rpc-error": "^2.0.0", + "promise-to-callback": "^1.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "json-rpc-error": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "json-rpc-random-id": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "json-schema": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "peer": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "peer": true + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "dev": true, + "peer": true + }, + "jsprim": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "peer": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "keyv": { + "version": "3.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true, + "peer": true + }, + "klaw-sync": { + "version": "6.0.0", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "level-codec": { + "version": "9.0.2", + "dev": true, + "peer": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "level-errors": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "2.0.3", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.5", + "xtend": "^4.0.0" + } + }, + "level-mem": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + }, + "dependencies": { + "abstract-leveldown": { + "version": "5.0.0", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "level-packager": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + } + }, + "level-post": { + "version": "1.0.7", + "dev": true, + "peer": true, + "requires": { + "ltgt": "^2.1.2" + } + }, + "level-sublevel": { + "version": "6.6.4", + "dev": true, + "peer": true, + "requires": { + "bytewise": "~1.1.0", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "level-iterator-stream": "^2.0.3", + "ltgt": "~2.1.1", + "pull-defer": "^0.2.2", + "pull-level": "^2.0.3", + "pull-stream": "^3.6.8", + "typewiselite": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "level-ws": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + } + }, + "levelup": { + "version": "3.1.1", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "level-iterator-stream": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + } + } + } + }, + "lodash": { + "version": "4.17.20", + "dev": true, + "peer": true + }, + "looper": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "loose-envify": { + "version": "1.4.0", + "dev": true, + "peer": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "lru-cache": { + "version": "5.1.1", + "dev": true, + "peer": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "ltgt": { + "version": "2.1.3", + "dev": true, + "peer": true + }, + "map-cache": { + "version": "0.2.2", + "dev": true, + "peer": true + }, + "map-visit": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "dev": true, + "peer": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "dev": true, + "optional": true, + "peer": true + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "merkle-patricia-tree": { + "version": "3.0.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "methods": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "miller-rabin": { + "version": "4.0.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "dev": true, + "optional": true, + "peer": true + }, + "mime-db": { + "version": "1.45.0", + "dev": true, + "peer": true + }, + "mime-types": { + "version": "2.1.28", + "dev": true, + "peer": true, + "requires": { + "mime-db": "1.45.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "min-document": { + "version": "2.19.0", + "dev": true, + "peer": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "minimatch": { + "version": "3.0.4", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "dev": true, + "peer": true + }, + "minizlib": { + "version": "1.3.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "minipass": "^2.9.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "mixin-deep": { + "version": "1.3.2", + "dev": true, + "peer": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mkdirp": "*" + } + }, + "mock-fs": { + "version": "4.13.0", + "dev": true, + "optional": true, + "peer": true + }, + "ms": { + "version": "2.1.3", + "dev": true, + "peer": true + }, + "multibase": { + "version": "0.6.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "multicodec": { + "version": "0.5.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "varint": "^5.0.0" + } + }, + "multihashes": { + "version": "0.4.21", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + }, + "dependencies": { + "multibase": { + "version": "0.7.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + } + } + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "nanomatch": { + "version": "1.2.13", + "dev": true, + "peer": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "dev": true, + "optional": true, + "peer": true + }, + "next-tick": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "node-addon-api": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "peer": true + }, + "node-fetch": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "node-gyp-build": { + "version": "4.2.3", + "bundled": true, + "dev": true, + "peer": true + }, + "normalize-url": { + "version": "4.5.0", + "dev": true, + "optional": true, + "peer": true + }, + "number-to-bn": { + "version": "1.7.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true, + "peer": true + }, + "object-assign": { + "version": "4.1.1", + "dev": true, + "peer": true + }, + "object-copy": { + "version": "0.1.0", + "dev": true, + "peer": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.9.0", + "dev": true, + "peer": true + }, + "object-is": { + "version": "1.1.4", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true, + "peer": true + }, + "object-visit": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "dev": true, + "peer": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "oboe": { + "version": "2.1.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "http-https": "^1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "dev": true, + "peer": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "p-cancelable": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "p-timeout": { + "version": "1.2.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "p-finally": "^1.0.0" + }, + "dependencies": { + "p-finally": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-headers": { + "version": "2.0.3", + "dev": true, + "peer": true + }, + "parseurl": { + "version": "1.3.3", + "dev": true, + "optional": true, + "peer": true + }, + "pascalcase": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "patch-package": { + "version": "6.2.2", + "dev": true, + "peer": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "peer": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.7.1", + "dev": true, + "peer": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "slash": { + "version": "2.0.0", + "dev": true, + "peer": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "peer": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "path-parse": { + "version": "1.0.6", + "dev": true, + "peer": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true, + "optional": true, + "peer": true + }, + "pbkdf2": { + "version": "3.1.1", + "dev": true, + "peer": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "dev": true, + "peer": true + }, + "posix-character-classes": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "precond": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "prepend-http": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "private": { + "version": "0.1.8", + "dev": true, + "peer": true + }, + "process": { + "version": "0.11.10", + "dev": true, + "peer": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true, + "peer": true + }, + "promise-to-callback": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + } + }, + "proxy-addr": { + "version": "2.0.6", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "pseudomap": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "psl": { + "version": "1.8.0", + "dev": true, + "peer": true + }, + "public-encrypt": { + "version": "4.0.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pull-cat": { + "version": "1.1.11", + "dev": true, + "peer": true + }, + "pull-defer": { + "version": "0.2.3", + "dev": true, + "peer": true + }, + "pull-level": { + "version": "2.0.4", + "dev": true, + "peer": true, + "requires": { + "level-post": "^1.0.7", + "pull-cat": "^1.1.9", + "pull-live": "^1.0.1", + "pull-pushable": "^2.0.0", + "pull-stream": "^3.4.0", + "pull-window": "^2.1.4", + "stream-to-pull-stream": "^1.7.1" + } + }, + "pull-live": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "pull-cat": "^1.1.9", + "pull-stream": "^3.4.0" + } + }, + "pull-pushable": { + "version": "2.2.0", + "dev": true, + "peer": true + }, + "pull-stream": { + "version": "3.6.14", + "dev": true, + "peer": true + }, + "pull-window": { + "version": "2.1.4", + "dev": true, + "peer": true, + "requires": { + "looper": "^2.0.0" + } + }, + "pump": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "dev": true, + "peer": true + }, + "qs": { + "version": "6.5.2", + "dev": true, + "peer": true + }, + "query-string": { + "version": "5.1.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true, + "optional": true, + "peer": true + }, + "raw-body": { + "version": "2.4.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "regenerate": { + "version": "1.4.2", + "dev": true, + "peer": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "dev": true, + "peer": true + }, + "regenerator-transform": { + "version": "0.10.1", + "dev": true, + "peer": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "dev": true, + "peer": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "regexpu-core": { + "version": "2.0.0", + "dev": true, + "peer": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "regjsparser": { + "version": "0.1.5", + "dev": true, + "peer": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true, + "peer": true + } + } + }, + "repeat-element": { + "version": "1.1.3", + "dev": true, + "peer": true + }, + "repeat-string": { + "version": "1.6.1", + "dev": true, + "peer": true + }, + "repeating": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "peer": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "resolve-url": { + "version": "0.2.1", + "dev": true, + "peer": true + }, + "responselike": { + "version": "1.0.2", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "resumer": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "through": "~2.3.4" + } + }, + "ret": { + "version": "0.1.15", + "dev": true, + "peer": true + }, + "rimraf": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "dev": true, + "peer": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.6", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.1" + } + }, + "rustbn.js": { + "version": "0.2.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true, + "peer": true + }, + "safe-event-emitter": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "events": "^3.0.0" + } + }, + "safe-regex": { + "version": "1.1.0", + "dev": true, + "peer": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true, + "peer": true + }, + "scrypt-js": { + "version": "3.0.1", + "dev": true, + "peer": true + }, + "scryptsy": { + "version": "1.2.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "pbkdf2": "^3.0.3" + } + }, + "secp256k1": { + "version": "4.0.2", + "dev": true, + "peer": true, + "requires": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "seedrandom": { + "version": "3.0.1", + "dev": true, + "peer": true + }, + "semaphore": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "send": { + "version": "0.17.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "ms": { + "version": "2.1.1", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "servify": { + "version": "0.1.12", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "set-value": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "dev": true, + "peer": true + }, + "setprototypeof": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "sha.js": { + "version": "2.4.11", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "simple-concat": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "simple-get": { + "version": "2.8.1", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "dev": true, + "peer": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "peer": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "dev": true, + "peer": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "dev": true, + "peer": true + }, + "source-map-resolve": { + "version": "0.5.3", + "dev": true, + "peer": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.12", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true, + "peer": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "split-string": { + "version": "3.1.0", + "dev": true, + "peer": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.16.1", + "dev": true, + "peer": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "dev": true, + "peer": true + } + } + }, + "static-extend": { + "version": "0.1.2", + "dev": true, + "peer": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "dev": true, + "peer": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "peer": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true, + "peer": true + } + } + }, + "statuses": { + "version": "1.5.0", + "dev": true, + "optional": true, + "peer": true + }, + "stream-to-pull-stream": { + "version": "1.7.3", + "dev": true, + "peer": true, + "requires": { + "looper": "^3.0.0", + "pull-stream": "^3.2.3" + }, + "dependencies": { + "looper": { + "version": "3.0.0", + "dev": true, + "peer": true + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + } + } + }, + "string.prototype.trim": { + "version": "1.2.3", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "swarm-js": { + "version": "0.1.40", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "got": { + "version": "7.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true + }, + "p-cancelable": { + "version": "0.3.0", + "dev": true, + "optional": true, + "peer": true + }, + "prepend-http": { + "version": "1.0.4", + "dev": true, + "optional": true, + "peer": true + }, + "url-parse-lax": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "prepend-http": "^1.0.1" + } + } + } + }, + "tape": { + "version": "4.13.3", + "dev": true, + "peer": true, + "requires": { + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.6", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.0.5", + "minimist": "~1.2.5", + "object-inspect": "~1.7.0", + "resolve": "~1.17.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.1", + "through": "~2.3.8" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "is-regex": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.17.0", + "dev": true, + "peer": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "tar": { + "version": "4.4.13", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + } + } + }, + "through": { + "version": "2.3.8", + "dev": true, + "peer": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "tmp": { + "version": "0.1.0", + "dev": true, + "peer": true, + "requires": { + "rimraf": "^2.6.3" + } + }, + "to-object-path": { + "version": "0.3.0", + "dev": true, + "peer": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "dev": true, + "peer": true + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "to-regex": { + "version": "3.0.2", + "dev": true, + "peer": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "peer": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-right": { + "version": "1.0.1", + "dev": true, + "peer": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "dev": true, + "peer": true + }, + "tweetnacl-util": { + "version": "0.15.1", + "dev": true, + "peer": true + }, + "type": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "dev": true, + "peer": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "peer": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typewise": { + "version": "1.0.3", + "dev": true, + "peer": true, + "requires": { + "typewise-core": "^1.2.0" + } + }, + "typewise-core": { + "version": "1.2.0", + "dev": true, + "peer": true + }, + "typewiselite": { + "version": "1.0.0", + "dev": true, + "peer": true + }, + "ultron": { + "version": "1.1.1", + "dev": true, + "optional": true, + "peer": true + }, + "underscore": { + "version": "1.9.1", + "dev": true, + "optional": true, + "peer": true + }, + "union-value": { + "version": "1.0.1", + "dev": true, + "peer": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "dev": true, + "peer": true + } + } + }, + "universalify": { + "version": "0.1.2", + "dev": true, + "peer": true + }, + "unorm": { + "version": "1.6.0", + "dev": true, + "peer": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "unset-value": { + "version": "1.0.0", + "dev": true, + "peer": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "dev": true, + "peer": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "dev": true, + "peer": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "dev": true, + "peer": true + } + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "dev": true, + "peer": true + }, + "url-parse-lax": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-set-query": { + "version": "1.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "url-to-options": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "use": { + "version": "3.1.1", + "dev": true, + "peer": true + }, + "utf-8-validate": { + "version": "5.0.4", + "dev": true, + "peer": true, + "requires": { + "node-gyp-build": "^4.2.0" + } + }, + "utf8": { + "version": "3.0.0", + "dev": true, + "optional": true, + "peer": true + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "util.promisify": { + "version": "1.1.1", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.1" + } + }, + "utils-merge": { + "version": "1.0.1", + "dev": true, + "optional": true, + "peer": true + }, + "uuid": { + "version": "3.4.0", + "dev": true, + "peer": true + }, + "varint": { + "version": "5.0.2", + "dev": true, + "optional": true, + "peer": true + }, + "vary": { + "version": "1.1.2", + "dev": true, + "optional": true, + "peer": true + }, + "verror": { + "version": "1.10.0", + "dev": true, + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "web3": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-bzz": "1.2.11", + "web3-core": "1.2.11", + "web3-eth": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-shh": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-bzz": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40", + "underscore": "1.9.1" + }, + "dependencies": { + "@types/node": { + "version": "12.19.12", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-core": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-requestmanager": "1.2.11", + "web3-utils": "1.2.11" + }, + "dependencies": { + "@types/node": { + "version": "12.19.12", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-core-helpers": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-core-method": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-core-promievent": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "eventemitter3": "4.0.4" + } + }, + "web3-core-requestmanager": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-providers-http": "1.2.11", + "web3-providers-ipc": "1.2.11", + "web3-providers-ws": "1.2.11" + } + }, + "web3-core-subscriptions": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + } + }, + "web3-eth": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-accounts": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-eth-ens": "1.2.11", + "web3-eth-iban": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-eth-abi": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@ethersproject/abi": "5.0.0-beta.153", + "underscore": "1.9.1", + "web3-utils": "1.2.11" + } + }, + "web3-eth-accounts": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-common": "^1.3.2", + "ethereumjs-tx": "^2.1.1", + "scrypt-js": "^3.0.1", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "uuid": { + "version": "3.3.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-eth-contract": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.5", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-eth-ens": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-eth-iban": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.9", + "web3-utils": "1.2.11" + } + }, + "web3-eth-personal": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "^12.12.6", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "dependencies": { + "@types/node": { + "version": "12.19.12", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "web3-net": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + } + }, + "web3-provider-engine": { + "version": "14.2.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^3.0.0", + "eth-json-rpc-infura": "^3.1.0", + "eth-sig-util": "3.0.0", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.2.0", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.6.0" + } + }, + "eth-sig-util": { + "version": "1.4.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "ethereumjs-account": { + "version": "2.0.5", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereum-common": { + "version": "0.2.0", + "dev": true, + "peer": true + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "dev": true, + "peer": true, + "requires": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "ethereumjs-vm": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "ethereumjs-block": { + "version": "2.2.2", + "dev": true, + "peer": true, + "requires": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "dev": true, + "peer": true, + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, + "ethereumjs-tx": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } + } + }, + "isarray": { + "version": "0.0.1", + "dev": true, + "peer": true + }, + "level-codec": { + "version": "7.0.1", + "dev": true, + "peer": true + }, + "level-errors": { + "version": "1.0.5", + "dev": true, + "peer": true, + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "dev": true, + "peer": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "xtend": { + "version": "2.1.2", + "dev": true, + "peer": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "dev": true, + "peer": true, + "requires": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "ltgt": { + "version": "2.2.1", + "dev": true, + "peer": true + }, + "memdown": { + "version": "1.4.1", + "dev": true, + "peer": true, + "requires": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "dev": true, + "peer": true, + "requires": { + "xtend": "~4.0.0" + } + } + } + }, + "merkle-patricia-tree": { + "version": "2.3.2", + "dev": true, + "peer": true, + "requires": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "dev": true, + "peer": true + } + } + }, + "object-keys": { + "version": "0.4.0", + "dev": true, + "peer": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.4.1", + "dev": true, + "peer": true + }, + "string_decoder": { + "version": "0.10.31", + "dev": true, + "peer": true + }, + "ws": { + "version": "5.2.2", + "dev": true, + "peer": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "web3-providers-http": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-core-helpers": "1.2.11", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + } + }, + "web3-providers-ws": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "websocket": "^1.0.31" + } + }, + "web3-shh": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-net": "1.2.11" + } + }, + "web3-utils": { + "version": "1.2.11", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + } + } + }, + "websocket": { + "version": "1.0.32", + "dev": true, + "peer": true, + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true, + "peer": true + } + } + }, + "whatwg-fetch": { + "version": "2.0.4", + "dev": true, + "peer": true + }, + "wrappy": { + "version": "1.0.2", + "dev": true, + "peer": true + }, + "ws": { + "version": "3.3.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "xhr": { + "version": "2.6.0", + "dev": true, + "peer": true, + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xhr-request": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "xhr-request-promise": { + "version": "0.1.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "xhr-request": "^1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cookiejar": "^2.1.1" + } + }, + "xtend": { + "version": "4.0.2", + "dev": true, + "peer": true + }, + "yaeti": { + "version": "0.0.6", + "dev": true, + "peer": true + }, + "yallist": { + "version": "3.1.1", + "dev": true, + "peer": true + } + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { "version": "2.0.0", @@ -21018,7 +34889,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -21035,7 +34905,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -21054,7 +34923,6 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, "requires": { "chalk": "^2.4.2", "node-emoji": "^1.10.0" @@ -21064,7 +34932,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -21073,7 +34940,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -21084,7 +34950,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -21092,26 +34957,22 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -21122,7 +34983,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21136,7 +34996,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -21151,7 +35010,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, "requires": { "global-prefix": "^3.0.0" } @@ -21160,7 +35018,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -21171,7 +35028,6 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, "requires": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -21186,28 +35042,24 @@ "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" } } }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -21236,7 +35088,6 @@ "version": "2.11.2", "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.11.2.tgz", "integrity": "sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q==", - "dev": true, "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", @@ -21294,7 +35145,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -21303,7 +35153,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -21314,7 +35163,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -21322,32 +35170,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -21356,7 +35199,6 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, "requires": { "command-exists": "^1.2.8", "commander": "3.0.2", @@ -21373,7 +35215,6 @@ "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -21385,8 +35226,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -21394,7 +35234,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -21529,7 +35368,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -21537,20 +35375,17 @@ "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -21558,14 +35393,12 @@ "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -21574,7 +35407,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -21591,7 +35423,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -21600,20 +35431,17 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "heap": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -21683,7 +35511,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -21724,7 +35551,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -21734,7 +35560,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -21759,27 +35584,17 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true, - "peer": true + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" }, "imul": { "version": "1.0.1", @@ -21790,14 +35605,12 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -21806,20 +35619,17 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -21829,8 +35639,7 @@ "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, "invert-kv": { "version": "1.0.0", @@ -21843,7 +35652,6 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, "requires": { "fp-ts": "^1.0.0" } @@ -21859,7 +35667,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -21868,7 +35675,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -21877,7 +35683,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -21886,41 +35691,52 @@ "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-callable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz", - "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", - "dev": true + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "peer": true, + "requires": { + "ci-info": "^2.0.0" + } }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "peer": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -21928,26 +35744,22 @@ "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -21955,14 +35767,12 @@ "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -21972,7 +35782,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -21981,7 +35790,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -21990,7 +35798,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -22004,8 +35811,7 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-url": { "version": "1.2.4", @@ -22025,11 +35831,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "requires": { "call-bind": "^1.0.2" } }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "peer": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -22039,8 +35854,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isstream": { "version": "0.1.2", @@ -22073,14 +35887,12 @@ "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -22091,16 +35903,6 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "peer": true, - "requires": { - "bignumber.js": "^9.0.0" - } - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -22126,9 +35928,9 @@ "dev": true }, "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -22138,7 +35940,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -22146,8 +35947,7 @@ "jsonschema": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" }, "jsprim": { "version": "1.4.2", @@ -22165,7 +35965,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -22175,18 +35974,26 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, "requires": { "graceful-fs": "^4.1.9" } }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -22201,145 +36008,29 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, "requires": { "browser-level": "^1.0.1", "classic-level": "^1.2.0" } }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.6.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "peer": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "peer": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "peer": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "peer": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, "level-supports": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" }, "level-transcoder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, "requires": { "buffer": "^6.0.3", "module-error": "^1.0.1" } }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "peer": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -22366,9 +36057,9 @@ "dev": true }, "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -22380,7 +36071,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -22389,8 +36079,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.assign": { "version": "4.2.0", @@ -22399,13 +36088,6 @@ "dev": true, "peer": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "peer": true - }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -22416,7 +36098,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -22451,32 +36132,16 @@ "lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "requires": { "yallist": "^3.0.2" } }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true, - "peer": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true - }, "markdown-table": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", @@ -22492,84 +36157,22 @@ "mcl-wasm": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "peer": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "peer": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true, - "peer": true - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "peer": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, "memory-level": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, "requires": { "abstract-level": "^1.0.0", "functional-red-black-tree": "^1.0.1", @@ -22579,8 +36182,7 @@ "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" }, "merge-source-map": { "version": "1.1.0", @@ -22600,94 +36202,17 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "peer": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "peer": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "peer": true - } - } - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -22706,20 +36231,17 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -22727,14 +36249,12 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, "requires": { "minimist": "^1.2.6" } @@ -22743,7 +36263,6 @@ "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, "requires": { "obliterator": "^2.0.0" } @@ -22752,7 +36271,6 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -22781,14 +36299,12 @@ "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "requires": { "balanced-match": "^1.0.0" } @@ -22797,7 +36313,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -22807,7 +36322,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "requires": { "p-locate": "^5.0.0" } @@ -22816,7 +36330,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, "requires": { "brace-expansion": "^2.0.1" } @@ -22824,14 +36337,12 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -22840,7 +36351,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -22848,14 +36358,12 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -22865,14 +36373,12 @@ "module-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "murmur-128": { "version": "0.2.1", @@ -22888,20 +36394,24 @@ "nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" }, "napi-macros": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "peer": true }, "no-case": { "version": "3.0.4", @@ -22924,14 +36434,12 @@ "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" }, "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, "requires": { "lodash": "^4.17.21" } @@ -22940,7 +36448,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" @@ -22949,15 +36456,14 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "peer": true, "requires": { @@ -22967,8 +36473,7 @@ "node-gyp-build": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "dev": true + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" }, "node-releases": { "version": "2.0.6", @@ -22986,7 +36491,6 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, "requires": { "abbrev": "1" } @@ -23016,8 +36520,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "nth-check": { "version": "2.1.1", @@ -23039,7 +36542,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, "requires": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -23048,8 +36550,7 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, @@ -23068,20 +36569,17 @@ "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -23093,7 +36591,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dev": true, "requires": { "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", @@ -23104,23 +36601,31 @@ "obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "peer": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -23130,13 +36635,6 @@ "word-wrap": "~1.2.3" } }, - "ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -23150,14 +36648,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, "requires": { "p-try": "^1.0.0" } @@ -23166,7 +36662,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -23175,7 +36670,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -23183,8 +36677,7 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" }, "param-case": { "version": "3.0.4", @@ -23238,6 +36731,100 @@ } } }, + "patch-package": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "dev": true, + "peer": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -23248,20 +36835,24 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "peer": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-starts-with": { "version": "2.0.0", @@ -23291,7 +36882,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -23315,8 +36905,7 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "2.3.0", @@ -23413,11 +37002,17 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "postinstall-postinstall": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", + "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", + "dev": true, + "peer": true + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "prettier": { "version": "2.7.1", @@ -23450,13 +37045,6 @@ "asap": "~2.0.6" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "peer": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -23479,7 +37067,6 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -23494,14 +37081,12 @@ "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -23510,7 +37095,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -23568,7 +37152,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -23579,7 +37162,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -23588,32 +37170,32 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, "requires": { "resolve": "^1.1.6" } }, "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "requires": { - "minimatch": "^3.0.5" + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "peer": true - }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -23733,14 +37315,12 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "1.0.1", @@ -23753,7 +37333,6 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -23767,14 +37346,12 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -23783,7 +37360,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -23793,7 +37369,6 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, "requires": { "bn.js": "^5.2.0" } @@ -23802,7 +37377,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -23811,7 +37385,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -23819,26 +37392,22 @@ "rustbn.js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sc-istanbul": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, "requires": { "abbrev": "1.0.x", "async": "1.x", @@ -23860,7 +37429,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -23868,20 +37436,17 @@ "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" }, "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, "requires": { "inflight": "^1.0.4", "inherits": "2", @@ -23893,14 +37458,12 @@ "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -23909,22 +37472,19 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" } } }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, "requires": { "has-flag": "^1.0.0" } @@ -23945,45 +37505,27 @@ "scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, "requires": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0" } }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true, - "peer": true - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true, - "peer": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, "requires": { "randombytes": "^2.1.0" } @@ -23991,26 +37533,22 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -24026,11 +37564,27 @@ "crypt": ">= 0.0.1" } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "peer": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "peer": true + }, "shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, "requires": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -24041,13 +37595,19 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" } }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "peer": true + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -24067,28 +37627,54 @@ } } }, - "solady": { - "version": "0.0.78", - "resolved": "https://registry.npmjs.org/solady/-/solady-0.0.78.tgz", - "integrity": "sha512-GMc0i+XxaXwGLFlgXjZXByZezaxr+FfTjobdaaeogwXEY1+E4/3pOOvyc+Y9mtKKEKDDC6uwp+fJa46rjsFfNQ==", - "dev": true - }, "solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", + "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", "dev": true, "peer": true, "requires": { "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", + "commander": "3.0.2", + "fs-extra": "^0.30.0", "js-sha3": "0.8.0", "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", "semver": "^5.5.0", "tmp": "0.0.33" }, "dependencies": { + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true, + "peer": true + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -24102,7 +37688,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.2.tgz", "integrity": "sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ==", - "dev": true, "requires": { "@ethersproject/abi": "^5.0.9", "@solidity-parser/parser": "^0.14.1", @@ -24129,20 +37714,17 @@ "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==" }, "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -24151,7 +37733,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -24159,14 +37740,12 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -24177,7 +37756,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -24193,7 +37771,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -24204,7 +37781,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -24212,14 +37788,12 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -24227,32 +37801,27 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -24261,7 +37830,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, "requires": { "is-buffer": "~2.0.3" } @@ -24270,7 +37838,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -24281,14 +37848,12 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, "optional": true }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -24301,14 +37866,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -24318,7 +37881,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -24328,7 +37890,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, "requires": { "chalk": "^2.4.2" } @@ -24337,7 +37898,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -24346,7 +37906,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -24355,7 +37914,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -24364,7 +37922,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", - "dev": true, "requires": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", @@ -24396,7 +37953,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -24406,14 +37962,12 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -24422,7 +37976,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -24430,20 +37983,17 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "readdirp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, "requires": { "picomatch": "^2.0.4" } @@ -24451,14 +38001,12 @@ "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -24467,7 +38015,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -24478,7 +38025,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -24486,14 +38032,12 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -24501,14 +38045,12 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -24518,20 +38060,17 @@ "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -24549,7 +38088,6 @@ "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -24559,7 +38097,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, "requires": { "flat": "^4.1.0", "lodash": "^4.17.15", @@ -24568,17 +38105,10 @@ } } }, - "solmate": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/solmate/-/solmate-6.7.0.tgz", - "integrity": "sha512-iMPr+gKbKjXBB12a+Iz5Tua5r7T4yugHaGXDWSJbBZB4Gr3vLeUUvKeLyMxCWWqk1xlLhFDFFuAmOzeyVBuyvQ==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { "version": "1.0.2", @@ -24590,7 +38120,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -24635,8 +38164,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "sshpk": { "version": "1.17.0", @@ -24667,7 +38195,6 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, "requires": { "type-fest": "^0.7.1" }, @@ -24675,16 +38202,14 @@ "type-fest": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" } } }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, "stealthy-require": { "version": "1.1.1", @@ -24692,33 +38217,18 @@ "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", "dev": true }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, - "string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true, - "peer": true - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -24727,14 +38237,12 @@ "ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -24745,7 +38253,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -24756,7 +38263,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -24767,7 +38273,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -24786,7 +38291,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } @@ -24794,14 +38298,12 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -24876,35 +38378,6 @@ } } }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "peer": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true - } - } - }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -24944,6 +38417,29 @@ "terser": "^5.14.1" } }, + "test-value": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", + "dev": true, + "peer": true, + "requires": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "dev": true, + "peer": true, + "requires": { + "typical": "^2.6.0" + } + } + } + }, "testrpc": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", @@ -24993,7 +38489,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -25002,7 +38497,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -25010,8 +38504,7 @@ "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { "version": "2.5.0", @@ -25038,62 +38531,105 @@ "dev": true, "peer": true }, - "ts-command-line-args": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz", - "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==", + "ts-essentials": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", "dev": true, - "peer": true, - "requires": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - } + "peer": true }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "ts-generator": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", "dev": true, "peer": true, "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" }, "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" }, "tunnel-agent": { "version": "0.6.0", @@ -25107,20 +38643,17 @@ "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "tweetnacl-util": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -25134,54 +38667,28 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, "typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", "dev": true, "peer": true, "requires": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", + "command-line-args": "^4.0.7", + "debug": "^4.1.1", "fs-extra": "^7.0.0", - "glob": "7.1.7", "js-sha3": "^0.8.0", "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" + "ts-essentials": "^6.0.3", + "ts-generator": "^0.1.1" }, "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "peer": true - }, "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", "dev": true, "peer": true, "requires": {} @@ -25198,13 +38705,13 @@ "version": "4.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true, + "devOptional": true, "peer": true }, "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", "dev": true, "peer": true }, @@ -25212,14 +38719,12 @@ "version": "3.17.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", - "dev": true, "optional": true }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -25228,25 +38733,19 @@ } }, "undici": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz", - "integrity": "sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", + "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==" }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "update-browserslist-db": { "version": "1.0.9", @@ -25290,14 +38789,12 @@ "utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utila": { "version": "0.4.0", @@ -25308,15 +38805,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "peer": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -25415,7 +38904,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", - "dev": true, "requires": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -25430,7 +38918,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -25453,7 +38940,6 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -25524,7 +39010,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -25533,7 +39018,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -25553,7 +39037,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -25568,46 +39051,22 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "peer": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true - } - } + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25617,14 +39076,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25636,14 +39093,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, "requires": {} }, "xmlhttprequest": { @@ -25652,30 +39107,20 @@ "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "peer": true - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -25689,14 +39134,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25708,14 +39151,12 @@ "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -25723,18 +39164,10 @@ "is-plain-obj": "^2.1.0" } }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "peer": true - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, "zksync-web3": { "version": "0.8.1", diff --git a/contracts/package.json b/contracts/package.json index 5104c0b..b780c2d 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -1,43 +1,19 @@ { - "name": "trybadger", - "version": "1.2.0", - "license": "AGPL-3.0-or-later", - "description": "Badge-based credentials powering on-chain access controls.", - "contributors": [ - { - "name": "@nftchance" - }, - { - "name": "@masonthechain" - } - ], - "files": [ - "src/" - ], - "main": "src/index.js", - "types": "src/index.d.ts", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "npm run build-abis && npm run copy-files && tsc --build", - "clean": "npx hardhat clean && tsc --build --clean", - "build-abis": "npm run clean && npx hardhat compile", - "copy-files": "mkdir -p src/contracts && cp -r contracts/* src/contracts/" - }, + "name": "contracts", + "version": "1.0.0", + "author": "masonchain", + "license": "MIT", + "description": "", "devDependencies": { - "@ethersproject/abi": "^5.7.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.8", - "@nomicfoundation/hardhat-toolbox": "^2.0.1", "@nomiclabs/hardhat-ethers": "^2.1.1", "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.3", "@openzeppelin/contracts": "^4.7.3", "@openzeppelin/contracts-upgradeable": "^4.7.3", - "@typechain/hardhat": "^6.1.5", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "dotenv": "^16.0.2", "ethers": "^5.7.1", - "ganache-cli": "^6.12.2", "hardhat": "^2.11.2", "hardhat-abi-exporter": "^2.10.0", "hardhat-api-builder": "^0.0.5", @@ -46,13 +22,10 @@ "hardhat-gas-reporter": "^1.0.9", "hardhat-tracer": "^1.1.0-rc.9", "hardhat-watcher": "^2.5.0", - "mocha": "^10.0.0", - "solady": "^0.0.78", - "solidity-coverage": "^0.8.2", - "solmate": "^6.7.0" + "mocha": "^10.0.0" }, - "repository": { - "type": "git", - "url": "https://github.com/FlipsideCrypto/badger.git" + "dependencies": { + "ganache-cli": "^6.12.2", + "solidity-coverage": "^0.8.2" } } diff --git a/contracts/scripts/deploy/deploy.js b/contracts/scripts/deploy/deploy.js index 02d2b5e..479df63 100644 --- a/contracts/scripts/deploy/deploy.js +++ b/contracts/scripts/deploy/deploy.js @@ -23,9 +23,9 @@ async function main() { const [deployer] = await ethers.getSigners(); console.log(`✅ Connected to ${deployer.address}`); - - const chainId = await getChainId() - + + const chainId = await getChainId() + // Deploying the primitive master BadgerOrganization contract that is used for clones const BadgerOrganization = await ethers.getContractFactory("BadgerOrganization"); organizationMaster = await BadgerOrganization.deploy(); @@ -73,7 +73,7 @@ async function main() { } // Keep Promise open to keep node running - await new Promise((resolve) => { }) + await new Promise((resolve) => {}) } main() diff --git a/contracts/scripts/helpers/send-hardhat-eth.js b/contracts/scripts/helpers/send-hardhat-eth.js new file mode 100644 index 0000000..0ec38e5 --- /dev/null +++ b/contracts/scripts/helpers/send-hardhat-eth.js @@ -0,0 +1,27 @@ +const { getChainId, ethers, network } = require("hardhat"); +const chainId = await getChainId() + +async function main() { + + +const [owner] = await ethers.getSigners(); + +const addressToSendTo = "0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199" + +if (chainId !== '31337') { + console.log('Easy there killer, this isnt the hardhat network.') +} +else { + await owner.sendTransaction({ + to: "0x581BEf12967f06f2eBfcabb7504fA61f0326CD9A", + value: ethers.utils.parseEther("5.0"), // Sends exactly 1.0 ether + }); + } +} + +main() +.then(() => process.exit(0)) +.catch((error) => { + console.error(error); + process.exit(1); +}); \ No newline at end of file diff --git a/contracts/test/Badger.js b/contracts/test/Badger.js index 40e1cf5..5ab4749 100644 --- a/contracts/test/Badger.js +++ b/contracts/test/Badger.js @@ -1,643 +1,1963 @@ -// badger: 0x2f070d13 -// org: 0x7a3851dc -// org logic: 0xd2779f52 -// badger configured: 0x56dbdf14 -// hook: 0x6847c1d5 -// manager: 0x56dbdf14 -// ierc165: 0x01ffc9a7 +const { assert } = require('chai') -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); +var chai = require('chai') + .use(require('chai-as-promised')) + .should() -function getManagerKey(badgeId, manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["uint256", "address"], [badgeId, manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} - -function getOrgManagerKey(manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["address"], [manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} +const { ethers } = require("hardhat"); describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); + before(async () => { + [owner, signer1, userSigner, leaderSigner, sigSigner] = await ethers.getSigners(); - return { badgerSingleton } - } + // Deploy the base Organization + const BadgerOrganization = await ethers.getContractFactory("BadgerOrganization"); + organizationMaster = await BadgerOrganization.deploy(); + organizationMaster = await organizationMaster.deployed(); - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); + // Deploy the base Badger + const Badger = await ethers.getContractFactory("Badger"); + badger = await Badger.deploy(organizationMaster.address); + badger = await badger.deployed(); - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); + const Mock1155 = await ethers.getContractFactory("MockERC1155"); + mock1155 = await Mock1155.deploy("testuri"); + mock1155 = await mock1155.deployed(); - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); + const Mock20 = await ethers.getContractFactory("MockERC20"); + mock20 = await Mock20.deploy("testtoken", "test"); + mock20 = await mock20.deployed(); - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); + const Mock721 = await ethers.getContractFactory("MockERC721"); + mock721 = await Mock721.deploy("name", "symbol"); + mock721 = await mock721.deployed(); - return { badgerFactory, owner, otherAccount }; - } + // Deploy an Organization for testing through Badger + childOrganizationTx = await badger.connect(owner).createOrganization( + organizationMaster.address, + owner.address, + "baseuri", + "contractURI", + "name", + "symbol", + ); + childOrganizationTx = await childOrganizationTx.wait(); - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); + childOrganizationAddress = childOrganizationTx.events[4].args['organization'] + childOrganization = await organizationMaster.attach(childOrganizationAddress); - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } + assert.equal(await childOrganization.owner(), owner.address); - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); + const DOLPHIN_ETH = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); + paymentKeyETH = ethers.utils.solidityKeccak256( + ["address", "uint256"], + [DOLPHIN_ETH, 0] + ) - const orgAddress = organizationCreatedEvent.args.organization; + paymentKey20 = ethers.utils.solidityKeccak256( + ["address", "uint256"], + [mock20.address, 0] + ) - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); + // bytes32 encode token address and token id using the contract and use as paymentKey + paymentKey1155 = ethers.utils.solidityKeccak256( + ["address", "uint256"], + [mock1155.address, 0] + ); - return { badgerFactory, organization, owner, otherAccount }; - } + paymentKey721 = ethers.utils.solidityKeccak256( + ["address", "uint256"], + [mock721.address, 0] + ); - async function deployNewManagedOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); + paymentAmount = 0; - // set organization manager to other account - const Manager = await ethers.getContractFactory("BadgerManagerClaimable"); - const manager = await Manager.deploy(); - await manager.deployed(); + paymentTokenETH = [ + paymentKeyETH, + ethers.utils.parseEther("1") + ] - return { manager, organization, owner, otherAccount } - } + paymentToken20 = [ + paymentKey20, + 1 + ] - async function deployNewHook() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); + paymentToken1155 = [ + paymentKey1155, + paymentAmount + ] - const Hook = await ethers.getContractFactory("BadgerTransferBound"); - hook = await Hook.deploy(); - hook = await hook.deployed(); + paymentToken721 = [ + paymentKey721, + 1 + ] - return { hook, organization, owner, otherAccount } - } - - describe("Badger.sol", async function () { - it("call: createOrganization({ ...placeholder })", async function () { - const { badgerFactory, organization } = await loadFixture(deployNewOrganization); - - const organizations = await badgerFactory.organizations(); - expect(organizations).to.equal(1); - - expect(await badgerFactory.getOrganization(organizations - 1)).to.equal(organization.address); - - expect(await organization.name()).to.equal("Badger"); - expect(await organization.symbol()).to.equal("BADGER"); - expect(await organization.uri(1)).to.equal("ipfs/uri/{id}/"); - expect(await organization.organizationURI()).to.equal("ipfs/org"); - expect(await organization.contractURI()).to.equal("ipfs/org"); - }); - - it("call: supportsInterface(IBadger || IERC165)", async function () { - const { badgerFactory } = await loadFixture(deployBadgerFactory); - - expect(await badgerFactory.supportsInterface("0x01ffc9a7")).to.equal(true); - expect(await badgerFactory.supportsInterface("0x2f070d13")).to.equal(true); - }); - - it("revert: constructor(0x00) cannot be zero address", async function () { - const BadgerFactory = await ethers.getContractFactory("Badger"); - - await expect(BadgerFactory.deploy(ethers.constants.AddressZero)) - .to.be.revertedWith("Badger::constructor: _implementation cannot be the zero address."); - }); }); - describe("BadgerOrganization.sol", async function () { - it("call: mint()", async function () { - const { organization, owner } = await loadFixture(deployNewOrganization); - - await expect(organization.mint(owner.address, 0, 100, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, owner.address, 0, 100) + describe("Badger: Badger.sol", async () => { + it('Should deploy the Badger contract', async () => { + assert.equal(await badger.owner(), owner.address); }); - it("revert: mint() missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount).mint(otherAccount.address, 0, 100, "0x")) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this.") - }); - - it("call: mintBatch()", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.mintBatch([owner.address, otherAccount.address], 1, [100, 200], "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, owner.address, 1, 100) - }); - - it("revert: mintBatch() missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount).mintBatch([otherAccount.address], 1, [100], "0x")) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this.") - }); - - it("revert: mintBatch() invalid array lengths", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.mintBatch([otherAccount.address], 1, [100, 100], "0x")) - .to.be.revertedWith("BadgerOrganization::mintBatch: _tos and _amounts must be the same length.") - }); - - it("call: revoke()", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - await organization.mint(otherAccount.address, 0, 100, "0x"); - - await expect(organization.revoke(otherAccount.address, 0, 100)) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, otherAccount.address, ethers.constants.AddressZero, 0, 100) - }); - - it("revert: revoke() missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount).revoke(otherAccount.address, 0, 100)) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this.") - }); - - it("call: revokeBatch()", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - await organization.mintBatch([otherAccount.address], 1, [100], "0x"); - - await expect(organization.revokeBatch([otherAccount.address], 1, [100])) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, otherAccount.address, ethers.constants.AddressZero, 1, 100) - }); - - it("revert: revokeBatch() missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount).revokeBatch([otherAccount.address], 1, [100])) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this.") - }); - - it("revert: revokeBatch() invalid array lengths", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.revokeBatch([otherAccount.address], 1, [100, 200])) - .to.be.revertedWith("BadgerOrganization::revokeBatch: _from and _amounts must be the same length.") - }); - - it("call: forfeit()", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await organization.mint(otherAccount.address, 0, 100, "0x"); - - await expect(organization.connect(otherAccount).forfeit(0, 100, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(otherAccount.address, otherAccount.address, ethers.constants.AddressZero, 0, 100) - }); - - it("call: uri()", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - expect(await organization.uri(0)).to.equal("ipfs/uri/{id}/"); - }); - }); - - describe("BadgerOrganizationLogic.sol", async function () { - it("call: setOrganizationURI('placeholder')", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - await expect(organization.setOrganizationURI("ipfs/newuri")) - .to.emit(organization, "OrganizationUpdated") - .withArgs("ipfs/newuri") - }); - - // todo: test organization manager success - - it("revert: setOrganizationURI('')", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - await expect(organization.setOrganizationURI("")) - .to.be.revertedWith("BadgerScout::setOrganizationURI: URI must be set.") - }); - - it("revert: setOrganizationURI('placeholder') missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount).setOrganizationURI("ipfs/newuri")) - .to.be.revertedWith("BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this.") - }); - - it("call: setBadgeURI(0, 'placeholder')", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - await ( - expect(organization.setBadgeURI(0, "ipfs/newuri")) - .to.emit(organization, "URI") - .withArgs("ipfs/newuri", 0) + // createOrganization() tests + it('createOrganization() success', async () => { + cloneTx = await badger.connect(owner).createOrganization( + organizationMaster.address, + owner.address, + "uri", + "contractURI", + "name", + "symbol", ); + cloneTx = await cloneTx.wait(); - expect(await organization.uri(0)).to.equal("ipfs/newuri"); + organizationAddress = cloneTx.events[4].args['organization'] + organization = await organizationMaster.attach(organizationAddress); + + assert.equal(await organization.owner(), owner.address); }); - it("call: setBadgeURI(0, 'managerSuccess')", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); + it('createOrganization() success: payable', async () => { + // mint 10 of the mock1155 to signer1 + await mock1155.connect(owner).mint(signer1.address, 0, 10, "0x"); - await organization.connect(owner)['setManagers(uint256,address[],bool[])']( + // set the new version using an 1155 as payment + await badger.connect(owner).setVersion( + organizationMaster.address, + owner.address, + mock1155.address, 0, - [otherAccount.address], + 10, + false + ); + + transferData = ethers.utils.defaultAbiCoder.encode( + ["address"], + [organizationMaster.address] + ) + + // transfer the 1155 into the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + badger.address, + 0, + 10, + transferData + ); + + // create the organization + cloneTx = await badger.connect(signer1).createOrganization( + organizationMaster.address, + owner.address, + "uri", + "contractURI", + "name", + "symbol", + ); + cloneTx = await cloneTx.wait(); + + organizationAddress = cloneTx.events[4].args['organization'] + organization = await organizationMaster.attach(organizationAddress); + + assert.equal(await organization.owner(), owner.address); + }) + + it("createOrganization() fail: insufficient funding", async() => { + // create the organization + await badger.connect(owner).createOrganization( + organizationMaster.address, + owner.address, + "uri", + "contractURI", + "name", + "symbol", + ).should.be.rejected; + }) + + it("onERC1155Received() fail: invalid payment token", async() => { + const Mock1155 = await ethers.getContractFactory("MockERC1155"); + mock11552 = await Mock1155.connect(leaderSigner).deploy("testuri"); + mock11552 = await mock11552.deployed(); + + // transfering fails + transferData = ethers.utils.defaultAbiCoder.encode( + ["address"], + [organizationMaster.address] + ) + + // mint the 11552 to signer1 + await mock11552.connect(owner).mint(signer1.address, 0, 10, "0x"); + + // make sure the two 1155 contracts arent equal + assert.notEqual(mock1155.address, mock11552.address); + + // transfer the 1155 into the contract + await mock11552.connect(signer1).safeTransferFrom( + signer1.address, + badger.address, + 0, + 10, + transferData + ).should.be.revertedWith("Badger::onERC1155Received: Invalid license key."); + }) + }); + + describe('Badger: BadgerVersions.sol', async () => { + // setVersion() tests + it('setVersion() success', async () => { + await badger.connect(owner).setVersion( + organizationMaster.address, + owner.address, + "0x0000000000000000000000000000000000000000", + 0, + 0, + false + ); + }); + + it('setVersion() success: exogenous', async () => { + await badger.connect(sigSigner).setVersion( + "0x0000000000000000000000000000000000000012", + sigSigner.address, + "0x0000000000000000000000000000000000000000", + 0, + 0, + false + ); + + // setting payment token fails + await badger.connect(sigSigner).setVersion( + "0x0000000000000000000000000000000000000012", + sigSigner.address, + "0x0000000000000000000000000000000000000000", + 1, + 0, + true + ).should.be.rejectedWith("BadgerVersions::_setVersion: You do not have permission to set a payment token."); + }); + + it('setVersion() fail: not owner', async () => { + await badger.connect(signer1).setVersion( + organizationMaster.address, + owner.address, + "0x0000000000000000000000000000000000000000", + 0, + 0, + false + ).should.be.revertedWith("BadgerVersions::_setVersion: You do not have permission to edit this version.") + }) + + it('setVersion() fail: locked', async () => { + await badger.connect(owner).setVersion( + organizationMaster.address, + owner.address, + "0x0000000000000000000000000000000000000000", + 0, + 0, + true + ); + + await badger.connect(owner).setVersion( + organizationMaster.address, + owner.address, + "0x0000000000000000000000000000000000000000", + 0, + 0, + false + ).should.be.revertedWith("BadgerVersions::_setVersion: Cannot update a locked version."); + }) + + it('setVersion() fail: not allowed to set payment token', async () => { + await badger.connect(signer1).setVersion( + "0x0000000000000000000000000000000000000001", + owner.address, + "0x0000000000000000000000000000000000000001", + 0, + 0, + false + ).should.be.revertedWith("BadgerVersions::_setVersion: You do not have permission to set a payment token.") + + await badger.connect(signer1).setVersion( + "0x0000000000000000000000000000000000000001", + owner.address, + "0x0000000000000000000000000000000000000000", + 1, + 0, + false + ).should.be.revertedWith("BadgerVersions::_setVersion: You do not have permission to set a payment token.") + + await badger.connect(signer1).setVersion( + "0x0000000000000000000000000000000000000001", + owner.address, + "0x0000000000000000000000000000000000000000", + 0, + 1, + false + ).should.be.revertedWith("BadgerVersions::_setVersion: You do not have permission to set a payment token.") + }) + + // getVersionKey() tests + it('getVersionKey() success', async () => { + assert.equal( + await badger.getVersionKey( + organizationMaster.address, + ), + "0xa86d54e9aab41ae5e520ff0062ff1b4cbd0b2192bb01080a058bb170d84e6457" + ); + }); + + // getLicenseKey() tests + it('getLicenseKey() success', async () => { + assert.equal( + await badger.getLicenseKey( + "0xa86d54e9aab41ae5e520ff0062ff1b4cbd0b2192bb01080a058bb170d84e6457", + "0x0000000000000000000000000000000000000000" + ), "0xc2eaf2f7d95b44216efc92a0ebad6e5757dddba9e9bbeadcec3eb9b83b5bb8b9" + ) + }) + + it('execTransaction() success', async () => { + // mint a mock to the contract + await mock1155.connect(owner).mint( + badger.address, 0, 1, "0x"); + + // build the transfer transaction + const transferTx = await mock1155.populateTransaction.safeTransferFrom( + badger.address, owner.address, 0, 1, "0x"); + + // Transfer mock1155 to signer1 + await badger.connect(owner).execTransaction( + mock1155.address, + transferTx.data, + 0, + ) + }) + + it('execTransaction() fail: is not built', async () => { + await badger.connect(owner).execTransaction( + organizationMaster.address, + "0x0000000000000000000000000000000000000000", + 0 + ).should.be.reverted; + }); + + it('execTranscation() fail: is not owner', async () => { + await badger.connect(signer1).execTransaction( + badger.address, + "0x00000000", + 0 + ).should.be.revertedWith("Ownable: caller is not the owner") + }); + + // supportsInterface() tests + it('supportsInterface() success', async () => { + // Test ERC1155HolderUpgradeable + assert.equal( + await badger.supportsInterface( + "0x4e2312e0" + ), true + ) + + // Test BadgerInterface + assert.equal( + await badger.supportsInterface( + "0x7b366213" + ), true + ) + + // Test BadgerVersionsInterface + assert.equal( + await badger.supportsInterface( + "0x52550d16" + ), true + ) + }); + }); + + describe("Badger: BadgerScout.sol", async () => { + it("initialize() fail: cannot call twice", async() => { + await childOrganization.connect(signer1).initialize( + signer1.address, + "uri", + "contracturi", + "name", + "symbol" + ).should.be.revertedWith("Initializable: contract is already initialized"); + }) + + it('setOrganizationURI() success', async () => { + await childOrganization.connect(owner).setOrganizationURI( + "newURI" + ); + }) + + it('setOrganizationURI() fail: not owner', async () => { + await childOrganization.connect(signer1).setOrganizationURI( + "newURI" + ).should.be.revertedWith("Ownable: caller is not the owner") + }) + + it('setBadge() success', async () => { + await childOrganization.connect(owner).setBadge( + 0, + false, + true, + owner.address, + "uri", + paymentToken1155, + [] + ) + + signer = await childOrganization.getSigner(0); + + assert.equal( + signer, + owner.address + ); + }) + + it('setBadge() fail: not leader', async () => { + await childOrganization.connect(signer1).setBadge( + 0, + false, + true, + owner.address, + "uri", + paymentToken1155, + [] + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }) + + it('setBadge() fail: uri cannot be empty', async () => { + await childOrganization.connect(owner).setBadge( + 0, + false, + true, + owner.address, + "", + paymentToken1155, + [] + ).should.be.revertedWith("BadgerScout::setBadge: URI must be set.") + }) + + it('setBadge() success', async () => { + await childOrganization.connect(owner).setBadge( + 0, + false, + true, + owner.address, + "uri", + paymentToken1155, + [leaderSigner.address] + ) + }) + + it('setClaimable() success', async () => { + await childOrganization.connect(owner).setClaimable( + 0, + true + ) + + assert.equal( + await childOrganization.getClaimable(0), + true + ); + }) + + it('setClaimable() fail: not real badge', async () => { + await childOrganization.connect(owner).setClaimable( + 1, + true + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it('setClaimable() fail: not leader', async () => { + await childOrganization.connect(signer1).setClaimable( + 0, + true + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it('setAccountBound() success', async () => { + await childOrganization.connect(owner).setAccountBound( + 0, + true + ) + + assert.equal( + await childOrganization.getAccountBound(0), + true + ); + + await childOrganization.connect(owner).setAccountBound( + 0, + false + ) + + assert.equal( + await childOrganization.getAccountBound(0), + false + ); + }) + + it('setAccountBound() fail: not real badge', async () => { + await childOrganization.connect(owner).setAccountBound( + 1, + true + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it('setAccountBound() fail: not leader', async () => { + await childOrganization.connect(signer1).setAccountBound( + 0, + true + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it('setSigner() success', async () => { + await childOrganization.connect(owner).setSigner( + 0, + owner.address + ) + + assert.equal( + await childOrganization.getSigner(0), + owner.address + ); + + await childOrganization.connect(owner).setSigner( + 0, + "0x0000000000000000000000000000000000000000" + ) + + assert.equal( + await childOrganization.getSigner(0), + "0x0000000000000000000000000000000000000000" + ); + }) + + it('setSigner() fail: not real badge', async () => { + await childOrganization.connect(owner).setSigner( + 1, + owner.address + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it('setSigner() fail: not leader', async () => { + await childOrganization.connect(signer1).setSigner( + 0, + owner.address + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it('setBadgeURI() success', async () => { + await childOrganization.connect(owner).setBadgeURI( + 0, + "uri" + ) + }) + + it('setBadgeURI() fail: not real badge', async () => { + await childOrganization.connect(owner).setBadgeURI( + 1000, + "uri" + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it('setBadgeURI() fail: not leader', async () => { + await childOrganization.connect(signer1).setBadgeURI( + 0, + "uri" + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it('setBadgeURI() fail: uri cannot be empty', async () => { + await childOrganization.connect(owner).setBadgeURI( + 0, + "" + ).should.be.revertedWith("BadgerScout::setBadgeURI: URI must be set.") + }); + + it('setPaymentToken() success', async () => { + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken1155 + ) + }) + + it('setPaymentToken() fail: not real badge', async () => { + await childOrganization.connect(owner).setPaymentToken( + 1000, + paymentToken1155 + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it('setPaymentToken() fail: not leader', async () => { + await childOrganization.connect(signer1).setPaymentToken( + 0, + paymentToken1155 + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it('setDelegates() success', async () => { + await childOrganization.connect(owner).setDelegates( + 0, + [leaderSigner.address], [true] + ) + + assert.equal( + await childOrganization.isDelegate(0, leaderSigner.address), + true ); - await expect(organization.connect(otherAccount).setBadgeURI(0, "ipfs/managerSuccess")) - .to.emit(organization, "URI") - .withArgs("ipfs/managerSuccess", 0) + await childOrganization.connect(leaderSigner).setSigner( + 0, + leaderSigner.address + ) - expect(await organization.uri(0)).to.equal("ipfs/managerSuccess"); + assert.equal( + await childOrganization.getSigner(0), + leaderSigner.address + ); + }) + + it('setDelegates() fail: not real badge', async () => { + await childOrganization.connect(owner).setDelegates( + 1000, + [leaderSigner.address], + [true] + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it('setDelegates() fail: not leader', async () => { + await childOrganization.connect(signer1).setDelegates( + 0, + [leaderSigner.address], + [true] + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") }); - it("revert: setBadgeURI(0, '')", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - expect(organization.setBadgeURI(0, "")) - .to.be.revertedWith("BadgerScout::setBadgeURI: URI must be set.") + it('setDelegates() fail: arrays not equal length', async () => { + await childOrganization.connect(owner).setDelegates( + 0, + [leaderSigner.address], + [true, false] + ).should.be.revertedWith("BadgerScout::setDelegates: _delegates and _isDelegate arrays must be the same length.") }); - it("revert: setBadgeURI(0, 'placeholder') missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); + it('setDelegatesBatch() success', async () => { + await childOrganization.connect(owner).setDelegatesBatch( + [0, 0], + [leaderSigner.address, leaderSigner.address], + [true, false] + ) - expect(organization.connect(otherAccount).setBadgeURI(0, "ipfs/newuri")) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this.") + assert.equal( + await childOrganization.isDelegate(0, leaderSigner.address), + false + ); + }) + + it('setDelegatesBatch() fail: not real badge', async () => { + await childOrganization.connect(owner).setDelegatesBatch( + [1000, 1000], + [leaderSigner.address, leaderSigner.address], + [true, false] + ).should.be.revertedWith("BadgerScout::_verifyFullBatch: Can only call this for setup badges.") + }) + + it('setDelegatesBatch() fail: not leader', async () => { + await childOrganization.connect(signer1).setDelegatesBatch( + [0, 0], + [leaderSigner.address, leaderSigner.address], + [true, false] + ).should.be.revertedWith("BadgerScout::_verifyFullBatch: Only leaders can call this.") }); - it("revert: setManagers(0, [other], [true]) missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount)['setManagers(uint256,address[],bool[])'](0, [otherAccount.address], [true])) - .to.be.revertedWith("BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this.") + it('setDelegatesBatch() fail: arrays not equal length', async () => { + await childOrganization.connect(owner).setDelegatesBatch( + [0, 0], + [leaderSigner.address, leaderSigner.address], + [true] + ).should.be.revertedWith("BadgerScout::setDelegatesBatch: _ids, _delegates, and _isDelegate must be the same length.") }); - it("revert: setManagers(0, [], [true]) arrays not equal", async function () { - const { organization } = await loadFixture(deployNewOrganization); + it('execTransaction() success', async () => { + // mint a mock to the contract + await mock1155.connect(owner).mint( + childOrganization.address, 0, 11, "0x"); - await expect(organization['setManagers(uint256,address[],bool[])'](0, [], [true])) - .to.be.revertedWith("BadgerScout::setManagers: _managers and _isManager must be the same length.") + // build the transfer transaction + const transferTx = await mock1155.populateTransaction.safeTransferFrom( + childOrganization.address, owner.address, 0, 1, "0x"); + + // Transfer mock1155 to signer1 + await childOrganization.connect(owner).execTransaction( + mock1155.address, + transferTx.data, + 0, + ) + }) + + it('execTransaction() fail: is not built', async () => { + await childOrganization.connect(owner).execTransaction( + organizationMaster.address, + "0x0000000000000000000000000000000000000000", + 0 + ).should.be.reverted; }); - it("revert: setManagers([other], []) arrays not equal", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); + it('execTranscation() fail: is not owner', async () => { + await childOrganization.connect(signer1).execTransaction( + badger.address, + "0x00000000", + 0 + ).should.be.revertedWith("Ownable: caller is not the owner") + }); + }) - await expect(organization['setManagers(address[],bool[])']([otherAccount.address], [])) - .to.be.revertedWith("BadgerScout::setManagers: _managers and _isManager must be the same length.") + describe("Badger: BadgerOrganization.sol", async () => { + it("leaderMint() success", async () => { + await childOrganization.connect(owner).leaderMint( + signer1.address, + 0, + 1, + "0x" + ) + }) + + it("leaderMint() fail: not real badge", async () => { + await childOrganization.connect(owner).leaderMint( + signer1.address, + 1000, + 1, + "0x" + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") }); - it("revert: setManagers([other], [true]) missing permission", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); - - await expect(organization.connect(otherAccount)['setManagers(address[],bool[])']([otherAccount.address], [true])) - .to.be.revertedWith("Ownable: caller is not the owner") + it("leaderMint() fail: not leader", async () => { + await childOrganization.connect(signer1).leaderMint( + signer1.address, + 0, + 1, + "0x" + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") }); - it("revert: setManagers([address0], [true])", async function () { - const { organization } = await loadFixture(deployNewOrganization); + it("leaderMintBatch() success", async () => { + await childOrganization.connect(owner).leaderMintBatch( + [signer1.address, leaderSigner.address], + 0, + [1, 1], + "0x" + ) + }) - await expect(organization['setManagers(address[],bool[])']([ethers.constants.AddressZero], [true])) - .to.be.revertedWith("BadgerScout::setManagers: Manager cannot be the zero address.") + it("leaderMintBatch() fail: not real badge", async () => { + await childOrganization.connect(owner).leaderMintBatch( + [signer1.address, leaderSigner.address], + 1000, + [1, 1], + "0x" + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") }); - it("revert: setManagers(0, [address0], [true])", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - await expect(organization['setManagers(uint256,address[],bool[])'](0, [ethers.constants.AddressZero], [true])) - .to.be.revertedWith("BadgerScout::setManagers: Manager cannot be the zero address.") + it("leaderMintBatch() fail: not leader", async () => { + await childOrganization.connect(signer1).leaderMintBatch( + [signer1.address, leaderSigner.address], + 0, + [1, 1], + "0x" + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") }); - it("call: setManagers(0, [other], [true])", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); + it("leaderMintBatch() fail: arrays not equal length", async () => { + await childOrganization.connect(owner).leaderMintBatch( + [signer1.address, leaderSigner.address], + 0, + [1, 1, 1], + "0x" + ).should.be.revertedWith("BadgerOrganization::leaderMintBatch: _tos and _amounts must be the same length.") + }); - const managerKey = getManagerKey(0, otherAccount.address); + it("leaderMintFullBatch() success", async () => { + await childOrganization.connect(owner).leaderMintFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1], + "0x" + ) + }) - await ( - expect(organization['setManagers(uint256,address[],bool[])']( - 0, [otherAccount.address], [true] - )).to.emit(organization, "ManagerUpdated") - .withArgs(managerKey, true) + it("leaderMintFullBatch() success: delegate", async() => { + await childOrganization.connect(owner).setDelegates( + 0, + [leaderSigner.address], + [true] + ) + + await childOrganization.connect(leaderSigner).leaderMintFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1], + "0x" + ) + }) + + it("leaderMintFullBatch() fail: not real badge", async () => { + await childOrganization.connect(owner).leaderMintFullBatch( + [signer1.address, leaderSigner.address], + [1000, 1000], + [1, 1], + "0x" + ).should.be.revertedWith("BadgerScout::_verifyFullBatch: Can only call this for setup badges.") + }); + + it("leaderMintFullBatch() fail: not leader", async () => { + await childOrganization.connect(signer1).leaderMintFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1], + "0x" + ).should.be.revertedWith("BadgerScout::_verifyFullBatch: Only leaders can call this.") + }); + + it("leaderMintFullBatch() fail: arrays not equal length", async () => { + await childOrganization.connect(owner).leaderMintFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1, 1], + "0x" + ).should.be.revertedWith("BadgerOrganization::leaderMintFullBatch: _froms, _ids, and _amounts must be the same length.") + }); + + it("revoke() success", async () => { + await childOrganization.connect(owner).revoke( + signer1.address, + 0, + 1, + ) + }) + + it("revoke() fail: insufficient balance", async () => { + await childOrganization.connect(owner).revoke( + signer1.address, + 1000, + 1, + ).should.be.revertedWith("ERC1155: burn amount exceeds balance") + }); + + it("revoke() fail: not leader", async () => { + await childOrganization.connect(signer1).revoke( + signer1.address, + 0, + 1, + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it('revokeBatch()', async () => { + // mint 10 badge 0s to signer1 + await childOrganization.connect(owner).leaderMint( + signer1.address, + 0, + 10, + "0x" + ) + + await childOrganization.connect(owner).revokeBatch( + [signer1.address, leaderSigner.address], + 0, + [1, 1], + ) + }) + + it("revokeBatch() fail: not leader", async () => { + await childOrganization.connect(signer1).revokeBatch( + [signer1.address, leaderSigner.address], + 0, + [1, 1], + ).should.be.revertedWith("BadgerScout::onlyLeader: Only leaders can call this.") + }); + + it("revokeBatch() fail: arrays not equal length", async () => { + await childOrganization.connect(owner).revokeBatch( + [signer1.address, leaderSigner.address], + 0, + [1, 1, 1], + ).should.be.revertedWith("BadgerOrganization::revokeBatch: _from and _amounts must be the same length.") + }); + + it("revokeFullBatch() success", async () => { + await childOrganization.connect(owner).revokeFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1], + ) + }) + + it("revokeFullBatch() success: delegate", async () => { + await childOrganization.connect(owner).setDelegates( + 0, + [leaderSigner.address], + [true] + ) + + await childOrganization.connect(leaderSigner).revokeFullBatch( + [signer1.address], + [0], + [1], + ) + }) + + it('revokeFullBatch() fail: insufficient balance', async () => { + await childOrganization.connect(owner).revokeFullBatch( + [signer1.address, leaderSigner.address], + [1000, 1000], + [1, 1], + ).should.be.revertedWith("ERC1155: burn amount exceeds balance") + }) + + it("revokeFullBatch() fail: not leader", async () => { + await childOrganization.connect(signer1).revokeFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1], + ).should.be.revertedWith("BadgerOrganization::_verifyFullBatch: Only leaders can call this.") + }); + + it("revokeFullBatch() fail: arrays not equal length", async () => { + await childOrganization.connect(owner).revokeFullBatch( + [signer1.address, leaderSigner.address], + [0, 0], + [1, 1, 1], + ).should.be.revertedWith("BadgerOrganization::revokeFullBatch: _froms, _ids, and _amounts must be the same length.") + }); + + it("forfeit() success", async () => { + await childOrganization.connect(signer1).forfeit( + 0, + 1, + "0x" + ) + }); + + it("forfeit() fail: insufficient balance", async () => { + await childOrganization.connect(signer1).forfeit( + 0, + 10000, + "0x" + ).should.be.revertedWith("ERC1155: burn amount exceeds balance") + }) + + it("safeTransferFrom() success", async () => { + // Set the account bound token to be transferable + await childOrganization.connect(owner).setAccountBound( + 0, + false + ); + + assert.equal( + await childOrganization.getAccountBound(0), + false + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(signer1).safeTransferFrom( + signer1.address, + userSigner.address, + 0, + 1, + "0x" + ) + }) + + it('safeTransferFrom() success: leader can transfer account bound', async () => { + // Set this badge as account bound + await childOrganization.connect(owner).setAccountBound( + 0, + true + ); + + assert.equal( + await childOrganization.getAccountBound(0), + true + ) + + // mint a token to the owner to test transferring + await childOrganization.connect(owner).leaderMint( + owner.address, + 0, + 2, + "0x" + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(owner).safeTransferFrom( + owner.address, + userSigner.address, + 0, + 1, + "0x" + ) + }) + + it("safeTransferFrom() success: delegate can transfer account bound", async () => { + // Set this badge as account bound + await childOrganization.connect(owner).setAccountBound( + 0, + true + ); + + assert.equal( + await childOrganization.getAccountBound(0), + true + ) + + // mint a token to the owner to test transferring + await childOrganization.connect(owner).leaderMint( + leaderSigner.address, + 0, + 2, + "0x" + ) + + // Set the delegate + await childOrganization.connect(owner).setDelegates( + 0, + [leaderSigner.address], + [true] + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(leaderSigner).safeTransferFrom( + leaderSigner.address, + userSigner.address, + 0, + 1, + "0x" + ) + }); + + it("safeTransferFrom() success: can transfer to contract", async () => { + // mint a token to the owner to test transferring + await childOrganization.connect(owner).leaderMint( + signer1.address, + 0, + 2, + "0x" + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 1, + "0x" + ) + }) + + it("safeTransferFrom() fail: transferring out of contract as user", async () => { + await childOrganization.connect(signer1).safeTransferFrom( + childOrganization.address, + userSigner.address, + 0, + 1, + "0x" + ).should.be.revertedWith("ERC1155: caller is not token owner nor approved") + }) + + it("safeTransferFrom() fail: account bound", async () => { + // Set this badge as account bound + await childOrganization.connect(owner).setAccountBound( + 0, + true + ); + + // mint a stand in + await childOrganization.connect(owner).leaderMint( + signer1.address, + 0, + 1, + "0x" + ) + + // Try and transfer the account bound token to another account will fail + await childOrganization.connect(signer1).safeTransferFrom( + signer1.address, + userSigner.address, + 0, + 1, + "0x" + ).should.be.revertedWith("BadgerScout::_verifyTransfer: Missing the proper transfer permissions.") + }) + + it("safeBatchTransferFrom() success", async () => { + // Set the account bound token to be transferable + await childOrganization.connect(owner).setAccountBound( + 0, + false + ); + + assert.equal( + await childOrganization.getAccountBound(0), + false + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(signer1).safeBatchTransferFrom( + signer1.address, + userSigner.address, + [0, 0], + [1, 1], + "0x" + ) + }) + + it('safeBatchTransferFrom() success: leader can transfer account bound', async () => { + // Set this badge as account bound + await childOrganization.connect(owner).setAccountBound( + 0, + true + ); + + assert.equal( + await childOrganization.getAccountBound(0), + true + ) + + // mint a token to the owner to test transferring + await childOrganization.connect(owner).leaderMint( + owner.address, + 0, + 2, + "0x" + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(owner).safeBatchTransferFrom( + owner.address, + userSigner.address, + [0, 0], + [1, 1], + "0x" + ) + }) + + it("safeBatchTransferFrom() success: delegate can transfer account bound", async () => { + // Set this badge as account bound + await childOrganization.connect(owner).setAccountBound( + 0, + true + ); + + assert.equal( + await childOrganization.getAccountBound(0), + true + ) + + // mint a token to the owner to test transferring + await childOrganization.connect(owner).leaderMint( + leaderSigner.address, + 0, + 2, + "0x" + ) + + // Set the delegate + await childOrganization.connect(owner).setDelegates( + 0, + [leaderSigner.address], + [true] + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(leaderSigner).safeBatchTransferFrom( + leaderSigner.address, + userSigner.address, + [0, 0], + [1, 1], + "0x" + ) + }); + + it("safeBatchTransferFrom() success: can transfer to contract", async () => { + // mint a token to the owner to test transferring + await childOrganization.connect(owner).leaderMint( + signer1.address, + 0, + 2, + "0x" + ) + + // Try and transfer the account bound token to another account will succeed + await childOrganization.connect(signer1).safeBatchTransferFrom( + signer1.address, + childOrganization.address, + [0, 0], + [1, 1], + "0x" + ) + }) + + it("safeBatchTransferFrom() fail: transferring out of contract as user", async () => { + await childOrganization.connect(signer1).safeBatchTransferFrom( + childOrganization.address, + userSigner.address, + [0, 0], + [1, 1], + "0x" + ).should.be.revertedWith("ERC1155: caller is not token owner nor approved") + }) + + it("safeBatchTransferFrom() fail: account bound", async () => { + // Set this badge as account bound + await childOrganization.connect(owner).setAccountBound( + 0, + true + ); + + // mint a stand in + await childOrganization.connect(owner).leaderMint( + signer1.address, + 0, + 1, + "0x" + ) + + // Try and transfer the account bound token to another account will fail + await childOrganization.connect(signer1).safeBatchTransferFrom( + signer1.address, + userSigner.address, + [0, 0], + [1, 1], + "0x" + ).should.be.revertedWith("BadgerScout::_verifyTransfer: Missing the proper transfer permissions.") + }) + + it("depositETH() success", async () => { + /// set claimable to true + await childOrganization.connect(owner).setClaimable( + 0, + true + ) + + // set 1 ETH as the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentTokenETH + ); + + // deposit the eth + await childOrganization.connect(signer1).depositETH(0, { + value: ethers.utils.parseEther("1") + }) + }) + + it('depositETH() fail: not real badge', async () => { + await childOrganization.connect(signer1).depositETH(1000, { + value: ethers.utils.parseEther("1") + }).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for setup badges.") + }) + + it("depositETH() fail: not claimable", async () => { + // set signer to none + await childOrganization.connect(owner).setSigner( + 0, + "0x0000000000000000000000000000000000000000" + ) + + await childOrganization.connect(owner).setClaimable( + 0, + false + ); + + await childOrganization.connect(signer1).depositETH(0, { + value: ethers.utils.parseEther("1") + }).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for claimable badges.") + }) + + it("depositETH() fail: invalid payment token", async () => { + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken1155 + ) + + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + await childOrganization.connect(signer1).depositETH(0, { + value: ethers.utils.parseEther("1") + }).should.be.revertedWith("BadgerScout::_verifyPayment: Invalid payment token.") + }) + + it('depositERC20() success', async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); + + // mint some tokens to the signer + await mock20.connect(owner).mint( + signer1.address, + 1000 + ) + + // approve the contract to spend the tokens + await mock20.connect(signer1).approve( + childOrganization.address, + 1000 + ) + + // deposit the tokens + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 1 + ) + }) + + it('depositERC20() fail: not real badge', async () => { + await childOrganization.connect(signer1).depositERC20( + 1000, + mock20.address, + 1 + ).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for setup badges.") + }) + + it('depositERC20() fail: not claimable', async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + false + ); + + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 1 + ).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for claimable badges.") + }) + + it('depositERC20() fail: invalid payment token', async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken1155 + ); + + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 1 + ).should.be.revertedWith("BadgerScout::_verifyPayment: Invalid payment token.") + }) + + it('depositERC20() fail: not enough allowance', async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); + + // mint some tokens to the signer + await mock20.connect(owner).mint( + signer1.address, + 1000 + ) + + // deposit the tokens + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 10000000 + ).should.be.revertedWith("ERC20: insufficient allowance") + }) + + it("onERC1155Received() success", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken1155 + ); + + // mint some tokens to the signer + await mock1155.connect(owner).mint( + signer1.address, + 0, + 15, + "0x" + ) + + // encode 0 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) + + assert.notEqual( + data, + "0x" + ) + + // transfer the token to the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 1, + data ); }); - it("call: setManagers([other], [true])", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); + it("onERC1155Received() success: normal transfer", async () => { + await mock1155.connect(owner).mint( + signer1.address, + 0, + 15, + "0x" + ) - const managerKey = getOrgManagerKey(otherAccount.address); - - await ( - expect(organization['setManagers(address[],bool[])']( - [otherAccount.address], [true] - )).to.emit(organization, "ManagerUpdated") - .withArgs(managerKey, true) + // transfer the token to the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 1, + "0x" ); + }) + + it("onERC1155Received() fail: not real badge", async () => { + // encode 1000 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [1000] + ) + + // transfer the token to the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 1, + data + ).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for setup badges.") }); - // setHooks - it("revert: setHooks(0, [other], [true]) missing permission", async function () { - const { organization, hook, otherAccount } = await loadFixture(deployNewHook); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, hook.address]); - - await ( - expect(organization.connect(otherAccount).setHooks(slot, [hook.address], [true])) - .to.be.revertedWith("BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this.") + it("onERC1155Received() fail: not claimable", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + false ); + + // encode 0 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) + + // transfer the token to the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 1, + data + ).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for claimable badges.") }); - it("revert: setHooks(0, [other], [true]) arrays wrong length", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHook); - - const target = ethers.Wallet.createRandom(); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, target.address]); - - await ( - expect(organization.connect(owner).setHooks(slot, [target.address], [true, true])) - .to.be.revertedWith("BadgerScout::setHooks: _hooks and _isHook must be the same length.") + it("onERC1155Received() fail: invalid payment token", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true ); + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); + + // encode 0 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) + + // transfer the token to the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 1, + data + ).should.be.revertedWith("BadgerScout::_verifyPayment: Invalid payment token.") }); - it("revert: setHooks(0, [address0], [true]) zero address", async function () { - const { organization, owner } = await loadFixture(deployNewOrganization); + it("onERC1155Received() fail: not enough balance", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, ethers.constants.AddressZero]); + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken1155 + ); - await expect(organization.connect(owner).setHooks(slot, [ethers.constants.AddressZero], [true])) - .to.be.revertedWith("BadgerScout::setHooks: Hook cannot be the zero address.") + // encode 0 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) + + // transfer the token to the contract + await mock1155.connect(signer1).safeTransferFrom( + signer1.address, + childOrganization.address, + 0, + 10000000, + data + ).should.be.revertedWith("ERC1155: insufficient balance for transfer") }); - it("revert: setHooks(0, [other], [true]) not a contract", async function () { - const { organization, otherAccount } = await loadFixture(deployNewOrganization); + it("onERC721Received() success", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, otherAccount.address]); + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken721 + ); - await expect(organization.setHooks(slot, [otherAccount.address], [true])) - .to.be.revertedWith("BadgerOrganizationHooked::_configManager: Manager is not a contract.") - }); - - it("call: setHooks(0, [other], [true])", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHook); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, hook.address]); - - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); - - const transactionsData = [ - organization.interface.encodeFunctionData("setHooks", [slot, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [slot, hook.address, hookConfig]) - ]; - - await expect(organization.connect(owner).multicall(transactionsData)) - .to.emit(organization, "HookUpdated").withArgs(slot, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(slot, hookConfig); - }); - - // configHook - it("revert: configHook(slot, hook, '0x')", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHook); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, hook.address]); - - await expect(organization.connect(owner).configHook(slot, hook.address, "0x")) - .to.be.revertedWith("BadgerOrganizationHooked::_configHook: Hook is not enabled.") - }); - - it("revert: configHook(0, hook, config) missing permission", async function () { - const { organization, hook, otherAccount } = await loadFixture(deployNewHook); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, hook.address]); - - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); - - await expect(organization.connect(otherAccount).configHook(slot, hook.address, hookConfig)) - .to.be.revertedWith("BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this.") - }); - - // configManager - it("call: configManager(manager, config)", async function () { - const { manager, organization, owner } = await loadFixture(deployNewManagedOrganization); - - const managerKey = getOrgManagerKey(manager.address) - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[manager.address], [true]]), - organization.interface.encodeFunctionData("configManager(address,bytes)", [manager.address, config]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "ManagerConfigured").withArgs(managerKey, config); - }); - - it("call: configManager(0, manager, config)", async function () { - const { manager, organization, owner } = await loadFixture(deployNewManagedOrganization); - - const managerKey = getManagerKey(0, manager.address) - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(uint256,address[],bool[])", [0, [manager.address], [true]]), - organization.interface.encodeFunctionData("configManager(uint256,address,bytes)", [0, manager.address, config]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "ManagerConfigured").withArgs(managerKey, config); - }); - - it("revert: configManager(manager, config) missing permission", async function () { - const { manager, organization, otherAccount } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - await expect(organization.connect(otherAccount)["configManager(address,bytes)"](manager.address, config)) - .to.be.revertedWith("BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this.") - }); - - it("revert: configManager(0, manager, config) missing permission", async function () { - const { manager, organization, otherAccount } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - await expect(organization.connect(otherAccount)["configManager(uint256,address,bytes)"](0, manager.address, config)) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this.") - }); - - it("revert: configManager(manager, config) Manager not enabled", async function () { - const { manager, organization } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - await expect(organization["configManager(address,bytes)"](manager.address, config)) - .to.be.revertedWith("BadgerOrganizationHooked::_configManager: Manager is not enabled.") - }); - - - it("revert: configManager(manager, config) Not configurable module", async function () { - const { manager, organization, otherAccount } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - await expect(organization.connect(otherAccount)["configManager(address,bytes)"](manager.address, config)) - .to.be.revertedWith("BadgerScout::onlyOrganizationManager: Only the Owner or Organization Manager can call this.") - }); - - it("revert: configManager(manager, config) Manager not contract", async function () { - const { owner, organization, otherAccount } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - organization.interface.encodeFunctionData("configManager(address,bytes)", [otherAccount.address, config]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerOrganizationHooked::_configManager: Manager is not a contract.") - }); - - it("revert: configManager(manager, config) Manager not configured module", async function () { - const { badgerFactory, owner, organization } = await loadFixture(deployNewOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[badgerFactory.address], [true]]), - organization.interface.encodeFunctionData("configManager(address,bytes)", [badgerFactory.address, config]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerOrganizationHooked::_configManager: Manager is not a configured Badger module.") - }); - - // isOrganizationManager - it("call: isOrganizationManager(owner)", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const random = ethers.Wallet.createRandom(); - const tx = await organization.connect(owner)['setManagers(address[],bool[])']([otherAccount.address], [true]) - await tx.wait(); - - expect(await organization.isOrganizationManager(owner.address)).to.be.true; - expect(await organization.isOrganizationManager(otherAccount.address)).to.be.true; - expect(await organization.isOrganizationManager(random.address)).to.be.false; - }); - - // isBadgeManager - it("call: isBadgeManager(0, owner)", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const tx = await organization.connect(owner)['setManagers(uint256,address[],bool[])'](0, [otherAccount.address], [true]) - await tx.wait(); - - const random = ethers.Wallet.createRandom(); - - expect(await organization.isBadgeManager(0, owner.address)).to.be.true; - expect(await organization.isBadgeManager(0, otherAccount.address)).to.be.true; - expect(await organization.isBadgeManager(0, random.address)).to.be.false; - }); - - // supportsInterface - it("call: supportsInterface(0xd2779f52)", async function () { - const { organization } = await loadFixture(deployNewOrganization); - - expect(await organization.supportsInterface("0x01ffc9a7")).to.equal(true); - expect(await organization.supportsInterface("0xd2779f52")).to.equal(true); - expect(await organization.supportsInterface("0x7a3851dc")).to.equal(true); - }); - - it("revert: initialize(0) already initialized", async function () { - const { organization, owner } = await loadFixture(deployNewOrganization); - - org = { - deployer: owner.address, - uri: "x", - organizationURI: "x", - name: "x", - symbol: "X" + // mint 50 tokens to the signer + for (let i = 0; i < 10; i++) { + tx = await mock721.connect(owner).mint( + signer1.address, + i + ) + tx.wait() } - await expect(organization.initialize(org)).to.be.revertedWith("Initializable: contract is already initialized"); - }); - }); + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) - describe("BadgerHooked.sol", async function () { - it("call: getHooks(slot):", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHook); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, hook.address]); - - await organization.connect(owner).setHooks(slot, [hook.address], [true]); - - expect(await organization.getHooks(slot)).to.deep.equal([hook.address]); + // build the overloaded safeTransferFrom function + await mock721.connect(signer1)["safeTransferFrom(address,address,uint256,bytes)"]( + signer1.address, + childOrganization.address, + 0, + data + ) }); - it("call: setHook(slot, hook, false)", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHook); + it("onERC721Received() success: normal transfer", async () => { + await mock721.connect(signer1)["safeTransferFrom(address,address,uint256,bytes)"]( + signer1.address, + childOrganization.address, + 2, + "0x" + ) + }) - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, hook.address]); + it("onERC721Received() fail: not real badge", async () => { + // encode 1000 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [1000] + ) - await organization.connect(owner).setHooks(slot, [hook.address], [false]) - - expect(await organization.getHooks(slot)).to.deep.equal([]); + // build the overloaded transfer from + await mock721.connect(signer1)["safeTransferFrom(address,address,uint256,bytes)"]( + signer1.address, + childOrganization.address, + 1, + data + ).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for setup badges.") }); - it("revert: setHook(slot, random, true)", async function () { - const { organization, owner } = await loadFixture(deployNewHook); - - const slot = ethers.utils.solidityKeccak256(["uint256", "address"], [0, organization.address]); + it("onERC721Received() fail: not claimable", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + false + ); - await expect(organization.connect(owner).setHooks(slot, [organization.address], [true])) - .to.be.revertedWith("BadgerHooks::_setHook: Hook does not implement IBadgerHook.") + // set signer as none + await childOrganization.connect(owner).setSigner( + 0, + "0x0000000000000000000000000000000000000000" + ); + + // encode 0 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) + + await mock721.connect(owner).mint( + signer1.address, + 55 + ) + + // transfer the token to the contract + await mock721.connect(signer1)["safeTransferFrom(address,address,uint256,bytes)"]( + signer1.address, + childOrganization.address, + 55, + data + ).should.be.revertedWith("BadgerScout::_verifyBadge: Can only call this for claimable badges.") }); - it("revert: mint() Transfer bound", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHook); + it("onERC721Received() fail: invalid payment token", async () => { + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); - /// Make token transfer bound - const BEFORE_TRANSFER_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); - /// set transfer bound hook, configure it, and mint a badge to a user. - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_TRANSFER_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_TRANSFER_SLOT, hook.address, hookConfig]), - organization.interface.encodeFunctionData("mint", [otherAccount.address, 0, 100, "0x"]) - ] + // encode 0 as badge into the data + const data = ethers.utils.defaultAbiCoder.encode( + ["uint256"], + [0] + ) - /// Execute the setup transactions - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_TRANSFER_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(BEFORE_TRANSFER_SLOT, hookConfig) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 100) - - /// See if transfer bound works as expected - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, owner.address, 0, 100, "0x")) - .to.be.revertedWith("BadgerTransferBound::execute: Invalid permission to transfer token.") + // transfer the token to the contract + await mock721.connect(signer1)["safeTransferFrom(address,address,uint256,bytes)"]( + signer1.address, + childOrganization.address, + 3, + data + ).should.be.revertedWith("BadgerScout::_verifyPayment: Invalid payment token.") }); - it("call: supportsInterface(0x6847c1d5)", async function () { - const { hook } = await loadFixture(deployNewHook); + it("claimMint() success: signature", async () => { + mnemonic = "test test test test test test test test test test test junk"; + claimSigner = await ethers.Wallet.fromMnemonic(mnemonic, "m/44'/60'/0'/0/1"); - expect(await hook.supportsInterface("0x7cc2d017")).to.equal(false); - expect(await hook.supportsInterface("0x6847c1d5")).to.equal(true); //IBadgerHook interface - expect(await hook.supportsInterface("0x01ffc9a7")).to.equal(true); // IERC165 - expect(await hook.supportsInterface("0x56dbdf14")).to.equal(true); // IBadgerConfigured + // set the badge as claimable + await childOrganization.connect(owner).setSigner( + 0, + claimSigner.address + ) + + const messageHash = ethers.utils.solidityKeccak256( + ["address", "uint256", "uint256", "bytes"], + [ + signer1.address, + 0, + 1, + "0x" + ] + ) + + // sign the message hash + const signature = await claimSigner.signMessage(ethers.utils.arrayify(messageHash)) + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); + + // mint some tokens to the signer + await mock20.connect(owner).mint( + signer1.address, + 1000 + ) + + // approve the contract to spend the tokens + await mock20.connect(signer1).approve( + childOrganization.address, + 1000 + ) + + // deposit the tokens + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 1 + ) + + // claim the mint + await childOrganization.connect(signer1).claimMint( + signature, + 0, + 1, + "0x" + ) + }) + + it("claimMint() success: claimable", async () => { + // set signer as none + await childOrganization.connect(owner).setSigner( + 0, + "0x0000000000000000000000000000000000000000" + ); + + // set the badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); + + // mint some tokens to the signer + await mock20.connect(owner).mint( + signer1.address, + 1000 + ) + + // approve the contract to spend the tokens + await mock20.connect(signer1).approve( + childOrganization.address, + 1000 + ) + + // deposit the tokens + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 1 + ) + + // claim the mint + await childOrganization.connect(signer1).claimMint( + "0x", + 0, + 1, + "0x" + ) + }) + + it("claimMint() fail: invalid signature", async () => { + mnemonic = "test test test test test test test test test test test junk"; + claimSigner = await ethers.Wallet.fromMnemonic(mnemonic, "m/44'/60'/0'/0/1"); + + // set the badge as claimable + await childOrganization.connect(owner).setSigner( + 0, + signer1.address + ) + + const messageHash = ethers.utils.solidityKeccak256( + ["address", "uint256", "uint256", "bytes"], + [ + signer1.address, + 0, + 1, + "0x" + ] + ) + + // sign the message hash + const signature = await claimSigner.signMessage(ethers.utils.arrayify(messageHash)) + + // set the payment token + await childOrganization.connect(owner).setPaymentToken( + 0, + paymentToken20 + ); + + // mint some tokens to the signer + await mock20.connect(owner).mint( + signer1.address, + 1000 + ) + + // approve the contract to spend the tokens + await mock20.connect(signer1).approve( + childOrganization.address, + 1000 + ) + + // deposit the tokens + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 1 + ) + + // claim the mint + await childOrganization.connect(signer1).claimMint( + signature, + 0, + 1, + "0x" + ).should.be.revertedWith("BadgerScout::_verifySignature: Invalid signature.") + }) + + it("claimMint() fail: not real badge", async () => { + // set badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // set signer to none + await childOrganization.connect(owner).setSigner( + 0, + "0x0000000000000000000000000000000000000000" + ); + + // deposit + await childOrganization.connect(signer1).depositERC20( + 0, + mock20.address, + 100 + ) + + // claim the mint + await childOrganization.connect(signer1).claimMint( + "0x", + 1000, + 1, + "0x" + ).should.be.revertedWith("BadgerScout::onlyRealBadge: Can only call this for setup badges.") + }) + + it("claimMint() fail: not claimable", async () => { + // set badge as not claimable + await childOrganization.connect(owner).setClaimable( + 0, + false + ); + + // claim the mint + await childOrganization.connect(signer1).claimMint( + "0x", + 0, + 1, + "0x" + ).should.be.revertedWith("BadgerOragnization::claimMint: This badge is not claimable.") }); - }); -}); \ No newline at end of file + + it("claimMint() fail: amount is zero", async () => { + // claim the mint + await childOrganization.connect(sigSigner).claimMint( + "0x", + 0, + 0, + "0x" + ).should.be.revertedWith("BadgerScout::claimMint: Amount must be greater than 0.") + }) + + it("claimMint() fail: has not funded", async () => { + // set badge as claimable + await childOrganization.connect(owner).setClaimable( + 0, + true + ); + + // claim the mint + await childOrganization.connect(sigSigner).claimMint( + "0x", + 0, + 1, + "0x" + ).should.be.revertedWith("BadgerScout::_verifyFunding: User has not funded the badge.") + }) + + it("uri() success: has badge uri", async () => { + assert.equal( + await childOrganization.uri(0), + "uri" + ) + }) + + it("uri() success: no badge uri", async () => { + assert.equal( + await childOrganization.uri(1), + "baseuri" + ) + }) + + it('contractURI() success', async () => { + assert.equal( + await childOrganization.contractURI(), + "newURI" + ) + }) + + it('supportsInterface() success', async () => { + // Test ERC1155Upgradeable + assert.equal( + await childOrganization.supportsInterface("0xd9b67a26"), + true + ); + + // Test ERC1155HolderUpgradeable + assert.equal( + await childOrganization.supportsInterface( + "0x4e2312e0" + ), true + ) + + // Test ERC721ReceiverUpgradeable + assert.equal( + await childOrganization.supportsInterface( + "0x150b7a02" + ), true + ) + + // Test ERC165Upgradeable + assert.equal( + await childOrganization.supportsInterface( + "0x01ffc9a7" + ), true + ) + }); + }) +}) \ No newline at end of file diff --git a/contracts/test/hooks/forfeit/BadgerForfeitForbidden.js b/contracts/test/hooks/forfeit/BadgerForfeitForbidden.js deleted file mode 100644 index 6299849..0000000 --- a/contracts/test/hooks/forfeit/BadgerForfeitForbidden.js +++ /dev/null @@ -1,124 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHookOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerForfeitForbidden"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerForfeitForbidden.sol", async function () { - it("call: forfeit()", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHookOrganization); - - const BEFORE_FORFEIT_SLOT = await organization.BEFORE_FORFEIT(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, false]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_FORFEIT_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_FORFEIT_SLOT, hook.address, hookConfig]), - organization.interface.encodeFunctionData("mint", [otherAccount.address, 0, 100, "0x"]) - ] - await organization.connect(owner).multicall(transactions) - - await expect(organization.connect(otherAccount).forfeit(0, 100, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, ethers.constants.AddressZero, 0, 100) - }); - - it("revert: forfeit() forfeit forbidden", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHookOrganization); - - const BEFORE_FORFEIT_SLOT = await organization.BEFORE_FORFEIT(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); - - /// set hook, configure it, and mint a badge to a user. - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_FORFEIT_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_FORFEIT_SLOT, hook.address, hookConfig]), - organization.interface.encodeFunctionData("mint", [otherAccount.address, 0, 100, "0x"]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_FORFEIT_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(BEFORE_FORFEIT_SLOT, hookConfig) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 100); - - await expect(organization.connect(otherAccount).forfeit(0, 100, "0x")) - .to.be.revertedWith("BadgerForfeitForbidden::execute: Invalid permission to forfeit token.") - }); - - it("call: forfeit() can disable hook", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHookOrganization); - - const BEFORE_FORFEIT_SLOT = await organization.BEFORE_FORFEIT(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); - - /// set hook, configure it, and mint a badge to a user. - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_FORFEIT_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_FORFEIT_SLOT, hook.address, hookConfig]), - organization.interface.encodeFunctionData("mint", [otherAccount.address, 0, 100, "0x"]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_FORFEIT_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(BEFORE_FORFEIT_SLOT, hookConfig) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 100); - - await organization.setHooks(BEFORE_FORFEIT_SLOT, [hook.address], [false]); - - await expect(organization.connect(otherAccount).forfeit(0, 100, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, ethers.constants.AddressZero, 0, 100) - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/hook/BadgerHookBlocklist.js b/contracts/test/hooks/hook/BadgerHookBlocklist.js deleted file mode 100644 index 54ca243..0000000 --- a/contracts/test/hooks/hook/BadgerHookBlocklist.js +++ /dev/null @@ -1,135 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerHookBlocklist"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const BlocklistHook = await ethers.getContractFactory("BadgerForfeitForbidden"); - blocklistHook = await BlocklistHook.deploy(); - blocklistHook = await blocklistHook.deployed(); - - const GoodHook = await ethers.getContractFactory("BadgerTransferBound"); - goodHook = await GoodHook.deploy(); - goodHook = await goodHook.deployed(); - - const BEFORE_SET_SLOT = await organization.BEFORE_SET_HOOK(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["address"], [blocklistHook.address]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_SET_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_SET_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_SET_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(BEFORE_SET_SLOT, hookConfig) - - return { hook, blocklistHook, goodHook, organization, owner, otherAccount } - } - - describe("BadgerHookBlocklist.sol", async function () { - it("call: setHooks()", async function () { - const { organization, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const BEFORE_TRANSFER_SLOT = await organization.BEFORE_TRANSFER(); - - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_TRANSFER_SLOT, [goodHook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_TRANSFER_SLOT, goodHook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_TRANSFER_SLOT, goodHook.address, true) - .to.emit(organization, "HookConfigured").withArgs(BEFORE_TRANSFER_SLOT, hookConfig) - }); - - it("call: setHooks() isHook false", async function () { - const { organization, hook, blocklistHook, owner } = await loadFixture(deployNewHooksOrganization); - - const BEFORE_TRANSFER_SLOT = await organization.BEFORE_TRANSFER(); - - await expect(organization.connect(owner).setHooks(BEFORE_TRANSFER_SLOT, [hook.address], [false])) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_TRANSFER_SLOT, hook.address, false) - - - const BEFORE_FORFEIT_SLOT = await organization.BEFORE_FORFEIT(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["address"], [blocklistHook.address]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_FORFEIT_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_FORFEIT_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(BEFORE_FORFEIT_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(BEFORE_FORFEIT_SLOT, hookConfig) - }); - - it("revert: setHooks() blocklisted hook", async function () { - const { organization, hook, blocklistHook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const BEFORE_FORFEIT_SLOT = await organization.BEFORE_FORFEIT(); - const hookConfig = ethers.utils.defaultAbiCoder.encode(["uint256", "bool"], [0, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [BEFORE_FORFEIT_SLOT, [blocklistHook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [BEFORE_FORFEIT_SLOT, blocklistHook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerHookBlacklist::execute: Cannot enable blocklisted hook.") - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/mint/BadgerMintMax.js b/contracts/test/hooks/mint/BadgerMintMax.js deleted file mode 100644 index bcd72fb..0000000 --- a/contracts/test/hooks/mint/BadgerMintMax.js +++ /dev/null @@ -1,112 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} -function getOrgManagerKey(manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["address"], [manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerMintMax"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerMintMax.sol", async function () { - it("call: mint()", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - }); - - it("revert: mint() > max", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1001, "0x")) - .to.be.revertedWith("BadgerMintMax::execute: Max mint reached.") - }); - - it("revert: configHook() Max == 0", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, 0]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerMintMax::config: Max must be greater than zero.") - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/mint/BadgerMintMaxAllowance.js b/contracts/test/hooks/mint/BadgerMintMaxAllowance.js deleted file mode 100644 index 9508107..0000000 --- a/contracts/test/hooks/mint/BadgerMintMaxAllowance.js +++ /dev/null @@ -1,112 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} -function getOrgManagerKey(manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["address"], [manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerMintMaxAllowance"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerMintMaxAllowance.sol", async function () { - it("call: mint()", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - }); - - it("revert: mint() > max", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1001, "0x")) - .to.be.revertedWith("BadgerMintMaxAllowance::execute: Max mint reached.") - }); - - it("revert: configHook() Max == 0", async function () { - const { organization, hook, owner } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, 0]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerMintMaxAllowance::config: Max must be greater than zero.") - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/mint/BadgerMintMaxSupply.js b/contracts/test/hooks/mint/BadgerMintMaxSupply.js deleted file mode 100644 index 57094aa..0000000 --- a/contracts/test/hooks/mint/BadgerMintMaxSupply.js +++ /dev/null @@ -1,117 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} -function getOrgManagerKey(manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["address"], [manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerMintMaxSupply"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerMintMaxSupply.sol", async function () { - it("call: mint()", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - }); - - it("revert: mint() > max supply", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await organization.connect(owner).mint(otherAccount.address, 0, 500, "0x") - - await expect(organization.mint(otherAccount.address, 0, 501, "0x")) - .to.be.revertedWith("BadgerMintMaxSupply::execute: Max supply exceeded.") - }); - - it("revert: configHook() supply > max", async function () { - const { organization, hook, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, 350]); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 500, "0x")) - .to.emit(organization, "TransferSingle") - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerMintMaxSupply::config: Max must be greater than the already minted supply.") - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/mint/BadgerMintSelf.js b/contracts/test/hooks/mint/BadgerMintSelf.js deleted file mode 100644 index 42e2ad6..0000000 --- a/contracts/test/hooks/mint/BadgerMintSelf.js +++ /dev/null @@ -1,120 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} -function getOrgManagerKey(manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["address"], [manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerMintSelf"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_MINT(); - const hookConfig = await getEncodedHookConfig(hook, [0, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerMintSelf.sol", async function () { - it("call: mint() not operator managed", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewHooksOrganization); - - const random = ethers.Wallet.createRandom(); - - const SLOT = await organization.BEFORE_MINT(); - const config = await getEncodedHookConfig(hook, [0, false]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - organization.interface.encodeFunctionData("configHook", [SLOT, hook.address, config]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "ManagerUpdated").withArgs(getOrgManagerKey(otherAccount.address), true) - .to.emit(organization, "HookConfigured").withArgs(SLOT, config) - - await expect(organization.connect(otherAccount).mint(random.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(otherAccount.address, ethers.constants.AddressZero, random.address, 0, 1000) - }); - - it("call: mint()", async function () { - const { organization, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.mint(owner.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, owner.address, 0, 1000) - }); - - it("revert: mint() only to self", async function () { - const { organization, otherAccount } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.mint(otherAccount.address, 0, 501, "0x")) - .to.be.revertedWith("BadgerMintSelfOperated::execute: Only mint to self") - }); - - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/revoke/BadgerRevokeForbidden.js b/contracts/test/hooks/revoke/BadgerRevokeForbidden.js deleted file mode 100644 index 9a1f2c7..0000000 --- a/contracts/test/hooks/revoke/BadgerRevokeForbidden.js +++ /dev/null @@ -1,175 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} -function getOrgManagerKey(manager) { - const encoded = ethers.utils.defaultAbiCoder.encode(["address"], [manager]); - return ethers.utils.solidityKeccak256(["bytes"], [encoded]); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerRevokeForbidden"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [0, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerRevokeForbidden.sol", async function () { - it("call: revoke() no hook", async function () { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const random = ethers.Wallet.createRandom(); - - const transactions = [ - organization.interface.encodeFunctionData("mint", [random.address, 0, 1000, "0x"]), - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - ]; - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, random.address, 0, 1000) - .to.emit(organization, "ManagerUpdated").withArgs(getOrgManagerKey(otherAccount.address), true) - - await expect(organization.connect(otherAccount).revoke(random.address, 0, 1000)) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, random.address, ethers.constants.AddressZero, 0, 1000) - }); - - it("revert: revoke() revoke forbidden", async function () { - const { organization, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const random = ethers.Wallet.createRandom(); - - const managerKey = getOrgManagerKey(otherAccount.address); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - organization.interface.encodeFunctionData("mint", [random.address, 0, 1000, "0x"]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, random.address, 0, 1000) - .to.emit(organization, "ManagerUpdated").withArgs(managerKey, true) - - await expect(organization.connect(otherAccount).revoke(random.address, 0, 1000)) - .to.be.revertedWith("BadgerRevokeForbidden::execute: Invalid permission to revoke token.") - }); - - it("revert: revoke() not manager", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const random = ethers.Wallet.createRandom(); - - await expect(organization.mint(random.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle") - .withArgs(owner.address, ethers.constants.AddressZero, random.address, 0, 1000) - - await expect(organization.connect(otherAccount).revoke(random.address, 0, 1000)) - .to.be.revertedWith("BadgerScout::onlyBadgeManager: Only Managers can call this."); - }); - - it("revert: revoke() is manager", async function () { - const { organization, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const random = ethers.Wallet.createRandom(); - - transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - organization.interface.encodeFunctionData("mint", [random.address, 0, 1000, "0x"]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, random.address, 0, 1000) - .to.emit(organization, "ManagerUpdated").withArgs(getOrgManagerKey(otherAccount.address), true) - - await expect(organization.connect(otherAccount).revoke(random.address, 0, 1000)) - .to.be.revertedWith("BadgerRevokeForbidden::execute: Invalid permission to revoke token.") - }); - - it("call: revoke() disabled hook", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [0, false]); - const random = ethers.Wallet.createRandom(); - - /// disable the hook - await expect(organization.configHook(HOOK_SLOT, hook.address, hookConfig)) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - organization.interface.encodeFunctionData("mint", [random.address, 0, 1000, "0x"]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, random.address, 0, 1000) - .to.emit(organization, "ManagerUpdated").withArgs(getOrgManagerKey(otherAccount.address), true) - - await expect(organization.connect(otherAccount).revoke(random.address, 0, 1000)) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, random.address, ethers.constants.AddressZero, 0, 1000) - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/transfer/BadgerTransferBlocklist.js b/contracts/test/hooks/transfer/BadgerTransferBlocklist.js deleted file mode 100644 index dd04823..0000000 --- a/contracts/test/hooks/transfer/BadgerTransferBlocklist.js +++ /dev/null @@ -1,124 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const [,, blockedAccount] = await ethers.getSigners(); - const Hook = await ethers.getContractFactory("BadgerTransferBlocklist"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [blockedAccount.address, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount, blockedAccount } - } - - describe("BadgerTransferBlocklist.sol", async function () { - it("revert: safeTransferFrom() transfer blocklist", async function () { - const { organization, hook, blockedAccount, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, blockedAccount.address, 0, 1000, "0x")) - .to.be.revertedWith("BadgerTransferBlocklist::execute: Invalid permission to transfer token.") - }); - - it("revert: safeTransferFrom() transfer blocklist for managers", async function () { - const { organization, hook, blockedAccount, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(blockedAccount.address, 0, 1000, "0x")) - .to.be.revertedWith("BadgerTransferBlocklist::execute: Invalid permission to transfer token.") - }); - - it("call: safeTransferFrom() burn", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).forfeit(0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, ethers.constants.AddressZero, 0, 1000) - }); - - it("call: safeTransferFrom() disabled hook", async function () { - const { organization, hook, blockedAccount, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [blockedAccount.address, false]); - - /// disable the hook - await expect(organization.configHook(HOOK_SLOT, hook.address, hookConfig)) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - /// Mint tokens to otherAccount - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, blockedAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, blockedAccount.address, 0, 1000) - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/transfer/BadgerTransferBound.js b/contracts/test/hooks/transfer/BadgerTransferBound.js deleted file mode 100644 index a00f5ad..0000000 --- a/contracts/test/hooks/transfer/BadgerTransferBound.js +++ /dev/null @@ -1,116 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerTransferBound"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [0, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerTransferBound.sol", async function () { - it("revert: safeTransferFrom() transfer bound", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, owner.address, 0, 1000, "0x")) - .to.be.revertedWith("BadgerTransferBound::execute: Invalid permission to transfer token.") - }); - - it("call: safeTransferFrom() burn", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).forfeit(0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, ethers.constants.AddressZero, 0, 1000) - }); - - it("call: safeTransferFrom() disabled hook", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [0, false]); - - /// disable the hook - await expect(organization.configHook(HOOK_SLOT, hook.address, hookConfig)) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - /// Mint tokens to otherAccount - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, owner.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, owner.address, 0, 1000) - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/hooks/transfer/BadgerTransferBoundManaged.js b/contracts/test/hooks/transfer/BadgerTransferBoundManaged.js deleted file mode 100644 index fe959b8..0000000 --- a/contracts/test/hooks/transfer/BadgerTransferBoundManaged.js +++ /dev/null @@ -1,131 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -async function getEncodedHookConfig(hook, config) { - const schema = (await hook.CONFIG_SCHEMA()).split(','); - return ethers.utils.defaultAbiCoder.encode(schema, config); -} - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewHooksOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - const Hook = await ethers.getContractFactory("BadgerTransferBoundManaged"); - hook = await Hook.deploy(); - hook = await hook.deployed(); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [0, true]); - - const transactions = [ - organization.interface.encodeFunctionData("setHooks", [HOOK_SLOT, [hook.address], [true]]), - organization.interface.encodeFunctionData("configHook", [HOOK_SLOT, hook.address, hookConfig]), - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.emit(organization, "HookUpdated").withArgs(HOOK_SLOT, hook.address, true) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - return { hook, organization, owner, otherAccount } - } - - describe("BadgerTransferBoundManaged.sol", async function () { - it("revert: safeTransferFrom() transfer bound", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, owner.address, 0, 1000, "0x")) - .to.be.revertedWith("BadgerTransferBoundManaged::execute: Invalid permission to transfer token.") - }); - - it("call: safeTransferFrom() burn", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).forfeit(0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, ethers.constants.AddressZero, 0, 1000) - }); - - it("call: safeTransferFrom() is manager", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[otherAccount.address], [true]]), - organization.interface.encodeFunctionData("mint", [otherAccount.address, 0, 1000, "0x"]), - ] - - tx = await organization.connect(owner).multicall(transactions); - tx = await tx.wait(); - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, owner.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, owner.address, 0, 1000) - }); - - it("call: safeTransferFrom() disabled hook", async function () { - const { organization, hook, otherAccount, owner } = await loadFixture(deployNewHooksOrganization); - - const HOOK_SLOT = await organization.BEFORE_TRANSFER(); - const hookConfig = await getEncodedHookConfig(hook, [0, false]); - - /// disable the hook - await expect(organization.configHook(HOOK_SLOT, hook.address, hookConfig)) - .to.emit(organization, "HookConfigured").withArgs(HOOK_SLOT, hookConfig) - - /// Mint tokens to otherAccount - await expect(organization.connect(owner).mint(otherAccount.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(owner.address, ethers.constants.AddressZero, otherAccount.address, 0, 1000) - - await expect(organization.connect(otherAccount).safeTransferFrom(otherAccount.address, owner.address, 0, 1000, "0x")) - .to.emit(organization, "TransferSingle").withArgs(otherAccount.address, otherAccount.address, owner.address, 0, 1000) - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/managers/BadgeManagerClaimable.js b/contracts/test/managers/BadgeManagerClaimable.js deleted file mode 100644 index d882742..0000000 --- a/contracts/test/managers/BadgeManagerClaimable.js +++ /dev/null @@ -1,101 +0,0 @@ -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewManagedOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - // set organization manager to other account - const Manager = await ethers.getContractFactory("BadgerManagerClaimable"); - const manager = await Manager.deploy(); - await manager.deployed(); - - return { manager, organization, owner, otherAccount } - } - - describe("BadgerManagerClaimable.sol", async function () { - it("call: supportsInterface(0x6847c1d5)", async function () { - const { manager } = await loadFixture(deployNewManagedOrganization); - - expect(await manager.supportsInterface("0x7cc2d017")).to.equal(false); - expect(await manager.supportsInterface("0x56dbdf14")).to.equal(true); // Manager interface - expect(await manager.supportsInterface("0x01ffc9a7")).to.equal(true); // IERC165 - }); - - it("call: mint()", async function () { - const { manager, organization, owner, otherAccount } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 1000]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[manager.address], [true]]), - organization.interface.encodeFunctionData("configManager(address,bytes)", [manager.address, config]) - ] - - await organization.connect(owner).multicall(transactions); - - expect(await manager.connect(otherAccount).mint(organization.address, 0, "0x")) - .to.emit(organization, "Minted") - .withArgs(otherAccount.address, ethers.constants.AddressZero, 0, 1000); - }); - - it("revert: configManager(manager, (0,0)) amount is 0", async function () { - const { manager, organization, owner } = await loadFixture(deployNewManagedOrganization); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [0, 0]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[manager.address], [true]]), - organization.interface.encodeFunctionData("configManager(address,bytes)", [manager.address, config]) - ] - - await expect(organization.connect(owner).multicall(transactions)) - .to.be.revertedWith("BadgerManagerClaimable::config: Amount must be greater than zero."); - }); - }); -}); \ No newline at end of file diff --git a/contracts/test/managers/BadgeManagerSignature.js b/contracts/test/managers/BadgeManagerSignature.js deleted file mode 100644 index e06c2bb..0000000 --- a/contracts/test/managers/BadgeManagerSignature.js +++ /dev/null @@ -1,165 +0,0 @@ -const { loadFixture, time } = require("@nomicfoundation/hardhat-network-helpers"); -const { expect } = require("chai"); - -describe("Badger", function () { - async function deployBadgerSingleton() { - const BadgerSingleton = await ethers.getContractFactory("BadgerOrganization"); - const badgerSingleton = await BadgerSingleton.deploy(); - await badgerSingleton.deployed(); - - return { badgerSingleton } - } - - async function deployBadgerFactory() { - const [owner, otherAccount] = await ethers.getSigners(); - - const { badgerSingleton } = await loadFixture(deployBadgerSingleton); - - const BadgerFactory = await ethers.getContractFactory("Badger"); - const badgerFactory = await BadgerFactory.deploy(badgerSingleton.address); - await badgerFactory.deployed(); - - expect(await badgerFactory.implementation()).to.equal(badgerSingleton.address); - - return { badgerFactory, owner, otherAccount }; - } - - async function deployNewOrganization() { - const { badgerFactory, owner, otherAccount } = await loadFixture(deployBadgerFactory); - - const config = { - deployer: owner.address, - uri: "ipfs/uri/{id}/", - organizationURI: "ipfs/org", - name: "Badger", - symbol: "BADGER" - } - - const tx = await badgerFactory.connect(owner).createOrganization(config); - const receipt = await tx.wait(); - - const organizationCreatedEvent = receipt.events.find(e => e.event === "OrganizationCreated"); - - const orgAddress = organizationCreatedEvent.args.organization; - - const organization = await ethers.getContractAt("BadgerOrganization", orgAddress); - - return { badgerFactory, organization, owner, otherAccount }; - } - - async function deployNewSignatureManagedOrganization() { - const { organization, owner, otherAccount } = await loadFixture(deployNewOrganization); - - // set organization manager to other account - const Manager = await ethers.getContractFactory("BadgerManagerSignature"); - const manager = await Manager.deploy(); - await manager.deployed(); - - const config = ethers.utils.defaultAbiCoder.encode(["uint256", "address"], [0, otherAccount.address]); - - const transactions = [ - organization.interface.encodeFunctionData("setManagers(address[],bool[])", [[manager.address], [true]]), - organization.interface.encodeFunctionData("configManager(address,bytes)", [manager.address, config]) - ] - - await organization.connect(owner).multicall(transactions); - - return { manager, organization, owner, otherAccount } - } - - describe("BadgerManagerSignature.sol", async function () { - it("call: mint()", async function () { - const { manager, organization, otherAccount } = await loadFixture(deployNewSignatureManagedOrganization); - - const [, , random] = await ethers.getSigners(); - - /// get current timestamp from ethers - const _deadline = await time.latest() + 1000; - const _nonce = 0; - const _data = "0x"; - - /// get signature of mint from otherAccount - const messageHash = ethers.utils.solidityKeccak256( - ["address", "uint256", "uint256", "uint256", "uint256", "address"], - [random.address, 0, 1000, _nonce, _deadline, organization.address] - ); - - const _signature = await otherAccount.signMessage(ethers.utils.arrayify(messageHash)); - - expect(await manager.connect(random).mint( - organization.address, 0, 1000, _data, _signature, _nonce, _deadline - )) - .to.emit(organization, "TransferSingle") - .withArgs(ethers.constants.AddressZero, ethers.constants.AddressZero, otherAccount.address, 0, 1000); - }); - - it("revert: mint() invalid signer", async function () { - const { manager, organization, owner, otherAccount } = await loadFixture(deployNewSignatureManagedOrganization); - - const [, , random] = await ethers.getSigners(); - - /// get current timestamp from ethers - const _deadline = await time.latest() + 1000; - const _nonce = 0; - const _data = "0x"; - - /// get signature of mint from otherAccount - const messageHash = ethers.utils.solidityKeccak256( - ["address", "uint256", "uint256", "uint256", "uint256", "address"], - [random.address, 0, 1000, _nonce, _deadline, organization.address] - ); - - const _signature = await owner.signMessage(ethers.utils.arrayify(messageHash)); - - await expect(manager.connect(random).mint( - organization.address, 0, 1000, _data, _signature, _nonce, _deadline - )).to.be.revertedWith("BadgerManagerSignature::mint: Invalid signer."); - }); - - it("revert: mint() invalid nonce", async function () { - const { manager, organization, otherAccount } = await loadFixture(deployNewSignatureManagedOrganization); - - const [, , random] = await ethers.getSigners(); - - /// get current timestamp from ethers - const _deadline = await time.latest() + 1000; - const _nonce = 1; - const _data = "0x"; - - /// get signature of mint from otherAccount - const messageHash = ethers.utils.solidityKeccak256( - ["address", "uint256", "uint256", "uint256", "uint256", "address"], - [random.address, 0, 1000, _nonce, _deadline, organization.address] - ); - - const _signature = await otherAccount.signMessage(ethers.utils.arrayify(messageHash)); - - await expect(manager.connect(random).mint( - organization.address, 0, 1000, _data, _signature, _nonce, _deadline - )).to.be.revertedWith("BadgerManagerSignature::mint: Invalid nonce."); - }); - - it("revert: mint() invalid deadline", async function () { - const { manager, organization, otherAccount } = await loadFixture(deployNewSignatureManagedOrganization); - - const [, , random] = await ethers.getSigners(); - - /// get current timestamp from ethers - const _deadline = await time.latest() - 1000; - const _nonce = 0; - const _data = "0x"; - - /// get signature of mint from otherAccount - const messageHash = ethers.utils.solidityKeccak256( - ["address", "uint256", "uint256", "uint256", "uint256", "address"], - [random.address, 0, 1000, _nonce, _deadline, organization.address] - ); - - const _signature = await otherAccount.signMessage(ethers.utils.arrayify(messageHash)); - - await expect(manager.connect(random).mint( - organization.address, 0, 1000, _data, _signature, _nonce, _deadline - )).to.be.revertedWith("BadgerManagerSignature::mint: Signature expired."); - }); - }); -}); \ No newline at end of file diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json deleted file mode 100644 index cdd381f..0000000 --- a/contracts/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": ["es2017", "es7", "es6", "dom"], - "declaration": true, - "outDir": "src/", - "strict": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "moduleResolution": "node" - }, - "include": [ - "build/abis/*.json", - "build/" - ], - "exclude": [ - "src/contracts/" - ] -} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b6e7069..1c90fa3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,9 @@ version: '3.8' services: - # This runs a local hardhat node for Badger to be deployed on - # and users of the front-end to connect and interact with. - # - # This enables the ability to develop on a local version of Badger - # without having to deploy to a testnet or mainnet. - badger_node: + # Run the hardhat node + badger_local_hardhat_node: build: - dockerfile: Dockerfile.dev + dockerfile: Dockerfile.dev.node context: ./contracts volumes: - .:/contracts/code @@ -16,130 +12,57 @@ services: ports: - "8545:8545" restart: unless-stopped - command: npx hardhat deploy - # Run a local instance of the Badger API and database - # by creating a local Postgres database in the api/ directory. + command: npx hardhat run scripts/deploy/deploy.js badger_db: image: postgres:13.2 container_name: badger_db - hostname: badger_db - volumes: - - ./api/database:/var/lib/postgresql/data + restart: always environment: POSTGRES_PASSWORD: badger POSTGRES_USER: badger POSTGRES_DB: badger + volumes: + - ./api/database:/var/lib/postgresql/data + hostname: badger_db ports: - '5432:5432' - restart: unless-stopped - # Start a local instance of Redis for that drives the websockets - # for the Badger API caching and messaging system. - badger_redis: - image: redis:6.2.1 - container_name: badger_redis - hostname: redis - ports: - - 6379:6379 - restart: unless-stopped - # Run the Badger API running on Django. This will run the API - # on port 8000 and will be accessible at http://localhost:8000 - badger_server: + # Run the badger server + web: container_name: badger_server build: dockerfile: Dockerfile.dev context: ./api - args: - NODE_IP: host.docker.internal - volumes: - - ./api:/code - env_file: - - ./.env + command: > + sh -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000" + restart: always ports: - '8000:8000' - restart: unless-stopped - depends_on: - - badger_node - - badger_db - - badger_redis - links: - - badger_node - - badger_db - - badger_redis - command: > - sh -c " - sleep 10 && - python manage.py migrate && - python manage.py runserver 0.0.0.0:8000 - " - # Run the onchain listener for Badger Factories in a separate worker - # that is loading data into the same database as the API. - badger_factory_listener: - container_name: badger_factory_listener - build: - dockerfile: Dockerfile.dev - context: ./api - args: - NODE_IP: host.docker.internal - volumes: - - ./api:/code env_file: - ./.env - restart: unless-stopped - depends_on: - - badger_node - - badger_db - - badger_server - links: - - badger_node:badger_node - - badger_db:badger_db - command: > - sh -c " - sleep 25 && - python manage.py listen_for_factories - " - # Run the onchain listener for Badger Organizations in a separate worker - # that is loading data into the same database as the API. - badger_organization_listener: - container_name: badger_organization_listener - build: - dockerfile: Dockerfile.dev - context: ./api - args: - NODE_IP: host.docker.internal volumes: - ./api:/code - env_file: - - ./.env - restart: unless-stopped depends_on: - - badger_node - badger_db - - badger_server links: - - badger_node:badger_node - - badger_db:badger_db - command: > - sh -c " - sleep 25 && - python manage.py listen_for_organizations - " - # Run the React frontend for Badger. This will run the frontend - # on port 3000 and will be accessible at http://localhost:3000 - # while consuming the state of all services apriori. - badger_frontend: + - badger_db + # Run the React frontend + frontend: container_name: badger_frontend build: dockerfile: Dockerfile.dev context: ./frontend args: - NPM_TOKEN: ${NPM_TOKEN} - REACT_APP_API_URL: http://localhost:8000 + # use FONTAWSOME_TOKEN in .env to get access to private fontawesome packages + FONTAWESOME_NPM_AUTH_TOKEN: ${FONTAWESOME_NPM_AUTH_TOKEN} + command: npm start --host 0.0.0.0 --disableHostCheck true + restart: always + ports: + - '3000:3000' + # make sure the volumes for hot reloading to work are setup volumes: - ./frontend:/code - /code/node_modules - /code/public - env_file: - - ./.env environment: - NODE_OPTIONS=--openssl-legacy-provider # ENABLE this to use the local backend @@ -149,20 +72,9 @@ services: - WATCHPACK_POLLING=true - WDS_SOCKET_HOST=127.0.0.1 - NODE_ENV=development - ports: - - '3000:3000' - restart: unless-stopped + env_file: + - ./.env depends_on: - - badger_node - - badger_db - - badger_redis - - badger_server + - web links: - - badger_node - - badger_db - - badger_redis - - badger_server - command: > - sh -c " - npm start --host 0.0.0.0 --disableHostCheck true - " \ No newline at end of file + - web diff --git a/example.env b/example.env index 2e030f3..171800a 100644 --- a/example.env +++ b/example.env @@ -1,61 +1,34 @@ -# ======================================================================================= -# Must provide to have access to install the FontAwesomePro icons. -# You can find your key at: https://fontawesome.com/account#pro-package-tokens -# 🚨 WE DO NOT PROVIDE A DEFAULT 🚨 -NPM_TOKEN="" +# ========== CHOOSE NETWORK ========== +ETHERSCAN_API_KEY = "" +ETH_ALCHEMY_KEY = "" +POLYGONSCAN_API_KEY = "" +POLYGON_ALCHEMY_KEY = "" -# ======================================================================================= -# Must provide this in order to have images upload to IPFS using Pinata. -# https://www.pinata.cloud/ --> https://docs.pinata.cloud/pinata-api/authentication -# 🚨 WE DO NOT PROVIDE A DEFAULT 🚨 +ETHEREUM_PRIVATE_KEY = "" +POLYGON_PRIVATE_KEY = "" +# ========== CHOOSE NETWORK ========== + +FONTAWESOME_NPM_AUTH_TOKEN="" + +API_SECRET_KEY="secret" +API_DEBUG="True" +API_ALCHEMY_API_KEY="" API_PINATA_API_KEY="" API_PINATA_API_SECRET_KEY="" -# ======================================================================================= -# Must provide this to declare which chain the dapp will run on when running. -# By using this variable to control the default network, the backend will automatically -# configure the correct network for the frontend. -# - Ethereum: 1 -# - Polygon: 137 -# - Local: 1337 -# ✅ WE PROVIDE A DEFAULT, BUT LOCAL SETTING. ✅ -REACT_APP_CHAIN_ID=1337 - -# ======================================================================================= -# Must provide this in order to run the needed blockchain calls. -# This is not just needed locally, the Badger system subsidizes the use of an RPC in preference -# of better and more consistent performance across users. -# https://dashboard.alchemy.com/ -# ✅ WE PROVIDE A DEFAULT, BUT A RATE LIMITED ONE. ✅ -REACT_APP_ALCHEMY_API_KEY="CLG_LCiDZkHaMGRaLQc_yhbhbSiv6NEL" +REACT_APP_API_URL = "http://localhost:8000" +REACT_APP_BADGER_ADDRESSES = {"Hardhat":"0x0165878A594ca255338adfa4d48449f69242Eb8F"} +REACT_APP_BADGER_IMPLEMENTATION = "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" +REACT_APP_ALCHEMY_API_KEY = "" +REACT_APP_PRODUCTION_CHAIN = "Hardhat" -# ======================================================================================= -# Only needed to verify contracts in production, localhost settings are configured by default. -# https://etherscan.io/myapikey -# https://polygonscan.com/myapikey -# ✅ WE PROVIDE A DEFAULT, BUT A RATE LIMITED ONE. ✅ -ETHERSCAN_API_KEY="MISKW1XTPR3TV9SZJU3X81NA5D7SKMW4BF" -POLYGONSCAN_API_KEY="MFFKNTIPSVBPUCX9YQ6D23K5BKXYAF9T87" +COINMARKETCAP_API_KEY = "" -# ======================================================================================= -# Must provide a private key that is used to deploy the contracts (which in turn determines the address of the Badger contract) -# In the local environment we use the default hardhat account to minimize the amount of setup needed. -# To interact with the Badger contract, you will need to use the same private key by importing the account -# to your MetaMask wallet. You can find the private key to import below. -# https://metamask.zendesk.com/hc/en-us/articles/360015290032-How-to-Import-an-Account -# 🚨 DO NOT USE A HOT PRIVATE KEY. MAKE A NEW DEPLOYER ACCOUNT AND USE THAT. 🚨 -# ✅ WE PROVIDE A DEFAULT, BUT HAS NO REAL MONEY OR OWNERSHIP. ✅ -PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" +# ========== DO NOT TOUCH ========== +POSTGRES_DB="badger" +POSTGRES_USER="badger" +POSTGRES_PASSWORD="badger" +POSTGRES_HOST="badger_db" +POSTGRES_PORT="5432" +# ========== DO NOT TOUCH ========== -# ======================================================================================= -# Must provide this to connect the frontend to the correct contracts. By default, we are using the -# the hardhat deployer on localhost which means you will not need to change anything. If you are deploying -# to a different network, you will need to change this. -# ✅ WE PROVIDE A DEFAULT, BUT A RATE LIMITED ONE. ✅ -REACT_APP_BADGER_ADDRESSES={"137":"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512","1337":"0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"} - -# ======================================================================================= -# Must provide an API key to CoinMarketCap to see the cost of the transactions when running Hardhat tests. -# https://pro.coinmarketcap.com/login?returnUrl=%2Faccount -# ✅ WE PROVIDE A DEFAULT, BUT A RATE LIMITED ONE. ✅ -COINMARKETCAP_API_KEY="d77522c4-189e-49e6-8011-251a4f6f8390" \ No newline at end of file diff --git a/frontend/Dockerfile.dev b/frontend/Dockerfile.dev index da4d59e..b3cd93f 100644 --- a/frontend/Dockerfile.dev +++ b/frontend/Dockerfile.dev @@ -1,29 +1,23 @@ +# Use node image FROM node -ARG NPM_TOKEN -ARG REACT_APP_API_URL +ARG FONTAWESOME_NPM_AUTH_TOKEN # Set working directory WORKDIR /code # Copy package.json -COPY package.json /code/ -COPY package-lock.json /code/ +COPY package.json /code/package.json # Load FontAwesome registry RUN npm config set "@fortawesome:registry" https://npm.fontawesome.com/ -RUN npm config set "//npm.fontawesome.com/:_authToken" ${NPM_TOKEN} -# Prepare the environment -ENV NODE_OPTIONS=--openssl-legacy-provider -ENV CHOKIDAR_USEPOLLING=true +# Set the auth token +RUN echo "//npm.fontawesome.com/:_authToken=${FONTAWESOME_NPM_AUTH_TOKEN}" > /code/.npmrc && \ + npm install && \ + rm -f /code/.npmrc + +# Set WATCHBACK_POLLING as true ENV WATCHBACK_POLLING=true -ENV NODE_ENV=development -ENV WDS_SOCKET_HOST=127.0.0.1 - -ENV REACT_APP_API_URL=${REACT_APP_API_URL} - -# Install the dependencies -RUN npm install COPY . /code/ \ No newline at end of file diff --git a/frontend/craco.config.js b/frontend/craco.config.js index a893657..cca1294 100644 --- a/frontend/craco.config.js +++ b/frontend/craco.config.js @@ -19,8 +19,6 @@ module.exports = { ignoreWarnings: [/Failed to parse source map/], alias: { '@components': path.resolve(__dirname, 'src/components/'), - '@contexts': path.resolve(__dirname, 'src/contexts/'), - '@pages': path.resolve(__dirname, 'src/pages/'), '@static': path.resolve(__dirname, 'src/static/'), '@style': path.resolve(__dirname, 'src/style/'), '@utils': path.resolve(__dirname, 'src/utils/'), diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 436f0ab..5f03394 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,7 +11,6 @@ "@craco/craco": "^7.0.0-alpha.0", "@emotion/react": "^11.9.3", "@emotion/styled": "^11.9.3", - "@fcannizzaro/react-use-cookie-watcher": "^2.0.6", "@fortawesome/fontawesome-pro": "^6.2.0", "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/free-brands-svg-icons": "^6.1.1", @@ -31,18 +30,15 @@ "dotenv-webpack": "^8.0.1", "ethers": "^5.5.1", "ipfs-only-hash": "^4.0.0", - "markdown-to-jsx": "^7.1.9", "react": "^18.2.0", "react-dom": "^18.2.0", "react-helmet-async": "^1.3.0", "react-router-dom": "^6.3.0", "react-scripts": "5.0.0", - "reconnecting-websocket": "^4.4.0", "siwe": "^1.1.6", "wagmi": "^0.6.8", "web-vitals": "^2.1.4", - "webpack": "^5.74.0", - "websocket": "^1.0.34" + "webpack": "^5.74.0" } }, "node_modules/@adobe/css-tools": { @@ -3337,11 +3333,6 @@ "@ethersproject/strings": "^5.5.0" } }, - "node_modules/@fcannizzaro/react-use-cookie-watcher": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@fcannizzaro/react-use-cookie-watcher/-/react-use-cookie-watcher-2.0.6.tgz", - "integrity": "sha512-f7cROMC+AEa2MRbGTz9sFgJyxq+50h4W+9i7W6/AfBsZz9Z6cVUU9s7AjSZQ4fcBrQptKGcEzmVVucX106MQHQ==" - }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.2.0", "resolved": "https://npm.fontawesome.com/@fortawesome/fontawesome-common-types/-/6.2.0/fontawesome-common-types-6.2.0.tgz", @@ -10984,6 +10975,7 @@ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", "hasInstallScript": true, + "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -12305,15 +12297,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -13055,30 +13038,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -13092,15 +13051,6 @@ "es6-promise": "^4.0.3" } }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -14390,19 +14340,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -20912,17 +20849,6 @@ "node": ">=0.10.0" } }, - "node_modules/markdown-to-jsx": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.9.tgz", - "integrity": "sha512-x4STVIKIJR0mGgZIZ5RyAeQD7FEZd5tS8m/htbcVGlex32J+hlSLj+ExrHCxP6nRKF1EKbcO7i6WhC1GtOpBlA==", - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -22281,11 +22207,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -25374,11 +25295,6 @@ "node": ">=0.10.0" } }, - "node_modules/reconnecting-websocket": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", - "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" - }, "node_modules/recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -27842,11 +27758,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -28231,6 +28142,7 @@ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", "hasInstallScript": true, + "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -28771,22 +28683,6 @@ "node": ">=4.0" } }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -28808,19 +28704,6 @@ "node": ">=0.8.0" } }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -29369,14 +29252,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -31641,11 +31516,6 @@ "@ethersproject/strings": "^5.5.0" } }, - "@fcannizzaro/react-use-cookie-watcher": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@fcannizzaro/react-use-cookie-watcher/-/react-use-cookie-watcher-2.0.6.tgz", - "integrity": "sha512-f7cROMC+AEa2MRbGTz9sFgJyxq+50h4W+9i7W6/AfBsZz9Z6cVUU9s7AjSZQ4fcBrQptKGcEzmVVucX106MQHQ==" - }, "@fortawesome/fontawesome-common-types": { "version": "6.2.0", "resolved": "https://npm.fontawesome.com/@fortawesome/fontawesome-common-types/-/6.2.0/fontawesome-common-types-6.2.0.tgz", @@ -37429,6 +37299,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "optional": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -38409,15 +38280,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -38988,26 +38850,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -39021,15 +38863,6 @@ "es6-promise": "^4.0.3" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -40025,21 +39858,6 @@ } } }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -44906,12 +44724,6 @@ "object-visit": "^1.0.0" } }, - "markdown-to-jsx": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.9.tgz", - "integrity": "sha512-x4STVIKIJR0mGgZIZ5RyAeQD7FEZd5tS8m/htbcVGlex32J+hlSLj+ExrHCxP6nRKF1EKbcO7i6WhC1GtOpBlA==", - "requires": {} - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -46017,11 +45829,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -48090,11 +47897,6 @@ } } }, - "reconnecting-websocket": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", - "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" - }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -49992,11 +49794,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -50264,6 +50061,7 @@ "version": "5.0.9", "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "optional": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -50661,34 +50459,6 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -51161,11 +50931,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 36b2dca..d22604a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,7 +6,6 @@ "@craco/craco": "^7.0.0-alpha.0", "@emotion/react": "^11.9.3", "@emotion/styled": "^11.9.3", - "@fcannizzaro/react-use-cookie-watcher": "^2.0.6", "@fortawesome/fontawesome-pro": "^6.2.0", "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/free-brands-svg-icons": "^6.1.1", @@ -26,18 +25,15 @@ "dotenv-webpack": "^8.0.1", "ethers": "^5.5.1", "ipfs-only-hash": "^4.0.0", - "markdown-to-jsx": "^7.1.9", "react": "^18.2.0", "react-dom": "^18.2.0", "react-helmet-async": "^1.3.0", "react-router-dom": "^6.3.0", "react-scripts": "5.0.0", - "reconnecting-websocket": "^4.4.0", "siwe": "^1.1.6", "wagmi": "^0.6.8", "web-vitals": "^2.1.4", - "webpack": "^5.74.0", - "websocket": "^1.0.34" + "webpack": "^5.74.0" }, "scripts": { "start": "WATCHBACK_POLLING=true craco start", diff --git a/frontend/public/BigBlocks.svg b/frontend/public/BigBlocks.svg new file mode 100644 index 0000000..64c612d --- /dev/null +++ b/frontend/public/BigBlocks.svg @@ -0,0 +1,320 @@ + + + + diff --git a/frontend/public/HouseBlocks.svg b/frontend/public/HouseBlocks.svg new file mode 100644 index 0000000..7d43f68 --- /dev/null +++ b/frontend/public/HouseBlocks.svg @@ -0,0 +1,251 @@ + + + + diff --git a/frontend/public/TallBlocks.svg b/frontend/public/TallBlocks.svg new file mode 100644 index 0000000..82f8194 --- /dev/null +++ b/frontend/public/TallBlocks.svg @@ -0,0 +1,497 @@ + + + + diff --git a/frontend/public/admintocontributor.png b/frontend/public/admintocontributor.png new file mode 100644 index 0000000..af4ba23 Binary files /dev/null and b/frontend/public/admintocontributor.png differ diff --git a/frontend/public/android-chrome-192x192.png b/frontend/public/android-chrome-192x192.png deleted file mode 100644 index 0752b73..0000000 Binary files a/frontend/public/android-chrome-192x192.png and /dev/null differ diff --git a/frontend/public/android-chrome-512x512.png b/frontend/public/android-chrome-512x512.png deleted file mode 100644 index f0b6032..0000000 Binary files a/frontend/public/android-chrome-512x512.png and /dev/null differ diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png deleted file mode 100644 index 61d7ccd..0000000 Binary files a/frontend/public/apple-touch-icon.png and /dev/null differ diff --git a/frontend/public/badger-badge-black.png b/frontend/public/badger-badge-black.png new file mode 100644 index 0000000..972b7a5 Binary files /dev/null and b/frontend/public/badger-badge-black.png differ diff --git a/frontend/public/badger-badge-white.png b/frontend/public/badger-badge-white.png new file mode 100644 index 0000000..b2fd48e Binary files /dev/null and b/frontend/public/badger-badge-white.png differ diff --git a/frontend/public/badger-black-white.svg b/frontend/public/badger-black-white.svg new file mode 100644 index 0000000..8ede1f0 --- /dev/null +++ b/frontend/public/badger-black-white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/public/badger-black-whitebg.png b/frontend/public/badger-black-whitebg.png new file mode 100644 index 0000000..d7ef3ef Binary files /dev/null and b/frontend/public/badger-black-whitebg.png differ diff --git a/frontend/public/badger-favicon.ico b/frontend/public/badger-favicon.ico new file mode 100644 index 0000000..61481ad Binary files /dev/null and b/frontend/public/badger-favicon.ico differ diff --git a/frontend/public/badger-logo-black.png b/frontend/public/badger-logo-black.png new file mode 100644 index 0000000..e9aa22c Binary files /dev/null and b/frontend/public/badger-logo-black.png differ diff --git a/frontend/public/badger-logo-white.png b/frontend/public/badger-logo-white.png new file mode 100644 index 0000000..b8dd80b Binary files /dev/null and b/frontend/public/badger-logo-white.png differ diff --git a/frontend/public/badger-logo-whiteblackbg.png b/frontend/public/badger-logo-whiteblackbg.png new file mode 100644 index 0000000..644e029 Binary files /dev/null and b/frontend/public/badger-logo-whiteblackbg.png differ diff --git a/frontend/public/browserconfig.xml b/frontend/public/browserconfig.xml deleted file mode 100644 index 2eca792..0000000 --- a/frontend/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #00ffe0 - - - diff --git a/frontend/public/favicon-16x16.png b/frontend/public/favicon-16x16.png deleted file mode 100644 index 0393cd6..0000000 Binary files a/frontend/public/favicon-16x16.png and /dev/null differ diff --git a/frontend/public/favicon-32x32.png b/frontend/public/favicon-32x32.png deleted file mode 100644 index 637f922..0000000 Binary files a/frontend/public/favicon-32x32.png and /dev/null differ diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico deleted file mode 100644 index a2f61a2..0000000 Binary files a/frontend/public/favicon.ico and /dev/null differ diff --git a/frontend/public/index.html b/frontend/public/index.html index df5fc98..beb5b86 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -3,55 +3,50 @@ - - - - - - - - - - + + + + + + + + - + - - + + - + + + + + Badger -
+ diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 0000000..e0a8b59 --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "Badger", + "name": "On-Chain Badge Credentials for Communities", + "icons": [ + { + "src": "badger-favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "badger-logo-white.png", + "type": "image/png", + "sizes": "645x511" + }, + { + "src": "badger-badge-white.png", + "type": "image/png", + "sizes": "348x360" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#FFFFFF", + "background_color": "#000000" +} diff --git a/frontend/public/media-kit/badges-example.png b/frontend/public/media-kit/badges-example.png deleted file mode 100644 index 018c75c..0000000 Binary files a/frontend/public/media-kit/badges-example.png and /dev/null differ diff --git a/frontend/public/media-kit/brand-bottom-spacer.svg b/frontend/public/media-kit/brand-bottom-spacer.svg deleted file mode 100644 index bf52723..0000000 --- a/frontend/public/media-kit/brand-bottom-spacer.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/media-kit/brand.svg b/frontend/public/media-kit/brand.svg deleted file mode 100644 index 9e45357..0000000 --- a/frontend/public/media-kit/brand.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/public/media-kit/empty-opengraph.png b/frontend/public/media-kit/empty-opengraph.png deleted file mode 100644 index 2787040..0000000 Binary files a/frontend/public/media-kit/empty-opengraph.png and /dev/null differ diff --git a/frontend/public/media-kit/interoperable-simple.png b/frontend/public/media-kit/interoperable-simple.png deleted file mode 100644 index e2b529a..0000000 Binary files a/frontend/public/media-kit/interoperable-simple.png and /dev/null differ diff --git a/frontend/public/media-kit/interoperable.png b/frontend/public/media-kit/interoperable.png deleted file mode 100644 index 2e0c972..0000000 Binary files a/frontend/public/media-kit/interoperable.png and /dev/null differ diff --git a/frontend/public/media-kit/logo-opengraph.png b/frontend/public/media-kit/logo-opengraph.png deleted file mode 100644 index 201ad8a..0000000 Binary files a/frontend/public/media-kit/logo-opengraph.png and /dev/null differ diff --git a/frontend/public/media-kit/logo.svg b/frontend/public/media-kit/logo.svg deleted file mode 100644 index 1ff18a5..0000000 --- a/frontend/public/media-kit/logo.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/frontend/public/media-kit/manual-actions.png b/frontend/public/media-kit/manual-actions.png deleted file mode 100644 index 76bdd09..0000000 Binary files a/frontend/public/media-kit/manual-actions.png and /dev/null differ diff --git a/frontend/public/mstile-150x150.png b/frontend/public/mstile-150x150.png deleted file mode 100644 index 5b59adb..0000000 Binary files a/frontend/public/mstile-150x150.png and /dev/null differ diff --git a/frontend/public/opengraph.png b/frontend/public/opengraph.png index 229cc35..3b4623d 100644 Binary files a/frontend/public/opengraph.png and b/frontend/public/opengraph.png differ diff --git a/frontend/public/querycode.svg b/frontend/public/querycode.svg new file mode 100644 index 0000000..8f687ca --- /dev/null +++ b/frontend/public/querycode.svg @@ -0,0 +1,45 @@ + + + + + + + select + distinct + from + where + where + to_address + block_timestamp + lower + contract_address + ::date + ::date + '2022-06-28' + \ + > + polygon.core.fact_token_transfers + = + \ + ( + '0x....' + ) + + RESULTS + + 0x123812905432328v9cc890e321n234910890 + 0x123812905432328v9cc890e321n234910890 + 0x123812905432328v9cc890e321n234910890 + 0x123812905432328v9cc890e321n234910890 + 0x123812905432328v9cc890e321n234910890 + 0x123812905432328v9cc890e321n234910890 + 0x123812905432328v9cc890e321n234910890 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + + diff --git a/frontend/public/safari-pinned-tab.svg b/frontend/public/safari-pinned-tab.svg deleted file mode 100644 index d907a99..0000000 --- a/frontend/public/safari-pinned-tab.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - diff --git a/frontend/public/site.webmanifest b/frontend/public/site.webmanifest deleted file mode 100644 index bc89676..0000000 --- a/frontend/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Badger", - "short_name": "Badger", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#00ffe0", - "background_color": "#00ffe0", - "display": "standalone" -} diff --git a/frontend/public/story-assets/mdao/app.png b/frontend/public/story-assets/mdao/app.png deleted file mode 100644 index e6b2b06..0000000 Binary files a/frontend/public/story-assets/mdao/app.png and /dev/null differ diff --git a/frontend/public/story-assets/mdao/graduates.png b/frontend/public/story-assets/mdao/graduates.png deleted file mode 100644 index a434a4d..0000000 Binary files a/frontend/public/story-assets/mdao/graduates.png and /dev/null differ diff --git a/frontend/public/story-assets/mdao/linkedin.png b/frontend/public/story-assets/mdao/linkedin.png deleted file mode 100644 index 79a9729..0000000 Binary files a/frontend/public/story-assets/mdao/linkedin.png and /dev/null differ diff --git a/frontend/public/story-assets/mdao/logo.png b/frontend/public/story-assets/mdao/logo.png deleted file mode 100644 index 550ec09..0000000 Binary files a/frontend/public/story-assets/mdao/logo.png and /dev/null differ diff --git a/frontend/public/story-assets/mdao/quoter_image.png b/frontend/public/story-assets/mdao/quoter_image.png deleted file mode 100644 index c38e440..0000000 Binary files a/frontend/public/story-assets/mdao/quoter_image.png and /dev/null differ diff --git a/frontend/public/story-assets/pinedao/app.png b/frontend/public/story-assets/pinedao/app.png deleted file mode 100644 index b6aa7bf..0000000 Binary files a/frontend/public/story-assets/pinedao/app.png and /dev/null differ diff --git a/frontend/public/story-assets/pinedao/guild.png b/frontend/public/story-assets/pinedao/guild.png deleted file mode 100644 index 6df9a23..0000000 Binary files a/frontend/public/story-assets/pinedao/guild.png and /dev/null differ diff --git a/frontend/public/story-assets/pinedao/logo.png b/frontend/public/story-assets/pinedao/logo.png deleted file mode 100644 index 7e42ce5..0000000 Binary files a/frontend/public/story-assets/pinedao/logo.png and /dev/null differ diff --git a/frontend/public/story-assets/pinedao/opensea.png b/frontend/public/story-assets/pinedao/opensea.png deleted file mode 100644 index f4ca251..0000000 Binary files a/frontend/public/story-assets/pinedao/opensea.png and /dev/null differ diff --git a/frontend/public/story-assets/pinedao/quoter_image.png b/frontend/public/story-assets/pinedao/quoter_image.png deleted file mode 100644 index 9a8c3a5..0000000 Binary files a/frontend/public/story-assets/pinedao/quoter_image.png and /dev/null differ diff --git a/frontend/public/story-assets/talentdao/app.png b/frontend/public/story-assets/talentdao/app.png deleted file mode 100644 index 875b4fe..0000000 Binary files a/frontend/public/story-assets/talentdao/app.png and /dev/null differ diff --git a/frontend/public/story-assets/talentdao/behaviors.png b/frontend/public/story-assets/talentdao/behaviors.png deleted file mode 100644 index 05c0038..0000000 Binary files a/frontend/public/story-assets/talentdao/behaviors.png and /dev/null differ diff --git a/frontend/public/story-assets/talentdao/leading-change.png b/frontend/public/story-assets/talentdao/leading-change.png deleted file mode 100644 index 40a5455..0000000 Binary files a/frontend/public/story-assets/talentdao/leading-change.png and /dev/null differ diff --git a/frontend/public/story-assets/talentdao/logo.png b/frontend/public/story-assets/talentdao/logo.png deleted file mode 100644 index 3505e49..0000000 Binary files a/frontend/public/story-assets/talentdao/logo.png and /dev/null differ diff --git a/frontend/public/story-assets/talentdao/quoter_image.png b/frontend/public/story-assets/talentdao/quoter_image.png deleted file mode 100644 index 0079f26..0000000 Binary files a/frontend/public/story-assets/talentdao/quoter_image.png and /dev/null differ diff --git a/frontend/public/story-assets/taptive/accomplishments.png b/frontend/public/story-assets/taptive/accomplishments.png deleted file mode 100644 index b4f63bc..0000000 Binary files a/frontend/public/story-assets/taptive/accomplishments.png and /dev/null differ diff --git a/frontend/public/story-assets/taptive/app.png b/frontend/public/story-assets/taptive/app.png deleted file mode 100644 index a14ef19..0000000 Binary files a/frontend/public/story-assets/taptive/app.png and /dev/null differ diff --git a/frontend/public/story-assets/taptive/collab.png b/frontend/public/story-assets/taptive/collab.png deleted file mode 100644 index c89db15..0000000 Binary files a/frontend/public/story-assets/taptive/collab.png and /dev/null differ diff --git a/frontend/public/story-assets/taptive/logo.png b/frontend/public/story-assets/taptive/logo.png deleted file mode 100644 index 2d4b63b..0000000 Binary files a/frontend/public/story-assets/taptive/logo.png and /dev/null differ diff --git a/frontend/public/story-assets/taptive/quoter_image.png b/frontend/public/story-assets/taptive/quoter_image.png deleted file mode 100644 index c258efe..0000000 Binary files a/frontend/public/story-assets/taptive/quoter_image.png and /dev/null differ diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..e7a209c --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,158 @@ +:root { + --page-margins: 20px; +} + +* { + font-family: 'Poppins', sans-serif; +} + +body { + overflow-x: hidden; +} + +.App { + position: relative; + min-height: 100vh; +} + +button { + background: transparent; + border: 1px solid #000; + outline: none; + padding: 5px 20px; + cursor: pointer; + border-radius: 5px; +} + +.button__unstyled { + background: none; + border: none; + padding: 0px; + text-align: left; + all: none; +} + +.button-primary { + width: auto; + background: #fff; + border: 1px solid #fff; + border-radius: 5px; + color: #000; + white-space: nowrap; + font-size: 12px; + padding-inline: 16px; +} + +.button-secondary { + width: auto; + background: #000; + border: 1px solid #fff; + border-radius: 5px; + color: #fff; + white-space: nowrap; + font-size: 12px; + padding-inline: 16px; +} + +.button__warning { + height: 40px; + border-radius: 5px; + border: 1px solid #FF0000; + color: #FF0000 !important; + font-size: 12px; + white-space: nowrap; +} + +.button__warning:hover, +.button__warning:focus { + background: #FF0000; + color: #fff !important; +} + +.lead { + font-size: 18px; +} + +.internal-link { + text-decoration: none; +} + +.link-wrapper { + margin: none !important; + color: inherit; + cursor: pointer; + text-decoration: none; + height: 100%; + width: 100%; + display: block; +} + +.link-text { + font-weight: 700; + color: rgba(0, 0, 0, .65); + text-decoration: unset; +} + +.container__background { + background: #FCFCFF; + border-radius: 10px; +} + +a { + transition: color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; +} + +@media screen and (max-width: 3000px) { + .page-margins{ + margin-right: 300px; + margin-left: 300px; + } + .page-margin-left{ + margin-left: 300px; + } + .page-margin-right{ + width: 100%; + margin-right: 300px; + } +} + +@media screen and (max-width: 1200px) { + .page-margins{ + margin-right: 100px; + margin-left: 100px; + } + .page-margin-left{ + margin-left: 100px; + } + .page-margin-right{ + width: 100%; + margin-right: 100px; + } +} +@media screen and (max-width: 900px) { + .page-margins{ + margin-right: 50px; + margin-left: 50px; + } + .page-margin-left{ + margin-left: 50px; + } + .page-margin-right{ + width: 100%; + margin-right: 50px; + } +} + +@media screen and (max-width: 600px) { + .page-margins{ + margin-right: 10px; + margin-left: 10px; + } + .page-margin-left{ + margin-left: 10px; + } + .page-margin-right{ + width: 100%; + margin-right: 10px; + } +} \ No newline at end of file diff --git a/frontend/src/App.js b/frontend/src/App.js index 8f3d78b..be4bf77 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -1,40 +1,34 @@ import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; + import { library } from '@fortawesome/fontawesome-svg-core' import { fal } from '@fortawesome/pro-light-svg-icons' -import { fab } from '@fortawesome/free-brands-svg-icons' -import { ErrorContextProvider } from "@contexts" +import Meta from '@components/seo/Meta'; -import { SEO, ScrollToTop, Wallet } from "@components" +import Landing from '@components/Landing'; -import { Dashboard, Page } from "@pages" +import Dashboard from '@components/Dashboard/Dashboard'; +import WalletWrapper from "@components/Wallet/WalletWrapper"; -import "@style/App.css" +import "./App.css"; -library.add(fal, fab) - -const title = "The Web3 Organization Key Solution | Badger"; -const description = "Level up the access-controls of your onchain organization and enjoy the benefits of a Web3 focused key solution." +library.add(fal) function App() { + const title = "BADGER | The Web3 Organization Key Solution"; + const description = "Level up the access-controls of your on-chain organization and enjoy the benefits of a Web3 focused key solution." + return (
- + - - - - - - - - - } /> - - } /> - + + + } /> + } /> + +
); diff --git a/frontend/src/abis/Badger.json b/frontend/src/abis/Badger.json index f6a40a3..8f9aa7a 100644 --- a/frontend/src/abis/Badger.json +++ b/frontend/src/abis/Badger.json @@ -1,153 +1,425 @@ [ - { - "inputs": [ - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract BadgerOrganization", - "name": "organization", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "name": "OrganizationCreated", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organizationStruct", - "type": "tuple" - } - ], - "name": "createOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "badgerOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_organizationId", - "type": "uint256" - } - ], - "name": "getOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "organization", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizations", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] + "type": "address" + } + ], + "name": "OrganizationCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "licenseKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "locked", + "type": "bool" + } + ], + "name": "VersionUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_deployer", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "string", + "name": "_organizationURI", + "type": "string" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "createOrganization", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "execTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_versionKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "getLicenseKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "getVersionKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_tokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_locked", + "type": "bool" + } + ], + "name": "setVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "versionKeyToFunded", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "versions", + "outputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "licenseKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "locked", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/frontend/src/abis/BadgerForfeitForbidden.json b/frontend/src/abis/BadgerForfeitForbidden.json deleted file mode 100644 index c29a5b5..0000000 --- a/frontend/src/abis/BadgerForfeitForbidden.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "forbidden", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerForfeitHook.json b/frontend/src/abis/BadgerForfeitHook.json deleted file mode 100644 index 1992699..0000000 --- a/frontend/src/abis/BadgerForfeitHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerHook.json b/frontend/src/abis/BadgerHook.json deleted file mode 100644 index 1992699..0000000 --- a/frontend/src/abis/BadgerHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerHookBlocklist.json b/frontend/src/abis/BadgerHookBlocklist.json deleted file mode 100644 index d921809..0000000 --- a/frontend/src/abis/BadgerHookBlocklist.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "blocked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerHookHook.json b/frontend/src/abis/BadgerHookHook.json deleted file mode 100644 index 1992699..0000000 --- a/frontend/src/abis/BadgerHookHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerHooked.json b/frontend/src/abis/BadgerHooked.json deleted file mode 100644 index 420d66b..0000000 --- a/frontend/src/abis/BadgerHooked.json +++ /dev/null @@ -1,130 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerManaged.json b/frontend/src/abis/BadgerManaged.json deleted file mode 100644 index 4560641..0000000 --- a/frontend/src/abis/BadgerManaged.json +++ /dev/null @@ -1,59 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerManager.json b/frontend/src/abis/BadgerManager.json deleted file mode 100644 index 24c4783..0000000 --- a/frontend/src/abis/BadgerManager.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerManagerClaimable.json b/frontend/src/abis/BadgerManagerClaimable.json deleted file mode 100644 index 4213f5c..0000000 --- a/frontend/src/abis/BadgerManagerClaimable.json +++ /dev/null @@ -1,94 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "amounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerManagerSignature.json b/frontend/src/abis/BadgerManagerSignature.json deleted file mode 100644 index a9f51ea..0000000 --- a/frontend/src/abis/BadgerManagerSignature.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_targetOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "signers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerMintHook.json b/frontend/src/abis/BadgerMintHook.json deleted file mode 100644 index 1992699..0000000 --- a/frontend/src/abis/BadgerMintHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerMintMax.json b/frontend/src/abis/BadgerMintMax.json deleted file mode 100644 index 5541dd1..0000000 --- a/frontend/src/abis/BadgerMintMax.json +++ /dev/null @@ -1,126 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "minted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerMintMaxAllowance.json b/frontend/src/abis/BadgerMintMaxAllowance.json deleted file mode 100644 index 5541dd1..0000000 --- a/frontend/src/abis/BadgerMintMaxAllowance.json +++ /dev/null @@ -1,126 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "minted", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerMintMaxSupply.json b/frontend/src/abis/BadgerMintMaxSupply.json deleted file mode 100644 index a0fa952..0000000 --- a/frontend/src/abis/BadgerMintMaxSupply.json +++ /dev/null @@ -1,121 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "maxSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerMintSelf.json b/frontend/src/abis/BadgerMintSelf.json deleted file mode 100644 index 3cea16a..0000000 --- a/frontend/src/abis/BadgerMintSelf.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "selfOperated", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerOrganization.json b/frontend/src/abis/BadgerOrganization.json index d2fe94c..c41ff2b 100644 --- a/frontend/src/abis/BadgerOrganization.json +++ b/frontend/src/abis/BadgerOrganization.json @@ -1,1034 +1,1332 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_slotHook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "contractURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "forfeit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organization", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tos", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mintBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "BadgeForfeited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "config", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BadgeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "isDelegate", + "type": "bool" + } + ], + "name": "DelegateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", "name": "organizationURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "revoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_froms", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - } - ], - "name": "revokeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - } - ], + "type": "string" + } + ], + "name": "OrganizationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "badgeId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "PaymentTokenDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [], + "name": "DOLPHIN_ETH", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "badgeDelegateKeyToIsDelegate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "badges", + "outputs": [ + { + "internalType": "uint256", + "name": "config", + "type": "uint256" + }, + { + "internalType": "string", "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + "internalType": "struct BadgerScoutInterface.PaymentToken", + "name": "paymentToken", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "claimMint", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "depositERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "execTransaction", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "forfeit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getAccountBound", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getClaimable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "internalType": "string", + "name": "_organizationURI", + "type": "string" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + } + ], + "name": "isDelegate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "leaderMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_tos", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "leaderMintBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_tos", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "leaderMintFullBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "organizationURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_froms", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "revokeBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_froms", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + } + ], + "name": "revokeFullBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "_amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_accountBound", + "type": "bool" + } + ], + "name": "setAccountBound", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_claimable", + "type": "bool" + }, + { + "internalType": "bool", + "name": "_accountBound", + "type": "bool" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } ], - "name": "uris", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } + "internalType": "struct BadgerScoutInterface.PaymentToken", + "name": "_paymentToken", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "_delegates", + "type": "address[]" + } + ], + "name": "setBadge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + } + ], + "name": "setBadgeURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "_claimable", + "type": "bool" + } + ], + "name": "setClaimable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "_delegates", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "_isDelegate", + "type": "bool[]" + } + ], + "name": "setDelegates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_ids", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "_delegates", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "_isDelegate", + "type": "bool[]" + } + ], + "name": "setDelegatesBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_uri", + "type": "string" + } + ], + "name": "setOrganizationURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "paymentKey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } ], - "stateMutability": "view", - "type": "function" - } -] + "internalType": "struct BadgerScoutInterface.PaymentToken", + "name": "_paymentToken", + "type": "tuple" + } + ], + "name": "setPaymentToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + } + ], + "name": "setSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/frontend/src/abis/BadgerOrganizationLogic.json b/frontend/src/abis/BadgerOrganizationLogic.json deleted file mode 100644 index a15ac2c..0000000 --- a/frontend/src/abis/BadgerOrganizationLogic.json +++ /dev/null @@ -1,882 +0,0 @@ -[ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [], - "name": "BEFORE_FORFEIT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_MINT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_REVOKE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_SET_HOOK", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BEFORE_TRANSFER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_slotHook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_config", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organization", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "managerKeyToIsManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "organizationURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uris", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerRevokeForbidden.json b/frontend/src/abis/BadgerRevokeForbidden.json deleted file mode 100644 index c29a5b5..0000000 --- a/frontend/src/abis/BadgerRevokeForbidden.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "forbidden", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerRevokeHook.json b/frontend/src/abis/BadgerRevokeHook.json deleted file mode 100644 index 1992699..0000000 --- a/frontend/src/abis/BadgerRevokeHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerTransferBlocklist.json b/frontend/src/abis/BadgerTransferBlocklist.json deleted file mode 100644 index d921809..0000000 --- a/frontend/src/abis/BadgerTransferBlocklist.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "blocked", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerTransferBound.json b/frontend/src/abis/BadgerTransferBound.json deleted file mode 100644 index 32ee627..0000000 --- a/frontend/src/abis/BadgerTransferBound.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountBound", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerTransferBoundManaged.json b/frontend/src/abis/BadgerTransferBoundManaged.json deleted file mode 100644 index 32ee627..0000000 --- a/frontend/src/abis/BadgerTransferBoundManaged.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "accountBound", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/BadgerTransferHook.json b/frontend/src/abis/BadgerTransferHook.json deleted file mode 100644 index 1992699..0000000 --- a/frontend/src/abis/BadgerTransferHook.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/ContextUpgradeable.json b/frontend/src/abis/ContextUpgradeable.json deleted file mode 100644 index 2347c02..0000000 --- a/frontend/src/abis/ContextUpgradeable.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/frontend/src/abis/ERC1155Upgradeable.json b/frontend/src/abis/ERC1155Upgradeable.json deleted file mode 100644 index 9576d0d..0000000 --- a/frontend/src/abis/ERC1155Upgradeable.json +++ /dev/null @@ -1,327 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/ERC165.json b/frontend/src/abis/ERC165.json deleted file mode 100644 index 6e166b5..0000000 --- a/frontend/src/abis/ERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/ERC165Upgradeable.json b/frontend/src/abis/ERC165Upgradeable.json deleted file mode 100644 index 4be2528..0000000 --- a/frontend/src/abis/ERC165Upgradeable.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IBadger.json b/frontend/src/abis/IBadger.json deleted file mode 100644 index 5af2fb7..0000000 --- a/frontend/src/abis/IBadger.json +++ /dev/null @@ -1,97 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "contract BadgerOrganization", - "name": "organization", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "name": "OrganizationCreated", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { - "internalType": "string", - "name": "uri", - "type": "string" - }, - { - "internalType": "string", - "name": "organizationURI", - "type": "string" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "internalType": "struct IBadgerOrganizationStruct.Organization", - "name": "_organizationStruct", - "type": "tuple" - } - ], - "name": "createOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "badgerOrganization", - "type": "address" - }, - { - "internalType": "uint256", - "name": "organizationId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_organizationId", - "type": "uint256" - } - ], - "name": "getOrganization", - "outputs": [ - { - "internalType": "contract BadgerOrganization", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IBadgerConfigured.json b/frontend/src/abis/IBadgerConfigured.json deleted file mode 100644 index d2fb1ae..0000000 --- a/frontend/src/abis/IBadgerConfigured.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/frontend/src/abis/IBadgerHook.json b/frontend/src/abis/IBadgerHook.json deleted file mode 100644 index d62d157..0000000 --- a/frontend/src/abis/IBadgerHook.json +++ /dev/null @@ -1,54 +0,0 @@ -[ - { - "inputs": [], - "name": "CONFIG_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "EXECUTE_SCHEMA", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "config", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/frontend/src/abis/IBadgerHooked.json b/frontend/src/abis/IBadgerHooked.json deleted file mode 100644 index 28c34e5..0000000 --- a/frontend/src/abis/IBadgerHooked.json +++ /dev/null @@ -1,65 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "HookConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "hookKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "", - "type": "address" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isHook", - "type": "bool" - } - ], - "name": "HookUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - } - ], - "name": "getHooks", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IBadgerManaged.json b/frontend/src/abis/IBadgerManaged.json deleted file mode 100644 index b7d9f95..0000000 --- a/frontend/src/abis/IBadgerManaged.json +++ /dev/null @@ -1,40 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "ManagerConfigured", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "managerKey", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "isManager", - "type": "bool" - } - ], - "name": "ManagerUpdated", - "type": "event" - } -] diff --git a/frontend/src/abis/IBadgerOrganization.json b/frontend/src/abis/IBadgerOrganization.json deleted file mode 100644 index 4863660..0000000 --- a/frontend/src/abis/IBadgerOrganization.json +++ /dev/null @@ -1,127 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "forfeit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_tos", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "mintBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "revoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_froms", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_amounts", - "type": "uint256[]" - } - ], - "name": "revokeBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/frontend/src/abis/IBadgerOrganizationLogic.json b/frontend/src/abis/IBadgerOrganizationLogic.json deleted file mode 100644 index 2a7acf4..0000000 --- a/frontend/src/abis/IBadgerOrganizationLogic.json +++ /dev/null @@ -1,217 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "organizationURI", - "type": "string" - } - ], - "name": "OrganizationUpdated", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_hook", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configHook", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "configManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_manager", - "type": "address" - } - ], - "name": "isBadgeManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_manager", - "type": "address" - } - ], - "name": "isOrganizationManager", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setBadgeURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_slot", - "type": "bytes32" - }, - { - "internalType": "address[]", - "name": "_hooks", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isHook", - "type": "bool[]" - } - ], - "name": "setHooks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_managers", - "type": "address[]" - }, - { - "internalType": "bool[]", - "name": "_isManager", - "type": "bool[]" - } - ], - "name": "setManagers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_uri", - "type": "string" - } - ], - "name": "setOrganizationURI", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/frontend/src/abis/IERC1155MetadataURIUpgradeable.json b/frontend/src/abis/IERC1155MetadataURIUpgradeable.json deleted file mode 100644 index a4d1d60..0000000 --- a/frontend/src/abis/IERC1155MetadataURIUpgradeable.json +++ /dev/null @@ -1,314 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "uri", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IERC1155ReceiverUpgradeable.json b/frontend/src/abis/IERC1155ReceiverUpgradeable.json deleted file mode 100644 index 370a56f..0000000 --- a/frontend/src/abis/IERC1155ReceiverUpgradeable.json +++ /dev/null @@ -1,99 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC1155BatchReceived", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onERC1155Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IERC1155Upgradeable.json b/frontend/src/abis/IERC1155Upgradeable.json deleted file mode 100644 index 69f36b4..0000000 --- a/frontend/src/abis/IERC1155Upgradeable.json +++ /dev/null @@ -1,295 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "name": "TransferBatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "TransferSingle", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "value", - "type": "string" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "URI", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - } - ], - "name": "balanceOfBatch", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "ids", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeBatchTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IERC165.json b/frontend/src/abis/IERC165.json deleted file mode 100644 index 6e166b5..0000000 --- a/frontend/src/abis/IERC165.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/IERC165Upgradeable.json b/frontend/src/abis/IERC165Upgradeable.json deleted file mode 100644 index 6e166b5..0000000 --- a/frontend/src/abis/IERC165Upgradeable.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/frontend/src/abis/Initializable.json b/frontend/src/abis/Initializable.json deleted file mode 100644 index 2347c02..0000000 --- a/frontend/src/abis/Initializable.json +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - } -] diff --git a/frontend/src/abis/Multicallable.json b/frontend/src/abis/Multicallable.json deleted file mode 100644 index 8362b87..0000000 --- a/frontend/src/abis/Multicallable.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "data", - "type": "bytes[]" - } - ], - "name": "multicall", - "outputs": [ - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - } - ], - "stateMutability": "payable", - "type": "function" - } -] diff --git a/frontend/src/abis/OwnableUpgradeable.json b/frontend/src/abis/OwnableUpgradeable.json deleted file mode 100644 index 9768e11..0000000 --- a/frontend/src/abis/OwnableUpgradeable.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/frontend/src/components/Accordion/Accordion.js b/frontend/src/components/Accordion/Accordion.js deleted file mode 100644 index 595e6c8..0000000 --- a/frontend/src/components/Accordion/Accordion.js +++ /dev/null @@ -1,34 +0,0 @@ -import Markdown from 'markdown-to-jsx'; - -import { useState } from "react"; - -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import "@style/Accordion/Accordion.css"; - -const title = (item) => { - if (item.icon) - return

{item.title}

- - return

{item.title}

-} - -const Accordion = ({ items, start = undefined }) => { - const [selected, setSelected] = useState(start || 0) - - return ( -
- {items.map((item, index) => { - const className = `card ${selected === index ? 'selected' : ''} ${item.icon ? 'left' : ''}` - - return
setSelected(index)}> - {title(item)} - - {item.content} -
- })} -
- ) -} - -export { Accordion } \ No newline at end of file diff --git a/frontend/src/components/Bar/ActionBar.js b/frontend/src/components/Bar/ActionBar.js deleted file mode 100644 index 144a89d..0000000 --- a/frontend/src/components/Bar/ActionBar.js +++ /dev/null @@ -1,49 +0,0 @@ -import { useLocation, useParams } from "react-router-dom"; - -import { useENSProfile, useUser } from "@hooks"; - -import { ActionButton, ConnectButton, LogoutButton, OrgView, ProfileView } from "@components" - -import { sliceAddress } from "@utils"; - -import '@rainbow-me/rainbowkit/styles.css' -import "@style/Bar/ActionBar.css"; - -const ActionBar = () => { - const { pathname } = useLocation(); - - const { authenticatedAddress, isAuthenticated, isLoaded } = useUser(); - - const { ensAvatar, ensName } = useENSProfile(authenticatedAddress); - - const orgRegex = /\/dashboard\/organization\/(\w+)\/(\w+)/ - - const chainId = orgRegex.test(pathname) && orgRegex.exec(pathname)[1] - - const orgAddress = orgRegex.test(pathname) && orgRegex.exec(pathname)[2] - - return ( -
-
- {!isAuthenticated && } - - {isAuthenticated && (!orgAddress || orgAddress && !isLoaded) && } - - {isAuthenticated && isLoaded && orgAddress && } -
- -
- - - {isAuthenticated && authenticatedAddress && } -
-
- ) -} - -export { ActionBar }; \ No newline at end of file diff --git a/frontend/src/components/Bar/FormActionBar.js b/frontend/src/components/Bar/FormActionBar.js deleted file mode 100644 index 5b73291..0000000 --- a/frontend/src/components/Bar/FormActionBar.js +++ /dev/null @@ -1,33 +0,0 @@ -import { Link } from 'react-router-dom'; - -import { IconButton } from "@components" - -import "@style/Bar/FormActionBar.css" - -const FormActionBar = ({ actions, style, actionStyle }) => { - return ( -
-
- {actions && actions.map(action => ( -
- {action.to ? - - : } -
- ))} -
-
- ) -} - -export { FormActionBar }; \ No newline at end of file diff --git a/frontend/src/components/Bar/index.js b/frontend/src/components/Bar/index.js deleted file mode 100644 index 1eb4407..0000000 --- a/frontend/src/components/Bar/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { ActionBar } from './ActionBar'; -export { FormActionBar } from './FormActionBar'; \ No newline at end of file diff --git a/frontend/src/components/Button/ActionButton.js b/frontend/src/components/Button/ActionButton.js index 3e7b126..1444b3c 100644 --- a/frontend/src/components/Button/ActionButton.js +++ b/frontend/src/components/Button/ActionButton.js @@ -54,4 +54,4 @@ const ActionButton = ( ) } -export { ActionButton }; \ No newline at end of file +export default ActionButton; \ No newline at end of file diff --git a/frontend/src/components/Button/Button.js b/frontend/src/components/Button/Button.js deleted file mode 100644 index 77859ee..0000000 --- a/frontend/src/components/Button/Button.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Link } from "react-router-dom"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import "@style/Button/Button.css"; - -const Button = ({ - children, - className, - onClick, - icon, - iconStyle, - ...props -}) => { - return ( - - ) -} - -export { Button }; \ No newline at end of file diff --git a/frontend/src/components/Button/ConnectButton.js b/frontend/src/components/Button/ConnectButton.js deleted file mode 100644 index f0e9453..0000000 --- a/frontend/src/components/Button/ConnectButton.js +++ /dev/null @@ -1,42 +0,0 @@ -import { useAccount, useSwitchNetwork } from "wagmi"; - -import { useConnectModal } from "@rainbow-me/rainbowkit"; - -import { useAuthentication, useAuthenticationModal } from "@hooks"; - -const ConnectButton = () => { - const { switchNetwork } = useSwitchNetwork(); - - const { isConnected, isLoading } = useAccount(); - - const { openConnectModal } = useConnectModal(); - - const { primaryChain, isAuthenticating, isWrongNetwork } = useAuthentication(); - - const { openAuthenticationModal } = useAuthenticationModal(); - - if (!isConnected) - return ( - - ); - - if (isWrongNetwork && switchNetwork) - return ( - - ); - - return ( - - ); -}; - -export { ConnectButton }; diff --git a/frontend/src/components/Button/IconButton.js b/frontend/src/components/Button/IconButton.js index ac9c186..01be765 100644 --- a/frontend/src/components/Button/IconButton.js +++ b/frontend/src/components/Button/IconButton.js @@ -3,22 +3,22 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import "@style/Button/IconButton.css" -const IconButton = ({ - icon, - text, +const IconButton = ({ + icon, + text, className, - style, - onClick, - disabled, + style, + onClick, + disabled, loading }) => { return ( - + } + /> + onCustomImageUpload(event.target.files[0])} + /> + + + + + {/*
+ {isEdit && + + } */} + + ) +} + +export default BadgeForm; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Content/DashboardContent.js b/frontend/src/components/Dashboard/Content/DashboardContent.js new file mode 100644 index 0000000..800c8a0 --- /dev/null +++ b/frontend/src/components/Dashboard/Content/DashboardContent.js @@ -0,0 +1,11 @@ +const DashboardContent = ({ children }) => { + return ( +
+ {children} +
+ ) +} + +export default DashboardContent; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Dashboard.js b/frontend/src/components/Dashboard/Dashboard.js index 34c5ab9..2925506 100644 --- a/frontend/src/components/Dashboard/Dashboard.js +++ b/frontend/src/components/Dashboard/Dashboard.js @@ -1,11 +1,71 @@ +import { useState } from "react"; +import { Route, Routes } from "react-router-dom"; +import { useAccount, useSigner } from "wagmi"; + +import MobilePreventor from "@components/Dashboard/Mobile/MobilePreventor"; + +import UserContextProvider from "@components/Dashboard/Provider/UserContextProvider"; +import OrgContextProvider from "@components/Dashboard/Provider/OrgContextProvider"; +import ErrorContextProvider from "@components/Dashboard/Provider/ErrorContextProvider"; + +import DashboardContent from "@components/Dashboard/Content/DashboardContent"; +import ActionBar from "@components/Dashboard/action-bar/ActionBar"; +import HelpSidebar from "@components/Dashboard/action-bar/help/HelpSidebar"; + +import Home from "@components/Dashboard/Home/Home"; +import OrgForm from '@components/Dashboard/Org/OrgForm'; +import Org from "@components/Dashboard/Org/Org"; +import BadgeForm from "@components/Dashboard/Badge/BadgeForm"; +import Badge from "@components/Dashboard/Badge/Badge"; + import "@style/Dashboard/Dashboard.css"; -const Dashboard = ({ children }) => { +const Dashboard = () => { + const { data: signer } = useSigner(); + const { address } = useAccount(); + const [isMobile, setIsMobile] = useState(false); + + const [collapsed, setCollapsed] = useState(false); + return ( -
- {children} -
+ <> + + + {!isMobile && +
+ + + +
+ + + + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + +
+ + +
+
+
+
+ } + ) } -export { Dashboard }; \ No newline at end of file +export default Dashboard; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Form/ActionBar.js b/frontend/src/components/Dashboard/Form/ActionBar.js new file mode 100644 index 0000000..330f4b4 --- /dev/null +++ b/frontend/src/components/Dashboard/Form/ActionBar.js @@ -0,0 +1,42 @@ +import { Link } from 'react-router-dom'; + +import IconButton from "@components/Button/IconButton"; +import Help from './Help' + +import "@style/Dashboard/Form/ActionBar.css" + +const ActionBar = ({ help, actions, style, helpStyle, actionStyle }) => { + return ( +
+ {help &&
+ +
} + +
+ {actions && actions.map(action => ( +
+ {action.to ? + + + + : + + } +
+ ))} +
+
+ ) +} + +export default ActionBar; \ No newline at end of file diff --git a/frontend/src/components/Form/Checkbox/Checkbox.js b/frontend/src/components/Dashboard/Form/Checkbox.js similarity index 59% rename from frontend/src/components/Form/Checkbox/Checkbox.js rename to frontend/src/components/Dashboard/Form/Checkbox.js index d9ccca1..6581f30 100644 --- a/frontend/src/components/Form/Checkbox/Checkbox.js +++ b/frontend/src/components/Dashboard/Form/Checkbox.js @@ -1,28 +1,28 @@ -import "@style/Form/Checkbox.css" +import "@style/Dashboard/Form/Checkbox.css" -const Checkbox = ({ checked, setChecked, label, disabled }) => { +const Checkbox = ({checked, setChecked, label, disabled}) => { return (
- {typeof label === "string" && - } {typeof label === "object" && label} - + -
-
+ + ) } -export { Checkbox }; \ No newline at end of file +export default Checkbox; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Form/FormDrawer.js b/frontend/src/components/Dashboard/Form/FormDrawer.js new file mode 100644 index 0000000..712e083 --- /dev/null +++ b/frontend/src/components/Dashboard/Form/FormDrawer.js @@ -0,0 +1,35 @@ +import { useState } from "react"; +import { Accordion, AccordionSummary, AccordionDetails} from '@mui/material'; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import "@style/Dashboard/Form/FormDrawer.css"; + +const FormDrawer = ({label, open, children, ...props}) => { + const [ isOpen, setIsOpen ] = useState(open); + + return ( + { setIsOpen(!isOpen) }} + {...props} + > + + } + // sx={{padding: '0px', maxHeight: '50px', border: 'none !important'}} + > +

{label}

+
+ + {children} + +
+ ) +} + +export default FormDrawer; \ No newline at end of file diff --git a/frontend/src/components/Form/FormReducer.js b/frontend/src/components/Dashboard/Form/FormReducer.js similarity index 89% rename from frontend/src/components/Form/FormReducer.js rename to frontend/src/components/Dashboard/Form/FormReducer.js index 6733030..84c6046 100644 --- a/frontend/src/components/Form/FormReducer.js +++ b/frontend/src/components/Dashboard/Form/FormReducer.js @@ -1,32 +1,8 @@ -const initialOrgForm = { - name: "", - symbol: "", - description: "", - contract_uri_hash: "", - owner: "", - ethereum_address: "", - chain: "", -} -const initialBadgeForm = { - name: "", - description: "", - attributes: [], - delegates: [], - image_hash: "", - ethereum_address: "", - token_id: "", - organization: "", - account_bound: true, - claimable: false, - signer: "", - is_active: false, -} - -const FormReducer = (state, action) => { +export const FormReducer = (state, action) => { let newState; let newKeyValue; - switch (action.type) { + switch(action.type) { case "SET": return { ...state, @@ -66,8 +42,27 @@ const FormReducer = (state, action) => { } } -export { - FormReducer, - initialBadgeForm, - initialOrgForm +export const initialOrgForm = { + name: "", + symbol: "", + description: "", + contract_uri_hash: "", + owner: "", + ethereum_address: "", + chain: "", +} + +export const initialBadgeForm = { + name: "", + description: "", + attributes: [], + delegates: [], + image_hash: "", + ethereum_address: "", + token_id: "", + organization: "", + account_bound: true, + claimable: false, + signer: "", + is_active: false, } \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Form/Help.js b/frontend/src/components/Dashboard/Form/Help.js new file mode 100644 index 0000000..80fa8f9 --- /dev/null +++ b/frontend/src/components/Dashboard/Form/Help.js @@ -0,0 +1,14 @@ +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' + +import "@style/Dashboard/Form/Help.css" + +const Help = ({ text }) => { + return ( +
+ +

{text}

+
+ ) +} + +export default Help; \ No newline at end of file diff --git a/frontend/src/components/Form/Input/Input.js b/frontend/src/components/Dashboard/Form/Input.js similarity index 84% rename from frontend/src/components/Form/Input/Input.js rename to frontend/src/components/Dashboard/Form/Input.js index fe8ec38..2b7a88a 100644 --- a/frontend/src/components/Form/Input/Input.js +++ b/frontend/src/components/Dashboard/Form/Input.js @@ -1,9 +1,9 @@ -import "@style/Form/Input.css" +import "@style/Dashboard/Form/Input.css" const Input = (props) => { const { label, - required = true, + required, prepend, append, placeholder, @@ -26,9 +26,9 @@ const Input = (props) => { {props.prepend && {props.prepend}} {/* if label is string */} - {typeof label === "string" && - } {/* if label is component */} @@ -45,4 +45,4 @@ const Input = (props) => { ) } -export { Input }; \ No newline at end of file +export default Input; \ No newline at end of file diff --git a/frontend/src/components/Form/Input/InputAddress.js b/frontend/src/components/Dashboard/Form/InputAddress.js similarity index 80% rename from frontend/src/components/Form/Input/InputAddress.js rename to frontend/src/components/Dashboard/Form/InputAddress.js index cf8fa7c..39f06c2 100644 --- a/frontend/src/components/Form/Input/InputAddress.js +++ b/frontend/src/components/Dashboard/Form/InputAddress.js @@ -1,8 +1,8 @@ import { ethers } from "ethers"; -import { Input } from "@components"; +import Input from "@components/Dashboard/Form/Input"; -const InputAddress = ({ label, required, value, setValue, isValid, setIsValid, ...props }) => { +const InputAddress = ({label, required, value, setValue, isValid, setIsValid, ...props}) => { const onAddressChange = (event) => { const address = event.target.value.trim(); setValue(address); @@ -21,11 +21,11 @@ const InputAddress = ({ label, required, value, setValue, isValid, setIsValid, . const valid = ethers.utils.isAddress(address); setIsValid(valid); } - + return ( { - const [csvFile, setCSVFile] = useState(); - const [inputFieldCount, setInputFieldCount] = useState(1); - const [isValidatedArray, setIsValidatedArray] = useState([]); + const [ csvFile, setCSVFile ] = useState(); + const [ inputFieldCount, setInputFieldCount ] = useState(1); + const [ isValidatedArray, setIsValidatedArray ] = useState([]); const csvInput = useRef(); const csvReader = useMemo(() => new FileReader(), []); @@ -18,10 +19,10 @@ const InputListCSV = ({ label, inputList, listKey, dispatch, setAreAddressesVali const address = event.target.value.trim() setAreAddressesValid(false); validateAddress(index, address); - dispatch({ - type: "UPDATE_ARRAY_INDEX", - field: listKey, - index: index, + dispatch({ + type: "UPDATE_ARRAY_INDEX", + field: listKey, + index: index, payload: address }); } @@ -124,7 +125,7 @@ const InputListCSV = ({ label, inputList, listKey, dispatch, setAreAddressesVali > + }}/> Upload CSV @@ -143,9 +144,9 @@ const InputListCSV = ({ label, inputList, listKey, dispatch, setAreAddressesVali const deleteDOM = (index) => { return ( - onFieldDelete(index)} - sx={{ minWidth: '40px' }} + onFieldDelete(index)} + sx={{minWidth: '40px'}} icon={['fal', 'fa-trash']} /> ) @@ -163,7 +164,7 @@ const InputListCSV = ({ label, inputList, listKey, dispatch, setAreAddressesVali {[...Array(inputFieldCount)].map((x, index) => ( { - const [inputFieldCount, setInputFieldCount] = useState(state?.length > 1 ? state.length : 1); + const [ inputFieldCount, setInputFieldCount ] = useState(inputList?.length > 1 ? inputList.length : 1); // Adds the input field to the state array. const onInputChange = (index, event, keyValue) => { - dispatch({ - type: "UPDATE_KEY_VALUE_ARRAY", - field: listKey, - index: index, + dispatch({ + type: "UPDATE_KEY_VALUE_ARRAY", + field: listKey, + index: index, key: keyValue, - payload: event.target.value + payload: event.target.value }); } @@ -49,14 +50,14 @@ const InputListKeyValue = ( // When an input loses focus, clear whitespace. const onBlur = (index, keyValue) => { - const pair = state[index][keyValue]; + const pair = inputList[index][keyValue]; if (pair && pair.includes(' ')) { - dispatch({ - type: "UPDATE_KEY_VALUE_ARRAY", - field: listKey, - index: index, + dispatch({ + type: "UPDATE_KEY_VALUE_ARRAY", + field: listKey, + index: index, key: keyValue, - payload: state[index][keyValue].trim() + payload: inputList[index][keyValue].trim() }); } } @@ -78,7 +79,7 @@ const InputListKeyValue = ( gridTemplateColumns: "max-content auto", }}>
-
+
@@ -95,20 +96,20 @@ const InputListKeyValue = ( const deleteDOM = (index) => { return ( - onFieldDelete(index)} - sx={{ minWidth: '40px' }} + onFieldDelete(index)} + sx={{minWidth: '40px'}} icon={['fal', 'fa-trash']} /> ) } - // If the state changes outside of this component, update the inputFieldCount. + // If the inputList changes outside of this component, update the inputFieldCount. useEffect(() => { - if (state.length > 1) { - setInputFieldCount(state.length); + if (inputList.length > 1) { + setInputFieldCount(inputList.length); } - }, [state]) + }, [inputList]) return (
@@ -116,7 +117,7 @@ const InputListKeyValue = (
onInputChange(index, event, "trait_type")} onBlur={() => onBlur(index, "trait_type")} @@ -125,7 +126,7 @@ const InputListKeyValue = ( onInputChange(index, event, "value")} onBlur={() => onBlur(index, "value")} @@ -136,4 +137,4 @@ const InputListKeyValue = ( ) } -export { InputListKeyValue }; \ No newline at end of file +export default InputListKeyValue; \ No newline at end of file diff --git a/frontend/src/components/Form/Select/Select.js b/frontend/src/components/Dashboard/Form/Select.js similarity index 81% rename from frontend/src/components/Form/Select/Select.js rename to frontend/src/components/Dashboard/Form/Select.js index 54ae667..24418ed 100644 --- a/frontend/src/components/Form/Select/Select.js +++ b/frontend/src/components/Dashboard/Form/Select.js @@ -1,6 +1,6 @@ -import "@style/Form/Select.css"; +import "@style/Dashboard/Form/Select.css"; -const Select = ({ label, options, value, setValue }) => { +const Select = ({label, options, value, setValue}) => { return (
@@ -19,4 +19,4 @@ const Select = ({ label, options, value, setValue }) => { ) } -export { Select }; \ No newline at end of file +export default Select; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Form/Switch.js b/frontend/src/components/Dashboard/Form/Switch.js new file mode 100644 index 0000000..95c3dd6 --- /dev/null +++ b/frontend/src/components/Dashboard/Form/Switch.js @@ -0,0 +1,28 @@ +import "@style/Dashboard/Form/Switch.css"; + +const Switch = ({checked, setChecked, label, disabled}) => { + return ( +
+
+ {typeof label === "string" && + + } + {typeof label === "object" && label} + + +
+
+ ) +} + +export default Switch; \ No newline at end of file diff --git a/frontend/src/components/Header/Header.js b/frontend/src/components/Dashboard/Header/Header.js similarity index 53% rename from frontend/src/components/Header/Header.js rename to frontend/src/components/Dashboard/Header/Header.js index 80be967..6d7b409 100644 --- a/frontend/src/components/Header/Header.js +++ b/frontend/src/components/Dashboard/Header/Header.js @@ -1,13 +1,13 @@ -import { ActionButton } from "@components"; +import ActionButton from "@components/Button/ActionButton"; -import "@style/Header/Header.css"; +import "@style/Dashboard/Header/Header.css"; const Header = ({ back, actions }) => { return (
- {back && - { }
- {actions &&
- {actions.map((action, index) => ( - + {actions && actions.map((action, index) => ( + ))} -
} +
); } -export { Header }; \ No newline at end of file +export default Header; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Home/Home.js b/frontend/src/components/Dashboard/Home/Home.js new file mode 100644 index 0000000..ef7db0a --- /dev/null +++ b/frontend/src/components/Dashboard/Home/Home.js @@ -0,0 +1,87 @@ +import { useContext } from "react" +import { Link, useNavigate } from "react-router-dom"; + +import { UserContext } from "@components/Dashboard/Provider/UserContextProvider"; + +import { sliceAddress } from "@utils/helpers"; +import { IPFS_GATEWAY_URL } from "@static/constants/links"; + +import { handleImageLoad } from "@hooks/useColor"; + +import IconButton from "@components/Button/IconButton"; + +import Card from "@components/Card/Card" +import ImageLoader from "@components/Dashboard/Utils/ImageLoader"; +import ActionTitle from "@components/Dashboard/action-title/ActionTitle"; + +import "@style/Dashboard/Home/Home.css"; + +const Home = () => { + const navigate = useNavigate(); + + const { userData } = useContext(UserContext); + + return ( +
+ navigate('/dashboard/organization/new'), + afterText: "Create organization" + } + ]} + /> +
+ {userData?.organizations?.length > 0 + ? userData?.organizations?.map((org, index) => ( +
navigate(`/dashboard/organization/${org.id}`)} + > + +
+ +
+
+ + {org.chain.slice(0, 5)} + {sliceAddress(org.ethereum_address)} +
+ +
+

+ + {org.name} +

+
+
+ +
+ )) + :
+

No Organizations yet!

+

+ Creating the Badges for your first Organization is easy. + Choose and customize your Organization's name, logo, and description and your organization is live! +

+ + + +
} +
+
+ ) +} + +export default Home; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Mobile/MobilePreventor.js b/frontend/src/components/Dashboard/Mobile/MobilePreventor.js new file mode 100644 index 0000000..57ab435 --- /dev/null +++ b/frontend/src/components/Dashboard/Mobile/MobilePreventor.js @@ -0,0 +1,46 @@ +import { useEffect, useCallback } from "react"; +import { Link } from "react-router-dom"; + +import IconButton from "@components/Button/IconButton"; + +import "@style/Dashboard/Mobile/MobilePreventor.css" + +const MobilePreventor = ({isMobile, setIsMobile}) => { + + const handleResize = useCallback(() => { + if (window.screen.width < 768) { + setIsMobile(true); + } else { + setIsMobile(false); + } + }, [setIsMobile]); + + // on window resize, check if the window is mobile or not + window.addEventListener("resize", () => { + handleResize(); + }) + + useEffect(() => { + handleResize(); + }, [handleResize]) + + return ( + <> + {isMobile && +
+
+

Management of your Organizations is disabled on mobile devices!

+

Managing your organization on mobile is quite dangerous. It is not a recommended or supported feature of Badger (yet). Mobile will become accessible when a mobile app with key-generation is launched that allows our team to abstract away the need for wallet knowledge. Coming soon™️.

+ + {/* Button that goes back to landing page */} + + + +
+
+ } + + ) +} + +export default MobilePreventor \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Org/Org.js b/frontend/src/components/Dashboard/Org/Org.js new file mode 100644 index 0000000..2276b10 --- /dev/null +++ b/frontend/src/components/Dashboard/Org/Org.js @@ -0,0 +1,68 @@ +import { useContext, useMemo } from "react"; +import { useNavigate, Link, useParams } from "react-router-dom"; +import { useAccount } from "wagmi"; + +import { OrgContext } from "@components/Dashboard/Provider/OrgContextProvider"; + +import IconButton from "@components/Button/IconButton"; +import Header from "@components/Dashboard/Header/Header"; +import ActionTitle from "@components/Dashboard/action-title/ActionTitle"; +import BadgeTable from "@components/Table/BadgeTable"; + +// import "@style/Dashboard/Org/Org.css"; + +const Org = () => { + const navigate = useNavigate(); + + const { address } = useAccount(); + const { orgData } = useContext(OrgContext); + const { orgId } = useParams(); + + const isOwner = useMemo(() => { + return orgData.owner.ethereum_address === address; + }, [orgData, address]) + + return ( + <> +
navigate("/dashboard")} + actions={isOwner ? + [{ + text: "Settings", + icon: ['fal', 'fa-gear'], + event: () => navigate(`/dashboard/organization/${orgId}/edit`) + }] : [] + } + /> + +
+ navigate(`/dashboard/organization/${orgId}/badge/new`), + afterText: "Create badge" + }] : [] + } + /> + + {orgData?.badges?.length > 0 + ? + :
+

No Badges in {orgData?.name ? orgData?.name : "the Organization"} yet!

+

+ You are one step closer to having the credentials of your on-chain Organization. + Now you can create and distribute your badges that act as keys throughout the ecosystem in a matter of seconds. +

+ + + +
} +
+ + ) +} + +export default Org; \ No newline at end of file diff --git a/frontend/src/components/DangerZone/OrgDangerZone.js b/frontend/src/components/Dashboard/Org/OrgDangerZone.js similarity index 84% rename from frontend/src/components/DangerZone/OrgDangerZone.js rename to frontend/src/components/Dashboard/Org/OrgDangerZone.js index 56c1b1f..39dd776 100644 --- a/frontend/src/components/DangerZone/OrgDangerZone.js +++ b/frontend/src/components/Dashboard/Org/OrgDangerZone.js @@ -1,21 +1,21 @@ import { useContext } from "react"; import { useNavigate, useParams } from "react-router-dom"; -import { ErrorContext, UserContext } from "@contexts"; +import ActionBar from "@components/Dashboard/Form/ActionBar"; -import { FormActionBar } from "@components" - -import { patchModelType } from "@utils"; +import { ErrorContext } from "@components/Dashboard/Provider/ErrorContextProvider"; +import { UserContext } from "@components/Dashboard/Provider/UserContextProvider"; +import { patchModelType } from "@utils/api_requests"; // import { useTransferOwnership } from "@hooks/contracts/useContracts"; -// import InputAddress from "@components/Form/InputAddress"; +// import InputAddress from "@components/Dashboard/Form/InputAddress"; // TODO: The renounceOwnership function in the contract does currently not // support the withdrawal of funds to a target address. -const OrgDangerZone = ({ orgAddress }) => { +const OrgDangerZone = ({orgAddress}) => { const { setError } = useContext(ErrorContext); const { userData, setUserData } = useContext(UserContext); - + const navigate = useNavigate(); const orgId = parseInt(useParams().orgId); @@ -23,7 +23,7 @@ const OrgDangerZone = ({ orgAddress }) => { // const [ newOwnerValid, setNewOwnerValid ] = useState(true); // const [ renounceTarget, setRenounceTarget ] = useState(""); // const [ renounceTargetValid, setRenounceTargetValid ] = useState(true); - + // const transferOwnership = useTransferOwnership( // orgAddress && newOwnerValid && newOwner !== "", // orgAddress, @@ -88,9 +88,9 @@ const OrgDangerZone = ({ orgAddress }) => { } const response = await patchModelType("organizations", body); - let newUserData = { ...userData } + let newUserData = {...userData} const orgIndex = newUserData.organizations.findIndex(org => org.id === orgId); - + if (response.error || orgIndex === -1) { setError({ label: 'Could not archive org', @@ -118,15 +118,15 @@ const OrgDangerZone = ({ orgAddress }) => { return ( <> -

Danger Zone

+

Danger Zone

-
-
-
+
+
+
-
- + @@ -135,7 +135,7 @@ const OrgDangerZone = ({ orgAddress }) => { } /> - */}
@@ -188,4 +188,4 @@ const OrgDangerZone = ({ orgAddress }) => { ) } -export { OrgDangerZone } \ No newline at end of file +export default OrgDangerZone; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Org/OrgForm.js b/frontend/src/components/Dashboard/Org/OrgForm.js new file mode 100644 index 0000000..1fd67d3 --- /dev/null +++ b/frontend/src/components/Dashboard/Org/OrgForm.js @@ -0,0 +1,398 @@ +import { useState, useContext, useRef, useEffect, useMemo, useCallback } from "react"; +import { useNavigate, useParams } from "react-router-dom"; +import { useNetwork, useAccount } from "wagmi"; + +import { UserContext } from "@components/Dashboard/Provider/UserContextProvider"; +import { OrgContext } from "@components/Dashboard/Provider/OrgContextProvider"; +import { ErrorContext } from "@components/Dashboard/Provider/ErrorContextProvider"; +import Header from "@components/Dashboard/Header/Header"; +import ActionBar from "@components/Dashboard/Form/ActionBar"; +import Input from "@components/Dashboard/Form/Input"; +import FormDrawer from "@components/Dashboard/Form/FormDrawer"; +import OrgDangerZone from "@components/Dashboard/Org/OrgDangerZone"; + +import { initialOrgForm } from "@components/Dashboard/Form/FormReducer"; +import { useCreateOrg, useEditOrg } from "@hooks/contracts/useContracts"; +import { postOrgRequest, postIPFSImage, postIPFSMetadata, getPFPImage } from "@utils/api_requests"; +import { getBadgerAbi } from "@hooks/contracts/contractVersions"; +import { useIPFSImageHash, useIPFSMetadataHash } from "@hooks/useIpfsHash"; + +const OrgForm = ({isEdit = false}) => { + const { userData, setUserData } = useContext(UserContext); + const { orgData } = useContext(OrgContext); + const { setError } = useContext(ErrorContext); + + const { address } = useAccount(); + const { chain } = useNetwork(); + const { orgId } = useParams(); + const navigate = useNavigate(); + const imageInput = useRef(); + + const [ orgObj, setOrgObj ] = useState(initialOrgForm) + const [ txPending, setTxPending ] = useState(false); + const [ orgImage, setOrgImage ] = useState(); + const [ isCustomImage, setIsCustomImage ] = useState(); + + // Is the data valid for the transaction to be prepared. + // If there is no orgImage then determine if the hash already exists. + const isDisabled = useMemo(() => { + return ( + !orgObj.name || + !orgObj.symbol || + !orgObj.description || + (!orgImage && !orgObj?.image_hash) + ) + }, [orgObj, orgImage]) + + // Determine the IPFS hashes before hand so the transaction can be prepared ASAP + // without actively pinning or waiting for the hashes to be returned. + const { hash: deterministicImageHash } = useIPFSImageHash(orgImage) + + const hashArgs = isEdit ? { + name: orgObj.name, + description: orgObj.description, + image: isCustomImage ? deterministicImageHash : orgObj?.image_hash, + attributes: orgObj.attributes + } : { + name: orgObj.name, + description: orgObj.description, + image: deterministicImageHash, + attributes: orgObj.attributes + } + const { hash: deterministicMetadataHash } = useIPFSMetadataHash({ ...hashArgs }) + + const createContract = useCreateOrg( + !isDisabled && !isEdit, + orgObj, + deterministicImageHash, + deterministicMetadataHash, + address, + chain?.name + ) + const updateOrg = useEditOrg( + !isDisabled && isEdit && orgObj?.ethereum_address, + orgObj.ethereum_address, + deterministicMetadataHash + ) + const badger = useMemo(() => getBadgerAbi(chain?.name), [chain?.name]); + + let firstCharOfName = useRef(); + + const actions = isEdit ? + [ + { + text: "Update organization", + icon: ["fal", "arrow-right"], + loading: txPending, + disabled: !updateOrg.isSuccess, + event: () => updateOrgTx() + } + ] + : + [ + { + text: "Create organization", + icon: ["fal", "arrow-right"], + loading: txPending, + disabled: !createContract.isSuccess, + event: () => createOrgTx() + } + ] + + // Converts an org name to a symbol. + const nameToSymbol = (name) => { + return name.replace(/[^a-zA-Z0-9]/g, "").toUpperCase().substring(0, 5); + } + + // When name is changed, update orgObj name, and symbol if symbol is not custom. + const onOrgNameChange = (e) => { + setOrgObj({...orgObj, name: e.target.value, symbol: nameToSymbol(e.target.value)}); + if ( + !isCustomImage && + e.target.value[0] !== firstCharOfName.current + ) { + firstCharOfName.current = e.target.value[0]; + getGeneratedImage(firstCharOfName.current); + } + } + + // Custom image upload. If image gets set to null then get new generative. + const onCustomImageUpload = async (image) => { + // For editing, we have to clear the image_hash to switch to deterministic hashing. + setOrgObj({...orgObj, image_hash: null}); + + setIsCustomImage(image ? true : false); + let customImage = image ? + image : await getPFPImage(firstCharOfName.current); + setOrgImage(image ?? customImage); + } + + // Get a generated image for the org. + const getGeneratedImage = async (char) => { + if (isEdit) return; + const response = await getPFPImage(char, address); + if (response.error) { + setError({ + label: "Error getting generated Org Image", + message: response.error`` + }) + } else { + setOrgImage(response); + } + } + + // Pin the org image to IPFS. + const pinImage = async (image) => { + const response = await postIPFSImage(image); + + if (response?.error) { + setError({ + label: "Error uploading image to IPFS", + message: response.error + }) + return; + } + + return response.hash; + } + + // Post the IPFS metadata for the org. + const pinMetadata = async (imageHash) => { + const response = await postIPFSMetadata({ + name: orgObj.name, + description: orgObj.description, + imageHash: imageHash + }); + + if (response.error) { + setError({ + label: 'Error creating Org URI', + message: response.error + }); + return; + } + + return response.hash; + } + + // Awaits a prepared transaction before running it. + const createOrgTx = async () => { + setTxPending(true); + try { + let tx = await createContract.write?.(); + // Await the txReceipt, image hash, and metadata hash in parallel. + const [txReceipt, imageHash, metadataHash] = await Promise.all([ + tx.wait(), + pinImage(orgImage), + pinMetadata(deterministicImageHash) + ]) + + if (txReceipt.status !== 1) + throw new Error(createContract?.error); + // Decode the transaction receipt to get the contract address from the event. + const orgCreatedTopic = badger.abi.getEventTopic("OrganizationCreated"); + const orgCreatedEvent = txReceipt.logs.find((log) => log.topics[0] === orgCreatedTopic); + const orgEvent = badger.abi.decodeEventLog("OrganizationCreated", orgCreatedEvent.data, orgCreatedEvent.topics); + const contractAddress = orgEvent.organization; + + const org = { + ...orgObj, + ethereum_address: contractAddress, + contract_uri_hash: metadataHash, + image_hash: imageHash, + chain: chain.name, + owner: address, + is_active: true + } + + const response = await postOrg(org); + navigate(`/dashboard/organization/${response.id}`); + } + catch (error) { + setError({ + label: 'Error creating Org', + message: error + }); + setTxPending(false); + } + } + + const updateOrgTx = async () => { + setTxPending(true); + try { + let tx = await updateOrg.write?.(); + // Await the txReceipt, image hash, and metadata hash in parallel. + const [txReceipt, imageHash, metadataHash] = await Promise.all([ + tx.wait(), + pinImage(isCustomImage ? orgImage : orgObj.image_hash), + pinMetadata(isCustomImage ? deterministicImageHash : orgObj.image_hash) + ]) + + if (txReceipt.status !== 1) + throw new Error(updateOrg?.error); + + const org = { + ...orgObj, + contract_uri_hash: metadataHash, + image_hash: imageHash, + } + const response = await postOrg(org); + + setOrgObj(response); + // TODO: Success message! + setTxPending(false); + navigate(`/dashboard/organization/${response.id}`); + } + catch (error) { + setError({ + label: 'Error updating Org', + message: error + }); + setTxPending(false); + } + } + + // Post the org Obj to the backend once the contract address is added. + const postOrg = useCallback(async (org) => { + const response = await postOrgRequest(org); + if (!response?.error && response?.id) { + let newUserData = {...userData}; + + const index = newUserData.organizations.findIndex((org) => org.id === response.id); + if (!newUserData.organizations || index === -1) { + newUserData.organizations.push(response); + } + else { + newUserData.organizations[index] = response; + } + + setUserData(newUserData); + } + else { + setError({ + label: 'Could not add org to database', + message: response.error + }); + } + + return response; + }, [userData, setUserData, setError]); + + // If we have a silent error from preparing the transaction, display it. + useEffect(() => { + setError(null); + if (createContract?.error || updateOrg?.error) { + setError({ + label: 'Error managing the Org', + message: createContract?.error || updateOrg?.error + }) + } + }, [updateOrg.error, createContract.error, setError]) + + // If directly linking to the edit page, we need to update the state after + // fetching if the orgObj id is empty. + useEffect(() => { + if ( + orgData?.ethereum_address + && orgObj?.id !== orgId + ) { + setOrgObj(orgData) + } + }, [orgData, orgObj?.id, orgId, setOrgObj]) + + return ( +
+
navigate((isEdit ? + `/dashboard/organization/${orgId}` + : '/dashboard' + ))} + /> + +

+ {isEdit ? "Update Organization" : "Create Organization"} +

+ + +
+ + + setOrgObj({...orgObj, symbol: e.target.value})} + /> +
+ + setOrgObj({...orgObj, description: e.target.value})} + /> + + +
+ + + imageInput.current.click()} + style={{width: "auto"}} + > + {isCustomImage ? + "Change image" : + "Upload image" + } + + } + /> + {onCustomImageUpload(event.target.files[0])}} + /> + + + + +
+ {isEdit && + + } +
+ ) +} + +export default OrgForm; \ No newline at end of file diff --git a/frontend/src/components/Org/OrgStats.js b/frontend/src/components/Dashboard/Org/OrgStats.js similarity index 83% rename from frontend/src/components/Org/OrgStats.js rename to frontend/src/components/Dashboard/Org/OrgStats.js index 4870531..c43156a 100644 --- a/frontend/src/components/Org/OrgStats.js +++ b/frontend/src/components/Dashboard/Org/OrgStats.js @@ -1,4 +1,4 @@ -import "@style/Org/OrgStats.css"; +import "@style/Dashboard/Org/OrgStats.css"; // TODO: Pull the stats from somewhere const OrgStats = (orgData) => { @@ -24,9 +24,9 @@ const OrgStats = (orgData) => {

{orgStats.totalMembers}

Total Members

-

{orgStats.totalMembersChange}

@@ -40,9 +40,9 @@ const OrgStats = (orgData) => {

{orgStats.totalDelegates}

Unique Delegates

-

{orgStats.totalDelegatesChange}

@@ -58,9 +58,9 @@ const OrgStats = (orgData) => {

Assets Value

-

{orgStats.totalValueChange}

@@ -72,4 +72,4 @@ const OrgStats = (orgData) => { ) } -export { OrgStats }; \ No newline at end of file +export default OrgStats; \ No newline at end of file diff --git a/frontend/src/contexts/ErrorContext.js b/frontend/src/components/Dashboard/Provider/ErrorContextProvider.js similarity index 70% rename from frontend/src/contexts/ErrorContext.js rename to frontend/src/components/Dashboard/Provider/ErrorContextProvider.js index 4123bf9..14c00bb 100644 --- a/frontend/src/contexts/ErrorContext.js +++ b/frontend/src/components/Dashboard/Provider/ErrorContextProvider.js @@ -1,12 +1,12 @@ import { createContext, useState, useEffect } from "react"; import { useLocation } from "react-router-dom"; +import ErrorCard from "@components/Card/ErrorCard"; -import { ErrorCard } from "@components"; -const ErrorContext = createContext(); +export const ErrorContext = createContext(); const ErrorContextProvider = ({ children }) => { - const [error, setError] = useState({ label: "", message: "" }); + const [ error, setError ] = useState({ label: "", message: "" }); const { pathname } = useLocation(); // Clear the error if the path changes. @@ -16,7 +16,7 @@ const ErrorContextProvider = ({ children }) => { return ( - {error && + { error && } {children} @@ -24,4 +24,4 @@ const ErrorContextProvider = ({ children }) => { ) } -export { ErrorContext, ErrorContextProvider }; \ No newline at end of file +export default ErrorContextProvider; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Provider/OrgContextProvider.js b/frontend/src/components/Dashboard/Provider/OrgContextProvider.js new file mode 100644 index 0000000..3a9ea66 --- /dev/null +++ b/frontend/src/components/Dashboard/Provider/OrgContextProvider.js @@ -0,0 +1,61 @@ +import { useState, createContext, useContext, useEffect } from "react" +import { useLocation } from "react-router-dom"; +import { UserContext } from "./UserContextProvider"; +import { initialOrgForm } from "@components/Dashboard/Form/FormReducer"; + +export const OrgContext = createContext(); + +const OrgContextProvider = ({ children }) => { + const { userData, authenticatedAddress } = useContext(UserContext); + const [ orgData, setOrgData ] = useState(initialOrgForm); + const [ currentOrgId, setCurrentOrgId ] = useState(); + const { pathname } = useLocation(); + + // When the path changes, check if the path is for an organization. If so, then + // set the current org id to the id of the organization. + useEffect(() => { + const path = pathname.split('/'); + const orgId = path.includes('organization') && path[3] !== "new" ? path[3] : null; + + if (orgId && orgId !== currentOrgId) { + setCurrentOrgId(orgId); + } + }, [pathname, currentOrgId, setCurrentOrgId]) + + // If we have a currentOrgId and an authenticated address, parse the + // org data from the user data. If the org data is not owned by the user, + // then parse only the badges that they are a delegate or holder of. + useEffect(() => { + if (!currentOrgId || !authenticatedAddress) return; + + let org = userData?.organizations.find( + org => org.id === parseInt(currentOrgId) + ); + + // if the user is not the owner of this org then we need to parse + // out the badges they are not a delegate or holder of. + if (org && org.owner.ethereum_address !== authenticatedAddress) { + // Find the badges in org that are in userData.badges + let badges = org.badges.filter(badge => { + return userData?.badges.find( + userBadge => userBadge.id === badge.id + ) + }) + + org.badges = badges; + } + + if (org) { + setOrgData(org); + } + + }, [userData, authenticatedAddress, currentOrgId]) + + return ( + + {children} + + ) +} + +export default OrgContextProvider; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/Provider/UserContextProvider.js b/frontend/src/components/Dashboard/Provider/UserContextProvider.js new file mode 100644 index 0000000..9050201 --- /dev/null +++ b/frontend/src/components/Dashboard/Provider/UserContextProvider.js @@ -0,0 +1,124 @@ +import { useState, createContext, useContext, useEffect, useCallback, useMemo } from "react"; +import { useNetwork } from "wagmi"; + +import { ErrorContext } from "./ErrorContextProvider"; +import { getUserRequest } from "@utils/api_requests"; +import { SIWEAuthorize, getAuthenticationStatus } from "@utils/auth"; +import { sliceAddress } from "@utils/helpers"; + +export const UserContext = createContext(); + +const UserContextProvider = ({ children, signer }) => { + const [ userData, setUserData ] = useState(null); + const [ authenticatedAddress, setAuthenticatedAddress ] = useState(null); + const [ isAuthenticating, setIsAuthenticating ] = useState(false); + const { setError } = useContext(ErrorContext); + const { chain } = useNetwork(); + + const isAuthenticated = useMemo(() => { + return signer?._address ? authenticatedAddress === signer._address : false; + }, [signer, authenticatedAddress]); + + // Clear any prior authentication token and prompt a signature to authenticate. + const tryAuthentication = useCallback(async () => { + document.cookie = 'csrftoken=; Path=/; Expires=Sat, 01 Jan 2000 00:00:001 GMT;'; + const siweResponse = await SIWEAuthorize(signer, signer._address, chain?.id); + + if(siweResponse.success) { + setAuthenticatedAddress(signer._address); + } else { + setError({ + label: "Authentication failed", + message: siweResponse.error + }); + } + }, [signer, chain?.id, setError]); + + // Fetch the user data from the backend. + const getUserData = useCallback(async () => { + let response = await getUserRequest(signer._address); + + if (!response?.error) { + setUserData(response); + setError(null); + } + else { + setError({ + label: 'Could not get user data', + message: response.error + }); + } + }, [signer, setError]) + + // Fetch API data for what wallet our authentication token is tied to. + // If the end point returns an error regarding authentication, then authenticate. + // If the wallet is not the same as the signer, then we set an error asking to login again. + // If the auth token is tied to the current address, then remove the error. + const getAuthStatus = useCallback(async () => { + setIsAuthenticating(true); + const authErrors = [ + "Authentication credentials were not provided.", + "You do not have permission to perform this action.", + "Not found.", + ] + + const response = await getAuthenticationStatus(signer._address); + + if (authErrors.includes(response?.detail)) { + tryAuthentication(); + } + else if (response?.address !== signer._address) { + setError({ + label: 'Account was changed', + message: 'Please sign in or switch back to ' + sliceAddress(response?.address) + '.' + }); + } + else { + setAuthenticatedAddress(response.address); + setError(null); + } + setIsAuthenticating(false) + }, [signer, tryAuthentication, setIsAuthenticating, setError]); + + // Upon signing in or a new account being detected, we first determine if the user + // is already authenticated, or if the authentication is for another wallet. + // If the current user is not the authenticated user according to state, and we're + // not currently authenticating, check auth token for what address it is for. + useEffect(() => { + if (!signer || isAuthenticating) return; + + if (signer._address !== authenticatedAddress) { + getAuthStatus(signer); + } else { + setError(null); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [signer, authenticatedAddress, getAuthStatus]); + + // If the user is authenticated and we don't have their data, fetch it. + useEffect(() => { + if (!signer) return; + + if ( + signer._address !== userData?.ethereum_address + && signer._address === authenticatedAddress + ) { + getUserData(); + } + + }, [signer, userData, authenticatedAddress, getUserData]); + + return ( + + {children} + + ) +} + +export default UserContextProvider; \ No newline at end of file diff --git a/frontend/src/components/Avatar/Avatar.js b/frontend/src/components/Dashboard/Utils/AddressAvatar.js similarity index 61% rename from frontend/src/components/Avatar/Avatar.js rename to frontend/src/components/Dashboard/Utils/AddressAvatar.js index ac118f6..e55dbe4 100644 --- a/frontend/src/components/Avatar/Avatar.js +++ b/frontend/src/components/Dashboard/Utils/AddressAvatar.js @@ -1,7 +1,7 @@ -const Avatar = ({ avatar }) => { +const AddressAvatar = ({ avatar }) => { return
} -export { Avatar }; \ No newline at end of file +export default AddressAvatar; \ No newline at end of file diff --git a/frontend/src/components/Utils/ImageLoader.js b/frontend/src/components/Dashboard/Utils/ImageLoader.js similarity index 65% rename from frontend/src/components/Utils/ImageLoader.js rename to frontend/src/components/Dashboard/Utils/ImageLoader.js index be40a4f..45c3b98 100644 --- a/frontend/src/components/Utils/ImageLoader.js +++ b/frontend/src/components/Dashboard/Utils/ImageLoader.js @@ -1,15 +1,16 @@ import { useState } from "react"; -import { IPFS_GATEWAY_URL, ImageErrorFallback } from "@static"; +import ImageErrorFallback from "@static/images/imgerror.svg"; +import { IPFS_GATEWAY_URL } from "@static/constants/links"; const ImageLoader = ({ - className, - src, - alt, + className, + src, + alt, prependGateway, - onLoad = () => { }, + onLoad = () => {}, }) => { - const [loaded, setLoaded] = useState(false); + const [ loaded, setLoaded ] = useState(false); const onError = (e) => { e.onError = null; @@ -18,8 +19,9 @@ const ImageLoader = ({ return ( <> - {!loaded &&
} - + {!loaded && +
+ } { + const { chain } = useNetwork(); + const { chains, switchNetwork } = useSwitchNetwork(); + + const { openConnectModal } = useConnectModal(); + const { ensAvatar, ensName, isFetched: ensFetched } = useEnsProfile(address); + + const { isAuthenticated, tryAuthentication } = useContext(UserContext); + const { orgData } = useContext(OrgContext); + + const { pathname: path } = useLocation(); + + const [isWrongNetwork, setIsWrongNetwork] = useState(false); + + // kinda hacky way to get our current location outside of Route. + const orgId = path.includes('organization') && !path.includes('organization/new') ? orgData?.id : null; + + // If chain is not in the keys of current badger addresses, then switch network to the + // current primary chain. If programmatic network switching does not work, then change + // the connect button to switch network. + const onSwitchNetworkRequest = useCallback(() => { + const primaryChain = chains.find(c => c.name === PRIMARY_PRODUCTION_CHAIN) + switchNetwork?.(primaryChain?.id) + }, [chains, switchNetwork]); + + // If wrong network is detected, then prompt a network switch. + useEffect(() => { + setIsWrongNetwork(chain?.name !== PRIMARY_PRODUCTION_CHAIN) + + if (isWrongNetwork && chain) + onSwitchNetworkRequest(); + }, [chain, isWrongNetwork, onSwitchNetworkRequest]); + + // Opens the connect modal on landing if connection has not already been + // established in prior session. + useEffect(() => { + if (openConnectModal && !address) + openConnectModal() + }, [openConnectModal, address]) + + return ( +
+
+ {!address + ? + : isWrongNetwork ? + + : !isAuthenticated || !ensFetched ? + + : !orgId || !orgData?.name ? + : + + } +
+ +
+ + + { setCollapsed(!collapsed) }} + afterText="Help" + sx={{ textTransform: 'capitalize' }} + icon={['fal', 'question']} + /> + + + {address && } +
+
+ ) +} + +export default ActionBar; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/action-bar/Logout.js b/frontend/src/components/Dashboard/action-bar/Logout.js new file mode 100644 index 0000000..277b9d7 --- /dev/null +++ b/frontend/src/components/Dashboard/action-bar/Logout.js @@ -0,0 +1,29 @@ +import { useNavigate } from "react-router-dom"; +import { useDisconnect } from "wagmi"; + +import ActionButton from "@components/Button/ActionButton"; + +import "@style/Dashboard/Sidebar/Logout/Logout.css"; + +const Logout = () => { + const { disconnect } = useDisconnect(); + const navigate = useNavigate(); + + const onDisconnect = () => { + disconnect(); + document.cookie = 'csrftoken=; Path=/; Expires=Sat, 01 Jan 2000 00:00:001 GMT;'; + navigate("/"); + } + + return ( + onDisconnect()} + afterText="Logout" + sx={{textTransform: 'capitalize'}} + icon={['fal', 'sign-out']} + /> + ) +} + +export default Logout; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/action-bar/help/HelpCopy.js b/frontend/src/components/Dashboard/action-bar/help/HelpCopy.js new file mode 100644 index 0000000..dda0b4a --- /dev/null +++ b/frontend/src/components/Dashboard/action-bar/help/HelpCopy.js @@ -0,0 +1,131 @@ +import StatusIndicators from './StatusIndicators/StatusIndicators'; + +const HelpCopy = (path) => { + const pathArray = path.split('/'); + let statuses; + + switch (true) { + case path === "/dashboard" || path === "/dashboard/": + statuses = [{ + name: "Ready to create Organization", + status: "can" + }] + + return ( + <> +
+
Getting Started
+

+ Click the "Create your first Organization" card to get started using Badger. +

+
+ +
+ +
+ + ); + case pathArray[3] === 'new': // Create Org Form + statuses = [{ + name: "Ready to create Organization", + status: "can" + }] + + return ( + <> +
+
Creating an Organization
+

You are defining an Organization. An Organization is a grouping of Badges all living in the same Organization contract.

+

Fill out the Name, Description, and Image metadata fields and then click "Create" to deploy your Organization's contract.

+

Once the Organization has been created, you can begin to design Badges for your team.

+ +
What is a Badge?
+

Badges are represented by ERC1155 token ID #s and allow Organizations to easily interoperate with tools such as Guild.xyz.

+
+ +
+ +
+ + ); + case pathArray[5] === 'new': // Create Badge Form + statuses = [{ + name: "Ready to create Badge", + status: "can" + }] + + return ( + <> +
+
What is a Badge?
+

Badges are represented by ERC1155 tokens to designate the credentials and roles of Organization members on chain.

+

Using Badges, Organizations can easily interoperate with tools such as Guild.xyz.

+ +
What is a Manager?
+

Managers are users that have the permission to manage a Badge.

+

A Manager of a Badge is able to mint to members, revoke from members, and edit the metadata of a Badge.

+ +
What is Account Bound?
+

Account Bound means that Badges are not able to be transferred by members.

+

An Account Bound Badge can only be transferred from a member by the Organization owner or a Badge Manager.

+

Members with an Account Bound Badge do have the ability to forfeit their Badge, which burns it and removes it from their wallet.

+
+
+ +
+ + ); + case !isNaN(parseInt(pathArray[5])): // Badge Detail + statuses = [ + { + name: "Ready to Mint Badge", + status: "can" + }, + { + name: "Ready to Revoke Badge", + status: "can" + }, + ] + + return ( + <> +
+
What is a Badge?
+

Badges are represented by ERC1155 tokens to designate the credentials and roles of Organization members on chain.

+

Using Badges, Organizations can easily interoperate with tools such as Guild.xyz.

+ +
What is a Manager?
+

Managers are users that have the permission to manage a Badge.

+

A Manager of a Badge is able to mint to members, revoke from members, and edit the metadata of a Badge.

+
+
+ +
+ + ) + case pathArray[3] !== 'new': // Org Detail + statuses = [{ + name: "Ready to Create Badges", + status: "can" + }] + + return ( + <> +
+
What is a Badge?
+

Badges are represented by ERC1155 tokens to designate the credentials and roles of Organization members on chain.

+

Using Badges, Organizations can easily interoperate with tools such as Guild.xyz.

+
+
+ +
+ + ) + default: + return ( + <> + ) + } +} + +export default HelpCopy; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/action-bar/help/HelpSidebar.js b/frontend/src/components/Dashboard/action-bar/help/HelpSidebar.js new file mode 100644 index 0000000..6f9e059 --- /dev/null +++ b/frontend/src/components/Dashboard/action-bar/help/HelpSidebar.js @@ -0,0 +1,64 @@ +import { useContext } from "react"; +import { useLocation } from "react-router-dom"; + +import { ErrorContext } from "@components/Dashboard/Provider/ErrorContextProvider"; +import { postFeedbackRequest } from "@utils/api_requests"; + +import ActionButton from "@components/Button/ActionButton"; +import HelpCopy from "./HelpCopy"; + +import "@style/Dashboard/Sidebar/Sidebar.css"; +import "@style/Dashboard/Sidebar/HelpSidebar.css"; + +const HelpSidebar = ({ collapsed }) => { + const { setError } = useContext(ErrorContext); + + const { pathname } = useLocation(); + + const onFeedbackSubmission = async ({ liked }) => { + const feedbackObj = { + feedback_url: window.location.href, + liked, + } + + const response = await postFeedbackRequest(feedbackObj); + if (response.status !== 200 || response.status !== 201) { + setError({ + label: "Feedback was not submitted", + message: response.error + }); + } + } + + return ( +
+ + +
+ {HelpCopy(pathname)} +
+ +
+

Do you like this page?

+ + { onFeedbackSubmission({ liked: true }) }} + icon={['fal', 'thumbs-up']} + sx={{ minWidth: '36px' }} + /> + { onFeedbackSubmission({ liked: false }) }} + icon={['fal', 'thumbs-down']} + sx={{ minWidth: '36px' }} + /> +
+
+ ) +} + +export default HelpSidebar; \ No newline at end of file diff --git a/frontend/src/components/StatusIndicators/StatusIndicators.js b/frontend/src/components/Dashboard/action-bar/help/StatusIndicators/StatusIndicators.js similarity index 71% rename from frontend/src/components/StatusIndicators/StatusIndicators.js rename to frontend/src/components/Dashboard/action-bar/help/StatusIndicators/StatusIndicators.js index 9a2d9b0..08b865c 100644 --- a/frontend/src/components/StatusIndicators/StatusIndicators.js +++ b/frontend/src/components/Dashboard/action-bar/help/StatusIndicators/StatusIndicators.js @@ -1,7 +1,7 @@ -import "@style/StatusIndicators/StatusIndicators.css"; +import "@style/Dashboard/Sidebar/StatusIndicators/StatusIndicators.css"; // can, cannot, pending -const StatusIndicators = ({ statuses }) => { +const StatusIndicators = ({statuses}) => { return (
{statuses.map((status, index) => ( @@ -11,7 +11,7 @@ const StatusIndicators = ({ statuses }) => {
))}
- ) + ) } -export { StatusIndicators }; \ No newline at end of file +export default StatusIndicators; \ No newline at end of file diff --git a/frontend/src/components/Dashboard/action-bar/views/OrgView.js b/frontend/src/components/Dashboard/action-bar/views/OrgView.js new file mode 100644 index 0000000..e67e587 --- /dev/null +++ b/frontend/src/components/Dashboard/action-bar/views/OrgView.js @@ -0,0 +1,59 @@ +import { Link } from 'react-router-dom'; + +import ActionButton from "@components/Button/ActionButton"; +import ImageLoader from "@components/Dashboard/Utils/ImageLoader"; + +const OrgView = ({ + orgData, + ipfs, + sliceAddress +}) => { + return ( +
+ + +
+ + {orgData?.name} + + +
+ +
{orgData?.chain.slice(0, 5)}
+ + + {sliceAddress(orgData?.ethereum_address)} + +
+ + navigator.clipboard.writeText(orgData?.ethereum_address)} + style={{ marginLeft: "10px" }} + sx={{ minWidth: '36px' }} + /> + + navigator.clipboard.writeText(window.location.href)} + style={{ marginLeft: "10px" }} + sx={{ minWidth: '36px' }} + /> +
+
+
+ ) +} + +export default OrgView; \ No newline at end of file diff --git a/frontend/src/components/View/ProfileView.js b/frontend/src/components/Dashboard/action-bar/views/ProfileView.js similarity index 85% rename from frontend/src/components/View/ProfileView.js rename to frontend/src/components/Dashboard/action-bar/views/ProfileView.js index f0f081c..0908291 100644 --- a/frontend/src/components/View/ProfileView.js +++ b/frontend/src/components/Dashboard/action-bar/views/ProfileView.js @@ -1,6 +1,6 @@ import { Link } from 'react-router-dom'; -import { ImageLoader } from "@components"; +import ImageLoader from "@components/Dashboard/Utils/ImageLoader"; const ProfileView = ({ ensAvatar, @@ -25,4 +25,4 @@ const ProfileView = ({ ) } -export { ProfileView }; \ No newline at end of file +export default ProfileView; \ No newline at end of file diff --git a/frontend/src/components/Title/ActionTitle.js b/frontend/src/components/Dashboard/action-title/ActionTitle.js similarity index 74% rename from frontend/src/components/Title/ActionTitle.js rename to frontend/src/components/Dashboard/action-title/ActionTitle.js index 7c89102..69119e9 100644 --- a/frontend/src/components/Title/ActionTitle.js +++ b/frontend/src/components/Dashboard/action-title/ActionTitle.js @@ -1,15 +1,15 @@ -import { ActionButton } from "@components"; +import ActionButton from "@components/Button/ActionButton"; const ActionTitle = ({ title, actions }) => { return ( -

{title}

- {actions &&
@@ -19,13 +19,13 @@ const ActionTitle = ({ title, actions }) => { className={action.className} onClick={action.onClick} icon={action.icon} - afterText={action.text || action.afterText} + afterText={action.afterText} /> ))} -
} +
) } -export { ActionTitle }; \ No newline at end of file +export default ActionTitle; \ No newline at end of file diff --git a/frontend/src/components/Drawer/BadgeManagementDrawer.js b/frontend/src/components/Drawer/BadgeManagementDrawer.js deleted file mode 100644 index 27c5bff..0000000 --- a/frontend/src/components/Drawer/BadgeManagementDrawer.js +++ /dev/null @@ -1,72 +0,0 @@ -import { useContext, useState } from "react"; - -import { useManageHolders } from "@hooks"; - -import { ErrorContext } from "@contexts"; - -import { IconButton, InputListAddressAmountCSV, Select } from "@components"; - -// TODO: Still need to clean up the below functions -// setDelegates hook -// manageOwnership hook -// onMembersUpdate -// onDelegatesUpdate -// runTransaction -// useEffect - -const BadgeManagementDrawer = ({ drawer, badge, org, setDrawer }) => { - const [ addressAmounts, setAddressAmounts ] = useState({ - addresses: [], - amounts: [] - }) - const { setError } = useContext(ErrorContext); - - const { openHolderTransaction, isPrepared, isLoading } = useManageHolders({ - obj: { - addresses: addressAmounts.addresses, - amounts: addressAmounts.amounts, - tokenId: badge.token_id, - }, - functionName: drawer.action.toLowerCase() - }); - - const onTransaction = async () => { - await openHolderTransaction({ - onSuccess: ({ receipt }) => { - // Reset the form. - setAddressAmounts({ - addresses: [], - amounts: [] - }) - console.log('receipt', receipt) - }, - onError: (e) => { - setError(e); - } - }); - } - - return ( - <> - - - {[...Array(inputFieldCount)].map((x, index) => ( -
- } - placeholder="0x0000..." - value={obj['addresses'][index] || ""} - onChange={(e) => onAddressChange(index, e)} - /> - - -
: <> - } - append={deleteDOM(index)} - value={obj['amounts'][index] || 1} - onChange={(e) => onAmountChange(index, e)} - /> -
- ))} -
- ) -} - -export { InputListAddressAmountCSV }; \ No newline at end of file diff --git a/frontend/src/components/Form/Input/index.js b/frontend/src/components/Form/Input/index.js deleted file mode 100644 index b0d338a..0000000 --- a/frontend/src/components/Form/Input/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { Input } from './Input'; -export { InputAddress } from './InputAddress'; -export { InputListCSV } from './InputListCSV'; -export { InputListKeyValue } from './InputListKeyValue'; -export { InputListAddressAmountCSV } from './InputListAddressAmountCSV'; \ No newline at end of file diff --git a/frontend/src/components/Form/Switch/Switch.js b/frontend/src/components/Form/Switch/Switch.js deleted file mode 100644 index c4ae290..0000000 --- a/frontend/src/components/Form/Switch/Switch.js +++ /dev/null @@ -1,28 +0,0 @@ -import "@style/Form/Switch.css"; - -const Switch = ({ checked, setChecked, label, disabled }) => { - return ( -
-
- {typeof label === "string" && - - } - {typeof label === "object" && label} - - -
-
- ) -} - -export { Switch }; \ No newline at end of file diff --git a/frontend/src/components/Form/index.js b/frontend/src/components/Form/index.js deleted file mode 100644 index 49f1908..0000000 --- a/frontend/src/components/Form/index.js +++ /dev/null @@ -1,8 +0,0 @@ -export { Input, InputAddress, InputListCSV, InputListKeyValue, InputListAddressAmountCSV } from './Input'; - -export { Select } from './Select/Select'; -export { Switch } from './Switch/Switch'; -export { Checkbox } from './Checkbox/Checkbox'; - -export { FormDrawer } from './FormDrawer'; -export { FormReducer, initialBadgeForm, initialOrgForm } from './FormReducer'; \ No newline at end of file diff --git a/frontend/src/components/Hero/LandingHero.js b/frontend/src/components/Hero/LandingHero.js deleted file mode 100644 index 5684545..0000000 --- a/frontend/src/components/Hero/LandingHero.js +++ /dev/null @@ -1,38 +0,0 @@ -import { useState, useEffect } from "react"; - -import "@style/Hero/LandingHero.css" - -const LandingHero = ({ children, className = undefined }) => { - const [mouse, setMouse] = useState({ left: 0, top: 0 }); - - const handleMouseMove = (e) => setMouse({ - left: e.pageX - 2500, - top: e.pageY - 2500 - }); - - useEffect(() => { - window.addEventListener("mousemove", handleMouseMove); - - return () => window.removeEventListener("mousemove", handleMouseMove); - }, []); - - return ( - <> -
-
-
- -
-
-
-
-
-
- - {children} -
- - ) -} - -export { LandingHero } \ No newline at end of file diff --git a/frontend/src/components/Icon/ChainIcon.js b/frontend/src/components/Icon/ChainIcon.js deleted file mode 100644 index 717f1f4..0000000 --- a/frontend/src/components/Icon/ChainIcon.js +++ /dev/null @@ -1,15 +0,0 @@ -import { localhost, polygon } from "@static" - -import "@style/Icon/ChainIcon.css" - -const icons = { - "1337": localhost, - "137": polygon, -} - -const ChainIcon = ({ chainId }) => { - const icon = icons[chainId] || '🚨' - return {chainId} -} - -export { ChainIcon } \ No newline at end of file diff --git a/frontend/src/components/Icon/LogoIcon.js b/frontend/src/components/Icon/LogoIcon.js deleted file mode 100644 index dca156b..0000000 --- a/frontend/src/components/Icon/LogoIcon.js +++ /dev/null @@ -1,10 +0,0 @@ - -import "@style/Icon/LogoIcon.css" - -import { logo } from "@static" - -const LogoIcon = () => { - return Badger logo -} - -export { LogoIcon } \ No newline at end of file diff --git a/frontend/src/components/Icon/index.js b/frontend/src/components/Icon/index.js deleted file mode 100644 index 2ce0ad6..0000000 --- a/frontend/src/components/Icon/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { ChainIcon } from './ChainIcon' -export { LogoIcon } from './LogoIcon' \ No newline at end of file diff --git a/frontend/src/components/Landing.js b/frontend/src/components/Landing.js new file mode 100644 index 0000000..f199484 --- /dev/null +++ b/frontend/src/components/Landing.js @@ -0,0 +1,110 @@ +import { Link } from "react-router-dom"; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; + +import IconButton from './Button/IconButton'; +import { HOME_LINKS } from "@static/constants/links"; + +import logo from "@static/images/badger-logo-headline.png"; +// import key from "../static/images/key.gif"; + +import "@style/Landing.css"; + +const Landing = () => { + const features = [ + { + title: 'Launch Organizations', + description: 'Designate leaders and members of your organization on-chain.', + icon: ['fal', 'sitemap'] + }, + { + title: 'Delegate Permissions', + description: 'Manage organizational leaders with layered permissioning.', + icon: ['fal', 'layer-group'] + }, + { + title: 'Distribute Badges', + description: 'Generate on-chain keys for members of your organizations.', + icon: ['fal', 'badge'] + }, + { + title: 'No Code Required', + description: 'All tools are constructed to be managed directly within a user-friendly dashboard.', + icon: ['fal', 'code'] + } + ] + + return ( +
+
+
+
+ logo +
+ +
+ Docs +
+ +
+ Enter App +
+
+
+ +
+
+
+

Give your organization their keys to Web3.

+

Deploy and manage flexible group policies for your team’s decentralized tool stack.

+ + + + +
+
+
+ +
+ +
+
+
+

An on-chain organization permissions primitive designed to support every use case.

+ +
+ {features.map((feature, index) => ( +
+
+ +
+ +
+

{feature.title}

+

{feature.description}

+
+
+ ))} +
+ + + + +
+
+
+ + {/* Footer */} +
+
+
+ logo +
+
+
+
+ ) +} + +export default Landing; \ No newline at end of file diff --git a/frontend/src/components/Link/ArrowLink.js b/frontend/src/components/Link/ArrowLink.js deleted file mode 100644 index d3adef0..0000000 --- a/frontend/src/components/Link/ArrowLink.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Link } from 'react-router-dom'; - -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; - -import "@style/Link/ArrowLink.css" - -const ArrowLink = ({ children, className = undefined, href = undefined, to = undefined }) => { - const content = <> - {children} - - - - const contentClass = className ? `arrowLink ${className}` : "arrowLink"; - - if (href) return ( - {content} - ) - - return ( - {content} - ); -} - -export { ArrowLink } \ No newline at end of file diff --git a/frontend/src/components/Link/index.js b/frontend/src/components/Link/index.js deleted file mode 100644 index dcc9843..0000000 --- a/frontend/src/components/Link/index.js +++ /dev/null @@ -1 +0,0 @@ -export { ArrowLink } from './ArrowLink'; \ No newline at end of file diff --git a/frontend/src/components/Metrics/Metrics.js b/frontend/src/components/Metrics/Metrics.js deleted file mode 100644 index 1ce5b94..0000000 --- a/frontend/src/components/Metrics/Metrics.js +++ /dev/null @@ -1,57 +0,0 @@ -import { useEffect, useState } from 'react'; - -import "@style/Metrics/Metrics.css"; - -const handleData = (data) => { - return Object.keys(data).map(key => { - return { - title: key.split("(")[0].trim(), - value: data[key] - } - }) -} - -const Metrics = () => { - const keys = { - "All Time Unique Holders": 2000, - "Recent Mints": 100, - "Total Orgs (1+ Member)": 72, - "Total Mints": 6371, - } - - const [data, setData] = useState(handleData(keys)) - - useEffect(() => { - const getData = async () => { - const response = await fetch("https://api.flipsidecrypto.com/api/v2/queries/63abf6c7-15b6-4a6b-8aed-bc450764abe0/data/latest") - - const data = await response.json() - - const dataKeys = data - .filter(item => item.KPI in keys) - .map(item => { return { [item.KPI]: item.Count } }) - .reduce((acc, curr) => { return { ...curr, ...acc } }, {}) - - setData(handleData(dataKeys)) - } - - getData() - }, []) - - return ( -
- {data && data.map((item, index) => { - return ( -
-
- {item.value.toLocaleString()} -
-
{item.title}
-
- ) - })} -
- ) -} - -export { Metrics } \ No newline at end of file diff --git a/frontend/src/components/Navbar/Navbar.js b/frontend/src/components/Navbar/Navbar.js deleted file mode 100644 index fdff244..0000000 --- a/frontend/src/components/Navbar/Navbar.js +++ /dev/null @@ -1,60 +0,0 @@ -import { useState, useEffect } from "react"; - -import { Link } from "react-router-dom"; - -import { LogoIcon } from "@components"; - -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import { HOME_LINKS } from "@static"; - -import "@style/Navbar/Navbar.css"; - -const Navbar = () => { - const [isFilled, setIsFilled] = useState(false); - const [isMenuOpen, setIsMenuOpen] = useState(false); - - useEffect(() => { - const handleScroll = () => setIsFilled(window.scrollY > 75); - - window.addEventListener("scroll", handleScroll); - - return () => window.removeEventListener("scroll", handleScroll); - }, []); - - const onHamburgerClick = () => { - setIsMenuOpen(!isMenuOpen); - } - - return ( -
-
- - -
-
- Customer Stories - FAQ - Docs -
- -
- - - - -
-
-
- -
-
-
- ) -} - -export { Navbar } \ No newline at end of file diff --git a/frontend/src/components/Preview/BadgePreview.js b/frontend/src/components/Preview/BadgePreview.js deleted file mode 100644 index 4d97b02..0000000 --- a/frontend/src/components/Preview/BadgePreview.js +++ /dev/null @@ -1,29 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import { ImageLoader } from "@components"; - -const BadgePreview = ({ badge }) => { - return ( -
-
- -
- -
-
-

{badge.name}

- -
- {badge.account_bound && } -
-
- -

{badge.description}

- -
{`#${badge.token_id}`}
-
-
- ) -} - -export { BadgePreview } \ No newline at end of file diff --git a/frontend/src/components/Preview/StoryPreview.js b/frontend/src/components/Preview/StoryPreview.js deleted file mode 100644 index e17d8b1..0000000 --- a/frontend/src/components/Preview/StoryPreview.js +++ /dev/null @@ -1,31 +0,0 @@ -import { ArrowLink } from "@components" - -import "@style/Preview/StoryPreview.css" - -const StoryPreview = ({ story, className }) => { - return ( -
-
- {story && <> -
-

“{story.attributes.quote}”

- -
- {story.attributes.quoter} - -

{story.attributes.quoter}
{story.attributes.quoter_title}

- - - Customer story - -
-
- - {story.filename} - } -
-
- ) -} - -export { StoryPreview } \ No newline at end of file diff --git a/frontend/src/components/Preview/index.js b/frontend/src/components/Preview/index.js deleted file mode 100644 index 73f8984..0000000 --- a/frontend/src/components/Preview/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { BadgePreview } from './BadgePreview'; -export { StoryPreview } from './StoryPreview'; \ No newline at end of file diff --git a/frontend/src/components/Scroll/ScrollToTop.js b/frontend/src/components/Scroll/ScrollToTop.js deleted file mode 100644 index c8632d7..0000000 --- a/frontend/src/components/Scroll/ScrollToTop.js +++ /dev/null @@ -1,14 +0,0 @@ -import { useEffect } from 'react' -import { useLocation } from 'react-router-dom' - -const ScrollToTop = () => { - const { pathname } = useLocation() - - useEffect(() => { - window.scrollTo(0, 0) - }, [pathname]) - - return null -} - -export { ScrollToTop } \ No newline at end of file diff --git a/frontend/src/components/Table/BadgeTable.js b/frontend/src/components/Table/BadgeTable.js index e6cee43..e19cd34 100644 --- a/frontend/src/components/Table/BadgeTable.js +++ b/frontend/src/components/Table/BadgeTable.js @@ -1,23 +1,21 @@ import { useEffect, useState } from "react"; -import { useNavigate, useParams } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import { Table, TableHead, TableRow, TableContainer, TableCell, TableBody } from "@mui/material" -import { TableSortHead } from "@components"; +import { IPFS_GATEWAY_URL } from "@static/constants/links"; -import { compareByProperty } from "@utils"; - -import { badgeHeadRows, IPFS_GATEWAY_URL } from "@static"; +import TableSortHead from "./TableSortHead"; +import { compareByProperty } from "@utils/helpers"; +import { badgeHeadRows } from "@static/constants/constants"; import "@style/Table/HolderTable.css"; -const BadgeTable = ({ badges }) => { +const BadgeTable = ({ orgId, badges }) => { const navigate = useNavigate(); - const { orgAddress, chainId } = useParams(); - const [headRows, setHeadRows] = useState(badgeHeadRows); const [sortedList, setSortedList] = useState(badges); @@ -67,7 +65,7 @@ const BadgeTable = ({ badges }) => { {sortedList.map((badge, index) => ( navigate(`/dashboard/organization/${chainId}/${orgAddress}/badge/${badge.id}/`)} + onClick={() => navigate(`/dashboard/organization/${orgId}/badge/${badge.id}`)} style={{ cursor: "pointer" }} @@ -112,4 +110,4 @@ const BadgeTable = ({ badges }) => { ) } -export { BadgeTable }; \ No newline at end of file +export default BadgeTable; \ No newline at end of file diff --git a/frontend/src/components/Table/HolderTable.js b/frontend/src/components/Table/HolderTable.js index d09436e..1b61709 100644 --- a/frontend/src/components/Table/HolderTable.js +++ b/frontend/src/components/Table/HolderTable.js @@ -1,24 +1,23 @@ import { useEffect, useState } from "react"; -import { - Table, TableHead, TableRow, - TableContainer, TableCell, TableBody +import { + Table, TableHead, TableRow, + TableContainer, TableCell, TableBody } from "@mui/material" -import { ActionButton, TableSortHead } from "@components"; - -import { compareByProperty } from "@utils"; - -import { holderHeadRows } from "@static"; +import TableSortHead from "./TableSortHead"; +import ActionButton from "@components/Button/ActionButton"; +import { compareByProperty } from "@utils/helpers"; +import { holderHeadRows } from "@static/constants/constants"; import "@style/Table/HolderTable.css"; -const HolderTable = ({ delegates, users }) => { - const [headRows, setHeadRows] = useState(holderHeadRows); - const [sortedList, setSortedList] = useState(users); +const HolderTable = ({ badge }) => { + const [ headRows, setHeadRows ] = useState(holderHeadRows); + const [ sortedList, setSortedList ] = useState(badge.users); const onSortChange = (key) => { // Get the current sort method and inverse it for chevron display. - let newHeadRows = { ...headRows }; + let newHeadRows = {...headRows}; let method = newHeadRows[key].method; method = !method || method === "desc" ? "asc" : "desc"; newHeadRows[key].method = method; @@ -26,12 +25,12 @@ const HolderTable = ({ delegates, users }) => { // Sort the list by the key and the method. let newSortedList = [...sortedList]; - newSortedList = newSortedList.sort((a, b) => + newSortedList = newSortedList.sort((a,b) => compareByProperty(key, method, a, b) ); setSortedList(newSortedList); } - + // Combines the user and delegates arrays into one array with a user and delegate boolean property. const combineUsersAndDelegates = (users, delegates) => { let combinedUsers = []; @@ -42,10 +41,10 @@ const HolderTable = ({ delegates, users }) => { } if (delegates?.length > 0) { delegates.forEach(delegate => { - const index = combinedUsers.findIndex(user => + const index = combinedUsers.findIndex(user => user.ethereum_address === delegate.ethereum_address ) - + index === -1 ? combinedUsers.push({ ...delegate, holder: false, delegate: true }) : combinedUsers[index].delegate = true; @@ -57,9 +56,9 @@ const HolderTable = ({ delegates, users }) => { // If users changes, update and combine holders and delegates in the sorted list. useEffect(() => { - const combinedUsers = combineUsersAndDelegates(users, delegates); + const combinedUsers = combineUsersAndDelegates(badge.users, badge.delegates); setSortedList(combinedUsers); - }, [delegates, users]) + }, [badge.users, badge.delegates]) return (
@@ -68,7 +67,7 @@ const HolderTable = ({ delegates, users }) => { {Object.keys(headRows).map((key) => ( - { - {sortedList?.length > 0 && sortedList.map((user, index) => ( - - -
-
- {user.ethereum_address} -
- navigator.clipboard.writeText(user.ethereum_address)} - icon={['fal', 'fa-copy']} - sx={{ minWidth: '32px', marginLeft: '8px' }} - /> + {sortedList?.length > 0 && sortedList.map((user, index) => ( + + +
+
+ {user.ethereum_address}
- - -
- {user?.ens_name} -
-
- -
- {user?.holder ? "Yes" : "No"} -
-
- -
- {user?.delegate ? "Yes" : "No"} -
-
- - ))} + navigator.clipboard.writeText(user.ethereum_address)} + icon={['fal', 'fa-copy']} + sx={{minWidth: '32px', marginLeft: '8px'}} + /> +
+
+ +
+ {user?.ens_name} +
+
+ +
+ {user?.holder ? "Yes" : "No"} +
+
+ +
+ {user?.delegate ? "Yes" : "No"} +
+
+
+ ))} @@ -126,4 +125,4 @@ const HolderTable = ({ delegates, users }) => { ) } -export { HolderTable }; \ No newline at end of file +export default HolderTable; \ No newline at end of file diff --git a/frontend/src/components/Table/ObjectTable.js b/frontend/src/components/Table/ObjectTable.js index 6930b4c..2b2a686 100644 --- a/frontend/src/components/Table/ObjectTable.js +++ b/frontend/src/components/Table/ObjectTable.js @@ -1,22 +1,22 @@ -import { useState } from "react"; -import { - Table, TableHead, TableRow, - TableContainer, TableCell, TableBody +import { useEffect, useState } from "react"; +import { + Table, TableHead, TableRow, + TableContainer, TableCell, TableBody } from "@mui/material" -import { ActionButton, TableSortHead } from "@components"; - -import { compareByProperty } from "@utils"; +import TableSortHead from "./TableSortHead"; +import ActionButton from "@components/Button/ActionButton"; +import { compareByProperty } from "@utils/helpers"; import "@style/Table/HolderTable.css"; const ObjectTable = ({ data, heads }) => { - const [headRows, setHeadRows] = useState(heads); - const [sortedList, setSortedList] = useState(data); + const [ headRows, setHeadRows ] = useState(heads); + const [ sortedList, setSortedList ] = useState(data); const onSortChange = (key) => { // Get the current sort method and inverse it for chevron display. - let newHeadRows = { ...headRows }; + let newHeadRows = {...headRows}; let method = newHeadRows[key].method; method = !method || method === "desc" ? "asc" : "desc"; newHeadRows[key].method = method; @@ -24,7 +24,7 @@ const ObjectTable = ({ data, heads }) => { // Sort the list by the key and the method. let newSortedList = [...sortedList]; - newSortedList = newSortedList.sort((a, b) => + newSortedList = newSortedList.sort((a,b) => compareByProperty(key, method, a, b) ); setSortedList(newSortedList); @@ -37,7 +37,7 @@ const ObjectTable = ({ data, heads }) => { {Object.keys(headRows).map((key) => ( - { - {sortedList.map((user, index) => ( - - -
-
- {user.ethereum_address} -
- navigator.clipboard.writeText(user.ethereum_address)} - icon={['fal', 'fa-copy']} - sx={{ minWidth: '32px', marginLeft: '8px' }} - /> + {sortedList.map((user, index) => ( + + +
+
+ {user.ethereum_address}
- - -
- {user?.ens_name} -
-
- -
- {user?.holder ? "Yes" : "No"} -
-
- -
- {user?.delegate ? "Yes" : "No"} -
-
- - ))} + navigator.clipboard.writeText(user.ethereum_address)} + icon={['fal', 'fa-copy']} + sx={{minWidth: '32px', marginLeft: '8px'}} + /> +
+
+ +
+ {user?.ens_name} +
+
+ +
+ {user?.holder ? "Yes" : "No"} +
+
+ +
+ {user?.delegate ? "Yes" : "No"} +
+
+
+ ))} @@ -95,4 +95,4 @@ const ObjectTable = ({ data, heads }) => { ) } -export { ObjectTable }; \ No newline at end of file +export default HolderTable; \ No newline at end of file diff --git a/frontend/src/components/Table/TableSortHead.js b/frontend/src/components/Table/TableSortHead.js index 72ec9e9..841c769 100644 --- a/frontend/src/components/Table/TableSortHead.js +++ b/frontend/src/components/Table/TableSortHead.js @@ -30,4 +30,4 @@ const TableSortHead = ({ id, label, sortMethod, onSortChange, align, width }) => ) } -export { TableSortHead }; \ No newline at end of file +export default TableSortHead; \ No newline at end of file diff --git a/frontend/src/components/Table/index.js b/frontend/src/components/Table/index.js deleted file mode 100644 index 1d105a7..0000000 --- a/frontend/src/components/Table/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { BadgeTable } from './BadgeTable'; -export { HolderTable } from './HolderTable'; -export { ObjectTable } from './ObjectTable'; -export { TableSortHead } from './TableSortHead'; \ No newline at end of file diff --git a/frontend/src/components/Utils/index.js b/frontend/src/components/Utils/index.js deleted file mode 100644 index c8a55c7..0000000 --- a/frontend/src/components/Utils/index.js +++ /dev/null @@ -1 +0,0 @@ -export { ImageLoader } from './ImageLoader'; \ No newline at end of file diff --git a/frontend/src/components/View/OrgView.js b/frontend/src/components/View/OrgView.js deleted file mode 100644 index 489d6dd..0000000 --- a/frontend/src/components/View/OrgView.js +++ /dev/null @@ -1,43 +0,0 @@ -import { Link, useParams } from 'react-router-dom'; - -import { useUser } from "@hooks" - -import { ActionButton, ImageLoader } from "@components" - -import { sliceAddress } from "@utils"; - -import { IPFS_GATEWAY_URL } from "@static"; - -import "@style/View/OrgView.css" - -const copy = (text) => navigator.clipboard.writeText(text); - -const OrgView = ({ chainId, orgAddress }) => { - const { organization } = useUser({ chainId, orgAddress }); - - return ( -
- {organization && <> - - - {organization.name} - - - - {organization.chain_id} - - - {sliceAddress(organization?.ethereum_address)} - - - - copy(organization.ethereum_address)} /> - - copy(window.location.href)} /> - } -
- ) -} - -export { OrgView }; \ No newline at end of file diff --git a/frontend/src/components/View/index.js b/frontend/src/components/View/index.js deleted file mode 100644 index 6ae0ffa..0000000 --- a/frontend/src/components/View/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { OrgView } from './OrgView'; -export { ProfileView } from './ProfileView'; \ No newline at end of file diff --git a/frontend/src/components/Wallet/Wallet.js b/frontend/src/components/Wallet/Wallet.js deleted file mode 100644 index 5592b1e..0000000 --- a/frontend/src/components/Wallet/Wallet.js +++ /dev/null @@ -1,44 +0,0 @@ -import { configureChains, createClient, WagmiConfig } from 'wagmi'; -import { alchemyProvider } from 'wagmi/providers/alchemy'; -import { publicProvider } from 'wagmi/providers/public'; -import { getDefaultWallets, RainbowKitProvider } from '@rainbow-me/rainbowkit'; -import { polygon, localhost } from 'wagmi/chains'; - -import { AuthenticationContextProvider, OrgContextProvider, UserContextProvider } from '@contexts'; - -const Wallet = ({ children }) => { - const { chains, provider } = configureChains( - [polygon, localhost], - [ - alchemyProvider({ apiKey: process.env.REACT_APP_ALCHEMY_API_KEY }), - publicProvider() - ] - ); - - const { connectors } = getDefaultWallets({ - appName: 'Badger', - chains - }); - - const wagmiClient = createClient({ - autoConnect: true, - connectors, - provider - }) - - return ( - - - - - - {children} - - - - - - ) -} - -export { Wallet }; \ No newline at end of file diff --git a/frontend/src/components/Wallet/WalletWrapper.js b/frontend/src/components/Wallet/WalletWrapper.js new file mode 100644 index 0000000..68576d9 --- /dev/null +++ b/frontend/src/components/Wallet/WalletWrapper.js @@ -0,0 +1,35 @@ +import { configureChains, createClient, WagmiConfig, defaultChains, chain } from 'wagmi'; +import { alchemyProvider } from 'wagmi/providers/alchemy'; +import { publicProvider } from 'wagmi/providers/public'; +import { getDefaultWallets, RainbowKitProvider } from '@rainbow-me/rainbowkit'; + +const WalletWrapper = ({ children }) => { + const { chains, provider } = configureChains( + [...defaultChains, chain.polygon, chain.localhost], + [ + alchemyProvider({ apiKey: process.env.REACT_APP_ALCHEMY_API_KEY }), + publicProvider() + ] + ); + + const { connectors } = getDefaultWallets({ + appName: 'My RainbowKit App', + chains + }); + + const wagmiClient = createClient({ + autoConnect: true, + connectors, + provider + }) + + return ( + + + { children } + + + ) +} + +export default WalletWrapper; \ No newline at end of file diff --git a/frontend/src/components/Wallet/index.js b/frontend/src/components/Wallet/index.js deleted file mode 100644 index 5ccd746..0000000 --- a/frontend/src/components/Wallet/index.js +++ /dev/null @@ -1 +0,0 @@ -export { Wallet } from './Wallet'; \ No newline at end of file diff --git a/frontend/src/components/index.js b/frontend/src/components/index.js deleted file mode 100644 index e323d74..0000000 --- a/frontend/src/components/index.js +++ /dev/null @@ -1,27 +0,0 @@ -export { Avatar } from './Avatar/Avatar'; -export { ActionBar, FormActionBar } from './Bar'; -export { Button, ActionButton, ConnectButton, IconButton, LogoutButton } from './Button'; -export { Card, ErrorCard, OrgCard, StoryCard } from './Card'; -export { BadgeDangerZone, OrgDangerZone } from './DangerZone'; -export { Dashboard } from './Dashboard/Dashboard'; -export { BadgeManagementDrawer } from './Drawer'; -export { Empty } from './Empty/Empty'; -export { Checkbox, Input, InputAddress, InputListCSV, InputListKeyValue, InputListAddressAmountCSV, Select, Switch, FormDrawer, FormReducer, initialBadgeForm, initialOrgForm } from './Form'; -export { Footer } from './Footer/Footer'; -export { ArrowLink } from './Link'; -export { Navbar } from './Navbar/Navbar'; -export { Header } from './Header/Header'; -export { ChainIcon, LogoIcon } from './Icon'; -export { OrgStats } from './Org/OrgStats'; -export { BadgePreview, StoryPreview } from './Preview'; -export { ScrollToTop } from './Scroll/ScrollToTop'; -export { SEO } from './SEO/SEO'; -export { StatusIndicators } from './StatusIndicators/StatusIndicators'; -export { BadgeTable, HolderTable, ObjectTable, TableSortHead } from './Table'; -export { ActionTitle } from './Title/ActionTitle'; -export { ImageLoader } from "./Utils"; -export { OrgView, ProfileView } from './View'; -export { Wallet } from './Wallet'; -export { Metrics } from './Metrics/Metrics'; -export { LandingHero } from './Hero/LandingHero'; -export { Accordion } from './Accordion/Accordion'; \ No newline at end of file diff --git a/frontend/src/components/SEO/SEO.js b/frontend/src/components/seo/Meta.js similarity index 87% rename from frontend/src/components/SEO/SEO.js rename to frontend/src/components/seo/Meta.js index 97bda96..0d34a20 100644 --- a/frontend/src/components/SEO/SEO.js +++ b/frontend/src/components/seo/Meta.js @@ -1,6 +1,6 @@ import { Helmet } from 'react-helmet-async' -const SEO = ({ title, description }) => { +const Meta = ({ title, description }) => { return ( {title} @@ -14,4 +14,4 @@ const SEO = ({ title, description }) => { ) } -export { SEO }; \ No newline at end of file +export default Meta; \ No newline at end of file diff --git a/frontend/src/contexts/AuthenticationContext.js b/frontend/src/contexts/AuthenticationContext.js deleted file mode 100644 index 81d6d16..0000000 --- a/frontend/src/contexts/AuthenticationContext.js +++ /dev/null @@ -1,48 +0,0 @@ -import { createContext, useEffect, useState } from "react"; -import { useAccount, useNetwork, useSwitchNetwork } from "wagmi"; - -const CHAIN_ID = process.env.REACT_APP_CHAIN_ID - -const AuthenticationContext = createContext(); - -const getAuthenticatedAddress = () => { - return document.cookie.split(';').find(c => c.includes('authenticatedAddress'))?.split('=')[1]; -} - -const AuthenticationContextProvider = ({ children }) => { - const { chain } = useNetwork(); - const { chains, isError, switchNetwork } = useSwitchNetwork(); - - const { address, isConnected } = useAccount(); - - const [authenticatedAddress, setAuthenticatedAddress] = useState(getAuthenticatedAddress()); - const [isAuthenticating, setIsAuthenticating] = useState(false); - - const primaryChain = chains.find(c => c.id === parseInt(CHAIN_ID)); - - const isWrongNetwork = isConnected && chain && primaryChain && chains && chain.id !== primaryChain.id; - - const isAuthenticated = isConnected && !isWrongNetwork && address === authenticatedAddress; - - const isReadyToSwitch = !isError && switchNetwork && isWrongNetwork; - - useEffect(() => { - if (isReadyToSwitch) switchNetwork(primaryChain.id) - }, [isReadyToSwitch, primaryChain]); - - return ( - - {children} - - ) -} - -export { AuthenticationContext, AuthenticationContextProvider } \ No newline at end of file diff --git a/frontend/src/contexts/BadgeContext.js b/frontend/src/contexts/BadgeContext.js deleted file mode 100644 index 656055d..0000000 --- a/frontend/src/contexts/BadgeContext.js +++ /dev/null @@ -1,30 +0,0 @@ -import { createContext } from "react" -import { useAccount } from "wagmi" - -import { useSocket } from "@hooks"; - -const BadgeContext = createContext(); - -const BadgeContextProvider = ({ children }) => { - const { address } = useAccount(); - - const enabled = !!address; - - const { - connected, - data: badges, - send - } = useSocket({ enabled, url: 'ws://localhost:8000/ws/badge/' }) - - return ( - - {children} - - ) -} - -export { BadgeContext, BadgeContextProvider } \ No newline at end of file diff --git a/frontend/src/contexts/OrgContext.js b/frontend/src/contexts/OrgContext.js deleted file mode 100644 index cc45ef5..0000000 --- a/frontend/src/contexts/OrgContext.js +++ /dev/null @@ -1,34 +0,0 @@ -import { createContext, useContext } from "react" -import { useAccount } from "wagmi" - -import { BadgeContextProvider } from "@contexts" - -import { useSocket } from "@hooks" - -const OrgContext = createContext(); - -const OrgContextProvider = ({ children }) => { - const { address } = useAccount(); - - const enabled = !!address; - - const { - connected, - data: organizations, - send - } = useSocket({ enabled, url: 'ws://localhost:8000/ws/organization/' }) - - return ( - - - {children} - - - ) -} - -export { OrgContext, OrgContextProvider }; \ No newline at end of file diff --git a/frontend/src/contexts/UserContext.js b/frontend/src/contexts/UserContext.js deleted file mode 100644 index ec0f046..0000000 --- a/frontend/src/contexts/UserContext.js +++ /dev/null @@ -1,20 +0,0 @@ -import { createContext, useContext } from "react"; - -import { BadgeContext, OrgContext } from "@contexts"; - -const UserContext = createContext(); - -const UserContextProvider = ({ children }) => { - const { organizations } = useContext(OrgContext); - const { badges } = useContext(BadgeContext); - - const isLoaded = organizations && badges; - - return ( - - {children} - - ) -} - -export { UserContext, UserContextProvider }; \ No newline at end of file diff --git a/frontend/src/contexts/index.js b/frontend/src/contexts/index.js deleted file mode 100644 index b2740c4..0000000 --- a/frontend/src/contexts/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { AuthenticationContext, AuthenticationContextProvider } from './AuthenticationContext'; -export { BadgeContext, BadgeContextProvider } from './BadgeContext'; -export { ErrorContext, ErrorContextProvider } from './ErrorContext'; -export { OrgContext, OrgContextProvider } from './OrgContext'; -export { UserContext, UserContextProvider } from './UserContext'; \ No newline at end of file diff --git a/frontend/src/hooks/contracts/contractVersions.js b/frontend/src/hooks/contracts/contractVersions.js index d741dfb..579418c 100644 --- a/frontend/src/hooks/contracts/contractVersions.js +++ b/frontend/src/hooks/contracts/contractVersions.js @@ -1,42 +1,52 @@ import { ethers } from "ethers"; -const BADGER_ADDRESSES = JSON.parse(process.env.REACT_APP_BADGER_ADDRESSES); +const PRIMARY_IMPLEMENTATION = process.env.REACT_APP_BADGER_IMPLEMENTATION; +const PRIMARY_PROD_CHAIN = process.env.REACT_APP_PRODUCTION_CHAIN; -function getBadgerAddress(chainID) { +// Gets the Badger implementation to clone based on the version. +// TODO: Add versioning +export function getPrimaryImplementation() { + return PRIMARY_IMPLEMENTATION; +} + +// Putting the parse into a try catch block to account for missing env var breaking the app. +export function getBadgerAddress(chainName) { try { - return BADGER_ADDRESSES[chainID]; - } catch { + const BADGER_ADDRESSES = JSON.parse(process.env.REACT_APP_BADGER_ADDRESSES); + const address = BADGER_ADDRESSES[chainName] ? BADGER_ADDRESSES[chainName] : BADGER_ADDRESSES[PRIMARY_PROD_CHAIN]; + return address; + } + catch { console.error(`Badger contract address not found in .env.`) return null; } } -function getBadgerOrganizationAbi() { +// Gets the ABI for sash contracts. +// TODO: Add versioning +export function getBadgerOrganizationAbi() { try { const abi = require('@abis/BadgerOrganization.json'); - return { abi: new ethers.utils.Interface(abi) } - } catch (err) { + return {abi: new ethers.utils.Interface(abi)} + } + catch (err) { console.error('Error importing BadgerOrganization:', err); - return { error: err } + return {error: err} } } -function getBadgerAbi(chainID) { +// Gets the abi and chain specific address for the Badger contract. +export function getBadgerAbi(chainName) { try { const abi = require('@abis/Badger.json'); - const address = getBadgerAddress(chainID); + const address = getBadgerAddress(chainName); return { abi: new ethers.utils.Interface(abi), - address, + address: address } - } catch (err) { - console.error('Error importing Badger:', err); - return { error: err } } -} - -export { - getBadgerAddress, - getBadgerOrganizationAbi, - getBadgerAbi + catch (err) { + console.error('Error importing Badger:', err); + return {error: err} + } } \ No newline at end of file diff --git a/frontend/src/hooks/contracts/index.js b/frontend/src/hooks/contracts/index.js deleted file mode 100644 index 87d47f4..0000000 --- a/frontend/src/hooks/contracts/index.js +++ /dev/null @@ -1,22 +0,0 @@ -export { - getBadgerAddress, - getBadgerOrganizationAbi, - getBadgerAbi -} from './contractVersions'; - -export { - useOrgForm, - useTransferOwnership, - useRenounceOwnership -} from './useContracts'; - -export { - useBadgeForm, - useBadge -} from './useBadgeForm'; - -export { - useManageHolders, - useSetDelegates, - useManageBadgeOwnership -} from './useManageHolders'; \ No newline at end of file diff --git a/frontend/src/hooks/contracts/useBadgeForm.js b/frontend/src/hooks/contracts/useBadgeForm.js deleted file mode 100644 index 6642f4f..0000000 --- a/frontend/src/hooks/contracts/useBadgeForm.js +++ /dev/null @@ -1,87 +0,0 @@ -import { useMemo, useState } from "react"; -import { useParams } from "react-router-dom"; - -import { usePrepareContractWrite, useContractWrite } from "wagmi" - -import { getBadgerOrganizationAbi, useFees, useUser } from "@hooks"; - -const getBadgeFormTxArgs = ({ data, functionName }) => { - if (functionName === "setBadgeURI" && data.uriHash && data.token_id) - return [data.token_id, data.uriHash]; -} - -const useBadgeForm = ({ obj, functionName }) => { - const fees = useFees(); - - const { orgAddress } = useParams(); - - const { authenticatedAddress, chain } = useUser(); - - const [isLoading, setIsLoading] = useState(false); - const [isSuccess, setIsSuccess] = useState(false); - - const BadgerOrg = useMemo(() => { return getBadgerOrganizationAbi() }, []) - - const args = getBadgeFormTxArgs({ - data: obj, - functionName: functionName - }); - - const isReady = BadgerOrg && fees && authenticatedAddress && !!args; - - const overrides = { gasPrice: fees?.gasPrice }; - - const { config, isSuccess: isPrepared } = usePrepareContractWrite({ - enabled: isReady, - addressOrName: orgAddress, - contractInterface: BadgerOrg.abi, - functionName, - chainId: chain.id, - args, - overrides, - onError: (e) => { - const err = e?.error?.message || e?.data?.message || e - throw new Error(err); - } - }); - - const { writeAsync } = useContractWrite(config); - - const openBadgeFormTransaction = async ({ - onError = (e) => { console.error(e) }, - onLoading = () => { }, - onSuccess = ({ config, chain, tx, receipt }) => { } - }) => { - try { - setIsLoading(true); - setIsSuccess(false); - onLoading(); - - const tx = await writeAsync(); - - const receipt = await tx.wait(); - - if (receipt.status === 0) throw new Error("Error submitting transaction"); - - receipt.events = receipt.logs.filter((log) => log.address === orgAddress).map((log) => BadgerOrg.abi.parseLog(log)) - - setIsLoading(false) - setIsSuccess(true) - - onSuccess({ config, chain, tx, receipt }) - } catch (e) { - onError(e); - } - } - - return { openBadgeFormTransaction, isPrepared, isLoading, isSuccess } -} - -const useBadge = ({ obj, image, functionName }) => { - -} - -export { - useBadgeForm, - useBadge -} \ No newline at end of file diff --git a/frontend/src/hooks/contracts/useContracts.js b/frontend/src/hooks/contracts/useContracts.js index d4470d6..1b6c884 100644 --- a/frontend/src/hooks/contracts/useContracts.js +++ b/frontend/src/hooks/contracts/useContracts.js @@ -1,111 +1,243 @@ import { useMemo, useState } from "react"; - import { usePrepareContractWrite, useContractWrite } from "wagmi" +import { ethers } from "ethers"; -import { +import { + getPrimaryImplementation, getBadgerOrganizationAbi, getBadgerAbi, - useFees, - useUser -} from "@hooks"; +} from "./contractVersions"; +import useFees from "@hooks/useFees"; -import { IPFS_GATEWAY_URL } from "@static"; +import { IPFS_GATEWAY_URL } from "@static/constants/links"; -const getOrgFormTxArgs = ({ functionName, authenticatedAddress, name, symbol, imageHash, contractHash }) => { - if (functionName === "setOrganizationURI") { - return [IPFS_GATEWAY_URL + contractHash] - } else if (functionName === "createOrganization") { - const organizationStruct = { - deployer: authenticatedAddress, - uri: IPFS_GATEWAY_URL + imageHash, - organizationURI: IPFS_GATEWAY_URL + contractHash, - name, - symbol - } +// Creates a new sash contract for an organization. +export const useCreateOrg = (isTxReady, orgObj, imageHash, contractHash, address, chainName) => { + const Badger = useMemo(() => getBadgerAbi(chainName), [chainName]); + const [ error, setError ] = useState(); - return [organizationStruct] - } -} - -const useOrgForm = ({ obj }) => { + const args = [ + getPrimaryImplementation(), + address, + IPFS_GATEWAY_URL + imageHash, + IPFS_GATEWAY_URL + contractHash, + orgObj.name, + orgObj.symbol, + ] + const fees = useFees(); - - const { authenticatedAddress, chain } = useUser(); - - const [isLoading, setIsLoading] = useState(false); - const [isSuccess, setIsSuccess] = useState(false); - - const functionName = obj.ethereum_address ? "setOrganizationURI" : "createOrganization"; - - const Badger = useMemo(() => { - if (obj.ethereum_address) return getBadgerOrganizationAbi(); - - return getBadgerAbi(chain.id); - }, [functionName, chain.id]); - - const isReady = Badger && fees && !!authenticatedAddress; - - const args = getOrgFormTxArgs({ - functionName, - authenticatedAddress, - name: obj.name, - symbol: obj.symbol, - imageHash: obj.imageHash, - contractHash: obj.contractHash - }); - - const overrides = { gasPrice: fees?.gasPrice }; - - const { config, isSuccess: isPrepared } = usePrepareContractWrite({ - enabled: isReady, - addressOrName: obj.ethereum_address || Badger.address, + const { config, isSuccess } = usePrepareContractWrite({ + addressOrName: Badger.address, contractInterface: Badger.abi, - functionName, - args, - overrides, - onError: (e) => { + functionName: "createOrganization", + args: args, + enabled: Boolean(fees && isTxReady), + overrides: { + gasPrice: fees?.gasPrice, + }, + onError(e) { const err = e?.error?.message || e?.data?.message || e - - throw new Error(err); + setError(err); + console.error('Error creating Org: ', err); } }) const { writeAsync } = useContractWrite(config); - const openOrgFormTx = async ({ - onError = (e) => { console.error(e) }, - onLoading = () => { }, - onSuccess = ({ config, chain, tx, receipt }) => { } - }) => { - try { - setIsLoading(true); - setIsSuccess(false); - onLoading() + return { write: writeAsync, isSuccess, error }; +} - const tx = await writeAsync() +// Edit the contract URI of an organization and update the image, description, and name. +export const useEditOrg = (isTxReady, contractAddress, contractUriHash) => { + const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); + const [ error, setError ] = useState(); - const receipt = await tx.wait() - - receipt.events = receipt.logs.filter((log) => log.address === Badger.address).map((log) => Badger.abi.parseLog(log)) - - setIsLoading(false); - setIsSuccess(true); - - onSuccess({ config, chain, tx, receipt }) - } catch (e) { - console.error(e); - - onError(e); + const args = [ + IPFS_GATEWAY_URL + contractUriHash + ] + + const fees = useFees(); + const { config, isSuccess } = usePrepareContractWrite({ + addressOrName: contractAddress, + contractInterface: BadgerOrganization.abi, + functionName: "setOrganizationURI", + args: args, + enabled: Boolean(fees && isTxReady), + overrides: { + gasPrice: fees?.gasPrice, + }, + onError(e) { + const err = e?.error?.message || e?.data?.message || e + setError(err); + console.error('Error updating Org: ', err); } - } + }) - return { openOrgFormTx, isPrepared, isLoading, isSuccess }; + const { writeAsync } = useContractWrite(config); + + return { write: writeAsync, isSuccess, error }; +} + +// Creates a badge from a cloned sash contract. +export const useSetBadge = (isTxReady, contractAddress, tokenUri, badge) => { + const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); + const [ error, setError ] = useState(); + + let badgeObj = badge + + // This should also clean/check the addresses as well. + badgeObj?.delegates?.forEach((delegate, index) => { + if (typeof delegate === "object") + badgeObj.delegates[index] = delegate.ethereum_address + if (delegate === "") + badgeObj.delegates.pop(index) + }) + + const args = [ + badgeObj.token_id, + badgeObj.claimable, + badgeObj.account_bound, + badgeObj.signer || contractAddress, // Cannot have an empty string so we use the org as signer + tokenUri || "0x", + badgeObj.payment_token || [ethers.constants.HashZero, 0], + badgeObj.delegates || [], + ] + + const fees = useFees(); + const { config, isSuccess } = usePrepareContractWrite({ + addressOrName: contractAddress, + contractInterface: BadgerOrganization.abi, + functionName: "setBadge", + args: args, + enabled: Boolean(fees && isTxReady && tokenUri !== "0x"), + overrides: { + gasPrice: fees?.gasPrice, + }, + onError(e) { + const err = e?.error?.message || e?.data?.message || e + setError(err); + console.error('Error creating Badge: ', err); + } + }) + + const { writeAsync } = useContractWrite(config); + return { write: writeAsync, isSuccess, error }; +} + +// Determines which function to call based on if it is a revoke or a mint, +// if there are multiple badge ids, and if there are multiple holders. +export const useManageBadgeOwnership = (isTxReady, orgAddress, ids, users, action, amounts) => { + const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); + const [ error, setError ] = useState(); + + // Might look a little funky but cleaner than a switch IMO. + // If revoke is true, then we check if there is just one holder for a single revoke. + // If ids is a single id, then we call the revoke function with multiple holders. + // If ids is an array, then we call revoke with multiple different badges. + // If revoke is false, same checks but for minting instead of revoke + const revoke = action === "Revoke" ? true : false + const method = revoke ? + users.length === 1 ? "revoke" : + typeof(ids) === "number" ? "revokeBatch" : "revokeFullBatch" + : + users.length === 1 ? "leaderMint" : + typeof(ids) === "number" ? "leaderMintBatch" : "leaderMintFullBatch" + + // This should also clean/check the addresses as well. + users.forEach((user, index) => { + if (user === "") { + users.pop(index) + } + }) + + // TODO: Amounts will need to be changed to be an array for + // each badge. For now it's standard for just one. + amounts = Array(users.length).fill(amounts) + + if (users.length === 1) + users = users[0] + + const args = [ + users, + ids, + amounts, + ] + + // Contracts currently have bytes data if it's a mint only, not revoke. + if (!revoke) + args.push("0x") + + const fees = useFees(); + const { config, isSuccess } = usePrepareContractWrite({ + addressOrName: orgAddress, + contractInterface: BadgerOrganization.abi, + functionName: method, + args: args, + enabled: Boolean(fees && isTxReady), + overrides: { + gasPrice: fees?.gasPrice, + }, + onError(e) { + const err = e?.error?.message || e?.data?.message || e + setError(err); + console.error('Error managing badge ownership: ', err); + } + }) + + const { writeAsync } = useContractWrite(config); + + return { write: writeAsync, isSuccess, error }; +} + +// Changes delegates of badge(s) with id(s) from orgAddress. +// If revoke is true then delegates are removed. +export const useSetDelegates = (isTxReady, orgAddress, ids, delegates, action) => { + const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); + const [ error, setError ] = useState(); + + const revoke = action === "Remove Manager" ? true : false + const isDelegateArray = Array(delegates.length).fill(!revoke); + const method = typeof(ids) === "number" ? "setDelegates" : "setDelegatesBatch"; + + // This should also clean/check the addresses as well. + delegates.forEach((delegate, index) => { + if (delegate === "") { + delegates.pop(index) + } + }) + + const args = [ + ids, + delegates, + isDelegateArray, + ] + + const fees = useFees(); + const { config, isSuccess } = usePrepareContractWrite({ + addressOrName: orgAddress, + contractInterface: BadgerOrganization.abi, + functionName: method, + args: args, + enabled: Boolean(fees && isTxReady), + overrides: { + gasPrice: fees?.gasPrice, + }, + onError(e) { + const err = e?.error?.message || e?.data?.message || e + setError(err); + console.error('Error setting delegates: ', err); + } + }) + + const { writeAsync } = useContractWrite(config); + + return { write: writeAsync, isSuccess, error }; } // Transfer the ownership of an organization to a new address. -const useTransferOwnership = (isTxReady, orgAddress, newOwner) => { +export const useTransferOwnership = (isTxReady, orgAddress, newOwner) => { const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); - const [error, setError] = useState(); + const [ error, setError ] = useState(); const args = [ newOwner, @@ -135,9 +267,9 @@ const useTransferOwnership = (isTxReady, orgAddress, newOwner) => { // Transfer the ownership of a badge to a new address. // TODO: This should be changed to support the intended functionality of withdrawing all assets from the org. -const useRenounceOwnership = (isTxReady, orgAddress) => { +export const useRenounceOwnership = (isTxReady, orgAddress) => { const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); - const [error, setError] = useState(); + const [ error, setError ] = useState(); const fees = useFees(); const { config, isSuccess } = usePrepareContractWrite({ @@ -159,10 +291,4 @@ const useRenounceOwnership = (isTxReady, orgAddress) => { const { writeAsync } = useContractWrite(config); return { write: writeAsync, isSuccess, error }; -} - -export { - useOrgForm, - useTransferOwnership, - useRenounceOwnership } \ No newline at end of file diff --git a/frontend/src/hooks/contracts/useManageHolders.js b/frontend/src/hooks/contracts/useManageHolders.js deleted file mode 100644 index cfb8a6e..0000000 --- a/frontend/src/hooks/contracts/useManageHolders.js +++ /dev/null @@ -1,209 +0,0 @@ -import { useMemo, useState } from "react"; -import { useParams } from "react-router-dom"; - -import { usePrepareContractWrite, useContractWrite } from "wagmi" - -import { getBadgerOrganizationAbi, useFees, useUser } from "@hooks"; - -const getManageHolderArgs = ({ data, functionName }) => { - if (functionName === "mint") - return [data.addresses[0], data.tokenId, data.amounts[0], "0x"]; - if (functionName === "mintBatch") - return [data.addresses, data.tokenId, data.amounts, "0x"]; - if (functionName === "revoke") - return [data.addresses, data.tokenId, data.amount]; - if (functionName === "revokeBatch") - return [data.addresses, data.tokenId, data.amounts]; -} - -const useManageHolders = ({ obj, functionName }) => { - const fees = useFees(); - - const { orgAddress } = useParams(); - - const { authenticatedAddress, chain } = useUser(); - - const [isLoading, setIsLoading] = useState(false); - const [isSuccess, setIsSuccess] = useState(false); - - const BadgerOrg = useMemo(() => { return getBadgerOrganizationAbi() }, []) - - const isReady = BadgerOrg && fees && authenticatedAddress; - const isInputValid = obj.addresses.length > 0 && obj.addresses.length === obj.amounts.length; - - functionName = obj.addresses.length > 1 ? functionName + "Batch" : functionName; - - const args = getManageHolderArgs({ - data: { - amounts: obj.amounts, - addresses: obj.addresses, - tokenId: obj.tokenId - }, - functionName: functionName - }); - - const overrides = { gasPrice: fees?.gasPrice }; - - const { config, isSuccess: isPrepared } = usePrepareContractWrite({ - enabled: isReady && isInputValid, - addressOrName: orgAddress, - contractInterface: BadgerOrg.abi, - functionName, - chainId: chain.id, - args, - overrides, - onError: (e) => { - const err = e?.error?.message || e?.data?.message || e - throw new Error(err); - } - }); - - const { writeAsync } = useContractWrite(config); - - const openHolderTransaction = async ({ - onError = (e) => { console.error(e) }, - onLoading = () => { }, - onSuccess = ({ config, chain, tx, receipt }) => { } - }) => { - try { - setIsLoading(true); - setIsSuccess(false); - onLoading(); - - const tx = await writeAsync(); - - const receipt = await tx.wait(); - - if (receipt.status === 0) throw new Error("Error submitting transaction"); - - receipt.events = receipt.logs.filter((log) => log.address === orgAddress).map((log) => BadgerOrg.abi.parseLog(log)) - - setIsLoading(false) - setIsSuccess(true) - - onSuccess({ config, chain, tx, receipt }) - } catch (e) { - console.error('e', e) - - onError(e); - } - } - - return { openHolderTransaction, isPrepared, isLoading, isSuccess } -} - -// Changes delegates of badge(s) with id(s) from orgAddress. -// If revoke is true then delegates are removed. -const useSetDelegates = (isTxReady, orgAddress, ids, delegates, action) => { - const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); - const [error, setError] = useState(); - - const revoke = action === "Remove Manager" ? true : false - const isDelegateArray = Array(delegates.length).fill(!revoke); - const functionName = typeof (ids) === "number" ? "setDelegates" : "setDelegatesBatch"; - - // This should also clean/check the addresses as well. - delegates.forEach((delegate, index) => { - if (delegate === "") { - delegates.pop(index) - } - }) - - const args = [ - ids, - delegates, - isDelegateArray, - ] - - const fees = useFees(); - const { config, isSuccess } = usePrepareContractWrite({ - addressOrName: orgAddress, - contractInterface: BadgerOrganization.abi, - functionName: functionName, - args: args, - enabled: Boolean(fees && isTxReady), - overrides: { - gasPrice: fees?.gasPrice, - }, - onError(e) { - const err = e?.error?.message || e?.data?.message || e - setError(err); - console.error('Error setting delegates: ', err); - } - }) - - const { writeAsync } = useContractWrite(config); - - return { write: writeAsync, isSuccess, error }; -} - -// Determines which function to call based on if it is a revoke or a mint, -// if there are multiple badge ids, and if there are multiple holders. -const useManageBadgeOwnership = (isTxReady, orgAddress, ids, users, action, amounts) => { - const BadgerOrganization = useMemo(() => getBadgerOrganizationAbi(), []); - const [error, setError] = useState(); - - // Might look a little funky but cleaner than a switch IMO. - // If revoke is true, then we check if there is just one holder for a single revoke. - // If ids is a single id, then we call the revoke function with multiple holders. - // If ids is an array, then we call revoke with multiple different badges. - // If revoke is false, same checks but for minting instead of revoke - const revoke = action === "Revoke" ? true : false - const functionName = revoke ? - users.length === 1 ? "revoke" : - typeof (ids) === "number" ? "revokeBatch" : "revokeFullBatch" - : - users.length === 1 ? "leaderMint" : - typeof (ids) === "number" ? "leaderMintBatch" : "leaderMintFullBatch" - - // This should also clean/check the addresses as well. - users.forEach((user, index) => { - if (user === "") { - users.pop(index) - } - }) - - // TODO: Amounts will need to be changed to be an array for - // each badge. For now it's standard for just one. - amounts = Array(users.length).fill(amounts) - - if (users.length === 1) - users = users[0] - - const args = [ - users, - ids, - amounts, - ] - - // Contracts currently have bytes data if it's a mint only, not revoke. - if (!revoke) - args.push("0x") - - const fees = useFees(); - const { config, isSuccess } = usePrepareContractWrite({ - addressOrName: orgAddress, - contractInterface: BadgerOrganization.abi, - functionName: functionName, - args: args, - enabled: Boolean(fees && isTxReady), - overrides: { - gasPrice: fees?.gasPrice, - }, - onError(e) { - const err = e?.error?.message || e?.data?.message || e - setError(err); - console.error('Error managing badge ownership: ', err); - } - }) - - const { writeAsync } = useContractWrite(config); - - return { write: writeAsync, isSuccess, error }; -} - -export { - useManageHolders, - useSetDelegates, - useManageBadgeOwnership -} \ No newline at end of file diff --git a/frontend/src/hooks/index.js b/frontend/src/hooks/index.js deleted file mode 100644 index f4fab58..0000000 --- a/frontend/src/hooks/index.js +++ /dev/null @@ -1,25 +0,0 @@ -export { - getBadgerAddress, - getBadgerOrganizationAbi, - getBadgerAbi, - useOrgForm, - useBadgeForm, - useManageHolders, - useManageBadgeOwnership, - useSetDelegates, - useTransferOwnership, - useRenounceOwnership -} from './contracts'; - -export { useAuthentication } from './useAuthentication'; -export { useAuthenticationModal } from './useAuthenticationModal'; -export { getAverageColor, handleImageLoad } from './useColor'; -export { useENSProfile } from './useENSProfile'; -export { useFees } from './useFees'; -export { useIPFS, useIPFSImageHash, useIPFSMetadataHash } from './useIPFS'; -export { useLogout } from './useLogout'; -export { usePFP } from './usePFP'; -export { useSocket } from './useSocket'; -export { useStories, useStory } from './useStories'; -export { useUser } from './useUser'; -export { useBadgeArt } from './useBadgeArt'; \ No newline at end of file diff --git a/frontend/src/hooks/useAuthentication.js b/frontend/src/hooks/useAuthentication.js deleted file mode 100644 index e4522a5..0000000 --- a/frontend/src/hooks/useAuthentication.js +++ /dev/null @@ -1,11 +0,0 @@ -import { useContext } from 'react'; - -import { AuthenticationContext } from '@contexts'; - -const useAuthentication = () => { - const { authenticatedAddress, isAuthenticating, isAuthenticated, primaryChain, isWrongNetwork } = useContext(AuthenticationContext); - - return { authenticatedAddress, isAuthenticating, isAuthenticated, primaryChain, isWrongNetwork }; -} - -export { useAuthentication } \ No newline at end of file diff --git a/frontend/src/hooks/useAuthenticationModal.js b/frontend/src/hooks/useAuthenticationModal.js deleted file mode 100644 index b9a1420..0000000 --- a/frontend/src/hooks/useAuthenticationModal.js +++ /dev/null @@ -1,50 +0,0 @@ -import { useContext } from "react"; -import { useNetwork, useSigner } from "wagmi"; - -import { AuthenticationContext } from "@contexts"; - -import { getAuthentication, getAuthenticationMessage } from "@utils"; - -const useAuthenticationModal = () => { - const { chain } = useNetwork(); - const { data: signer } = useSigner(); - - const { setIsAuthenticating, setAuthenticatedAddress } = useContext(AuthenticationContext); - - const openAuthenticationModal = ({ - onAuthenticating = () => { }, - onAuthenticated = () => { }, - onError = (e) => { console.error(e) }, - onSettled = () => { }, - }) => { - const tryAuthentication = async ({ chainId, signer }) => { - const { message } = await getAuthenticationMessage(signer._address, chainId); - - const signature = await signer.signMessage(message.prepareMessage()); - - const response = await getAuthentication(signer._address, message, signature); - - if (!response.success) return - - setAuthenticatedAddress(signer._address); - }; - - if (!signer || !chain) return; - - try { - setIsAuthenticating(true) && onAuthenticating(); - - const args = { chainId: chain.id, signer } - - tryAuthentication({ ...args }) && onAuthenticated({ ...args }); - } catch (error) { - onError(error) - } finally { - setIsAuthenticating(false) && onSettled(); - } - } - - return { openAuthenticationModal } -} - -export { useAuthenticationModal } \ No newline at end of file diff --git a/frontend/src/hooks/useBadgeArt.js b/frontend/src/hooks/useBadgeArt.js deleted file mode 100644 index 6793ba5..0000000 --- a/frontend/src/hooks/useBadgeArt.js +++ /dev/null @@ -1,28 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { getBadgeImage } from '@utils'; - -const useBadgeArt = ({ organization, name }) => { - const [badgeArt, setBadgeArt] = useState(null); - - useEffect(() => { - async function getImage() { - const image = await getBadgeImage( - organization.name, - organization.ethereum_address, - organization.badges.length, - name - ); - - setBadgeArt(image); - } - - if (!name || !organization) return - - getImage(); - }, [name, organization]); - - return { badgeArt }; -} - -export { useBadgeArt }; \ No newline at end of file diff --git a/frontend/src/hooks/useColor.js b/frontend/src/hooks/useColor.js index 4829cd0..d16cbbf 100644 --- a/frontend/src/hooks/useColor.js +++ b/frontend/src/hooks/useColor.js @@ -35,31 +35,25 @@ const handleImageLoad = (el) => { const average = getAverageColor(el); // Get an item up in the dom tree - const card = el.parentNode.parentNode.parentNode; + const parent = el.parentNode.parentNode.parentNode.parentNode; + const image = parent.querySelector('.home__card__image'); if (el.offsetWidth === 0) return; - const multiplier = 1.75; - - const r = average.r * multiplier; - const g = average.g * multiplier; - const b = average.b * multiplier; - // Set the background color of the parent - card.style.backgroundColor = `rgb(${r}, ${g}, ${b})`; + image.style.backgroundColor = `rgb(${average.r}, ${average.g}, ${average.b})`; // Determine if we should use black or white text - const brightness = Math.round(( - (parseInt(r) * 299) + - (parseInt(g) * 587) + - (parseInt(b) * 114) - ) / 1000); + const brightness = Math.round(((parseInt(average.r) * 299) + + (parseInt(average.g) * 587) + + (parseInt(average.b) * 114)) / 1000); + + const card = image.parentNode; if (brightness > 125) card.style.color = "black"; else card.style.color = "white"; } export { - getAverageColor, handleImageLoad } diff --git a/frontend/src/hooks/useENSProfile.js b/frontend/src/hooks/useEnsProfile.js similarity index 66% rename from frontend/src/hooks/useENSProfile.js rename to frontend/src/hooks/useEnsProfile.js index 65e7f7d..af4cd0b 100644 --- a/frontend/src/hooks/useENSProfile.js +++ b/frontend/src/hooks/useEnsProfile.js @@ -1,25 +1,23 @@ import { useState, useMemo, useEffect } from "react"; import { ethers } from "ethers"; - -import { getPFPImage } from "@utils"; +import { getPFPImage } from "@utils/api_requests"; +import { getRandomEmoji } from "@static/constants/constants"; const ALCHEMY_API_KEY = process.env.REACT_APP_ALCHEMY_API_KEY; -const useENSProfile = (address) => { - const [ensName, setEnsName] = useState(null); - const [ensAvatar, setEnsAvatar] = useState(null); - const [isFetched, setIsFetched] = useState(false); - +export const useEnsProfile = (address) => { + const [ ensName, setEnsName ] = useState(null); + const [ ensAvatar, setEnsAvatar ] = useState(null); + const [ isFetched, setIsFetched ] = useState(false); const provider = useMemo(() => { return new ethers.providers.AlchemyProvider("homestead", ALCHEMY_API_KEY); }, []); useEffect(() => { const getGeneratedAvatar = async (address) => { - // Emojis no longer supported by the api, so what do we use for personal pfps instead? - const firstChar = ensName ? ensName.charAt(0).toUpperCase() : 'x'; - const response = await getPFPImage(firstChar, address); - + const seed = getRandomEmoji(address); + const response = await getPFPImage(seed, address); + if (response.error) return; return URL.createObjectURL(response); } @@ -32,10 +30,10 @@ const useENSProfile = (address) => { setEnsName(name) if (name) avatar = await provider.getAvatar(name); - + if (!avatar) avatar = await getGeneratedAvatar(address); - + setEnsAvatar(avatar); setIsFetched(true) } @@ -44,6 +42,4 @@ const useENSProfile = (address) => { }, [address, provider]) return { ensName, ensAvatar, isFetched } -} - -export { useENSProfile } \ No newline at end of file +} \ No newline at end of file diff --git a/frontend/src/hooks/useFees.js b/frontend/src/hooks/useFees.js index 48ece4b..35f44db 100644 --- a/frontend/src/hooks/useFees.js +++ b/frontend/src/hooks/useFees.js @@ -1,8 +1,11 @@ import { useEffect, useState } from "react"; -import { ethers } from "ethers"; import { useFeeData } from "wagmi"; +import { ethers } from "ethers"; -function useFees() { + +// Gets the fees if a transaction is ready and multiplies them by a multiplier +// to help the transaction underpriced errors commonly being had on polygon. +export default function useFees() { const [fees, setFees] = useState(null); const { data } = useFeeData({ watch: false, @@ -21,6 +24,4 @@ function useFees() { return fees; -} - -export { useFees } \ No newline at end of file +} \ No newline at end of file diff --git a/frontend/src/hooks/useIPFS.js b/frontend/src/hooks/useIPFS.js deleted file mode 100644 index b411337..0000000 --- a/frontend/src/hooks/useIPFS.js +++ /dev/null @@ -1,109 +0,0 @@ -import { useContext, useEffect, useState } from "react"; - -import { ErrorContext } from "@contexts"; - -import { postIPFSImage, postIPFSMetadata } from "@utils"; - -import { IPFS_GATEWAY_URL } from "@static" - -const Hash = require("ipfs-only-hash"); - -const useIPFS = ({ image, data }) => { - const { setError } = useContext(ErrorContext); - - const pinImage = async () => { - const response = await postIPFSImage(image); - - if (response?.error) { - setError({ - label: "Error uploading image to IPFS", - message: response.error - }) - - return; - } - - return response.hash; - } - - const pinMetadata = async () => { - const response = await postIPFSMetadata(data); - - if (response.error) { - setError({ - label: 'Error creating Org URI', - message: response.error - }); - return; - } - - return response.hash; - } - - return { pinImage, pinMetadata } -} - -const useIPFSImageHash = (imageFile) => { - const [hash, setHash] = useState(null); - - useEffect(() => { - async function getHash(image) { - const reader = new FileReader(); - - reader.onload = async () => { - var uint8Array = new Uint8Array(reader.result); - await Hash.of(uint8Array, { - cidVersion: 0, - onlyHash: true, - }) - .then((res) => { setHash(res); }) - .catch((err) => { console.error('Error with deterministic image hashing', err); }) - }; - - reader.readAsArrayBuffer(image); - } - - if (!imageFile) return; - - if (typeof imageFile === 'string') { - // If provided a string, it is treated as if it is hash. - // unless it's a file bytes - setHash(imageFile); - - return; - } - - getHash(imageFile); - }, [imageFile]) - - return { imageHash: hash, ipfsImage: imageFile }; -} - -const useIPFSMetadataHash = (data) => { - const [hash, setHash] = useState(null); - - useEffect(() => { - async function getHash() { - if (!data) return; - - const stringify = JSON.stringify({ ...data, image: IPFS_GATEWAY_URL + data.image }); - await Hash.of(stringify, { cidVersion: 0, onlyHash: true }) - .then((res) => { - setHash(res); - }) - .catch((err) => { - console.error('Error with deterministic metadata hashing', err); - }) - } - - getHash(); - }, [data]) - - return { metadataHash: hash, ipfsMetadata: data }; -} - -export { - useIPFS, - useIPFSImageHash, - useIPFSMetadataHash -} \ No newline at end of file diff --git a/frontend/src/hooks/useIpfsHash.js b/frontend/src/hooks/useIpfsHash.js new file mode 100644 index 0000000..79579d9 --- /dev/null +++ b/frontend/src/hooks/useIpfsHash.js @@ -0,0 +1,64 @@ +import { useState, useEffect } from "react"; +import { IPFS_GATEWAY_URL } from "@static/constants/links" + +const Hash = require("ipfs-only-hash"); + +export const useIPFSMetadataHash = (data) => { + const [ hash, setHash ] = useState(null); + + useEffect(() => { + async function getHash() { + if (!data) return; + + const stringify = JSON.stringify({ + ...data, + image: IPFS_GATEWAY_URL + data.image + }); + await Hash.of(stringify, { + cidVersion: 0, + onlyHash: true, + }) + .then((res) => { + setHash(res); + }) + .catch((err) => { + console.error('Error with deterministic metadata hashing', err); + }) + } + + getHash(); + }, [data]) + + return { hash }; +} + +export const useIPFSImageHash = (imageFile) => { + const [ hash, setHash ] = useState(null); + + useEffect(() => { + async function getHash(image) { + if (!image) return; + + const reader = new FileReader(); + reader.onload = async () => { + var uint8Array = new Uint8Array(reader.result); + await Hash.of(uint8Array, { + cidVersion: 0, + onlyHash: true, + }) + .then((res) => { + setHash(res); + }) + .catch((err) => { + console.error('Error with deterministic image hashing', err); + }) + }; + + reader.readAsArrayBuffer(image); + } + + getHash(imageFile); + }, [imageFile]) + + return { hash }; +} \ No newline at end of file diff --git a/frontend/src/hooks/useLogout.js b/frontend/src/hooks/useLogout.js deleted file mode 100644 index 4a4a54f..0000000 --- a/frontend/src/hooks/useLogout.js +++ /dev/null @@ -1,24 +0,0 @@ -import { useContext } from 'react'; -import { useNavigate } from "react-router-dom"; - -import { AuthenticationContext } from '@contexts'; - -const useLogout = () => { - const navigate = useNavigate(); - - const { setAuthenticatedAddress } = useContext(AuthenticationContext); - - const logout = () => { - // TODO: Reenable this once the websocket is prevented from trying to reconnect when not enabled - // document.cookie = 'csrftoken=; Path=/; Expires=Sat, 01 Jan 2000 00:00:001 GMT;'; - - document.cookie = 'sessionid=; Path=/; Expires=Sat, 01 Jan 2000 00:00:001 GMT;'; - document.cookie = 'authenticatedAddress=; Path=/; Expires=Sat, 01 Jan 2000 00:00:001 GMT;'; - setAuthenticatedAddress(null); - navigate("/dashboard/") - } - - return { logout } -} - -export { useLogout } \ No newline at end of file diff --git a/frontend/src/hooks/usePFP.js b/frontend/src/hooks/usePFP.js deleted file mode 100644 index 1b33ef5..0000000 --- a/frontend/src/hooks/usePFP.js +++ /dev/null @@ -1,24 +0,0 @@ -import { useEffect, useState } from 'react'; - -import { getPFPImage } from '@utils'; - -const usePFP = ({ name, address }) => { - const [characterPFP, setCharacterPFP] = useState(' '); - - const formattedName = name.charAt(0).toUpperCase(); - - useEffect(() => { - async function getImage() { - const image = await getPFPImage(formattedName, address); - - setCharacterPFP(image); - } - - if (!formattedName || !address) return - getImage(); - }, [formattedName, address]); - - return { characterPFP }; -} - -export { usePFP }; \ No newline at end of file diff --git a/frontend/src/hooks/useSocket.js b/frontend/src/hooks/useSocket.js deleted file mode 100644 index ff9bb77..0000000 --- a/frontend/src/hooks/useSocket.js +++ /dev/null @@ -1,100 +0,0 @@ -import { useEffect, useMemo, useState } from 'react'; - -import ReconnectingWebSocket from 'reconnecting-websocket'; - -import { useLogout } from "@hooks"; - -const useSocket = ({ enabled, url }) => { - const { logout } = useLogout(); - - const [connected, setConnected] = useState(false); - const [objects, setObjects] = useState(null); - - const client = useMemo(() => { - if (!enabled) return null; - - return new ReconnectingWebSocket(url); - }, [enabled, url]); - - const callbacks = useMemo(() => ({}), []); - - const send = async (message, callback) => { - if (client.readyState === client.OPEN) { - const requestId = JSON.parse(message).request_id; - - callbacks[requestId] = callback; - - client.send(message); - } - }; - - const handleCallback = (message) => { - const data = JSON.parse(message.data.toString()); - - if (data.request_id in callbacks) { - callbacks[data.request_id](message); - delete callbacks[data.request_id]; - - return true; - } - } - - const handleAction = (message) => { - const data = JSON.parse(message.data.toString()); - - if (data.data === null) return; - - if (data.action === 'disconnected') { - console.error('Disconnected from server', data) - - setConnected(false); - - if (data.message === 'You must be logged in to connect.') logout(); - } else if (data.action === 'connected') { - setConnected(true); - } else if (data.action === 'list') { - setObjects(data.data); - } else if (data.action === 'update') { - setObjects(objects => objects.map(object => object.id === data.data.id ? data.data : object)); - } else if (data.action === 'create') { - setObjects(objects => [...objects, data.data]); - } else if (data.action === 'delete') { - setObjects(objects => { - const index = objects.findIndex(object => object.id === data.data.id); - objects.splice(index, 1); - - return objects; - }); - } else if (data.action === 'retrieve') { - setObjects([data.data]); - } else { - console.log('Unknown action', data); - } - } - - useEffect(() => { - if (!enabled) return; - - client.onopen = () => { - client.send(JSON.stringify({ - action: 'list', - request_id: new Date().getTime() - })); - }; - - client.onmessage = (message) => { - const called = handleCallback(message); - if (called) return - - handleAction(message); - } - }, [enabled]); - - return { - connected, - data: objects, - send - } -} - -export { useSocket } \ No newline at end of file diff --git a/frontend/src/hooks/useStories.js b/frontend/src/hooks/useStories.js deleted file mode 100644 index ad55182..0000000 --- a/frontend/src/hooks/useStories.js +++ /dev/null @@ -1,81 +0,0 @@ -import { useState, useEffect } from "react"; - -const req = require.context("../../stories", true, /\.md$/); - -const processContents = (files, contents) => { - return files.map((file, index) => { - const parsedContents = contents[index].split("---"); - const attributes = parsedContents[0].split("\n"); - const attributesObject = {}; - - attributes.forEach((attribute) => { - const [key, value] = attribute.split(": "); - - if (key && value) { - attributesObject[key.trim()] = value.trim(); - } - }); - - const content = parsedContents[1]; - - return { - filename: file.filename, - attributes: attributesObject, - content, - }; - }); -}; - -export const useStories = () => { - const [stories, setStories] = useState(null); - - useEffect(() => { - const fetchStories = async () => { - const files = req.keys().map((filename) => { - const file = req(filename); - filename = filename - .replace("./", "") - .replace(".md", ""); - - return { filename, file } - }); - - Promise.all(files.map(async (file) => { - return fetch(file.file).then((response) => response.text()); - })) - .then((contents) => { - const processedStories = processContents(files, contents); - setStories(processedStories) - }); - } - - fetchStories(); - }, []); - - return { stories }; -} - -export const useStory = (filename) => { - const [story, setStory] = useState(null); - - useEffect(() => { - const fetchStory = async () => { - const req = require.context("../../stories", true, /\.md$/); - - // Get the file - const file = req(`./${filename}.md`); - - // Get the content of the file - const paper = await fetch(file).then((response) => response.text()); - - setStory({ - ...processContents([file], [paper])[0], - filename - }) - } - - fetchStory(); - }, []) - - return { story }; -} \ No newline at end of file diff --git a/frontend/src/hooks/useUser.js b/frontend/src/hooks/useUser.js deleted file mode 100644 index a6449a6..0000000 --- a/frontend/src/hooks/useUser.js +++ /dev/null @@ -1,45 +0,0 @@ -import { useContext } from "react"; -import { useAccount, useNetwork } from "wagmi"; - -import { AuthenticationContext, BadgeContext, OrgContext, UserContext } from "@contexts"; - -const useUser = (props) => { - const { chainId = null, orgAddress = null, badgeId = null } = props || {}; - - const { isConnected } = useAccount(); - - const { chain } = useNetwork(); - - const { authenticatedAddress, isAuthenticated, isAuthenticating, isWrongNetwork, primaryChain } = useContext(AuthenticationContext); - const { organizations } = useContext(OrgContext); - const { badges } = useContext(BadgeContext); - const { isLoaded } = useContext(UserContext); - - const isOrganizationReady = organizations && chainId && orgAddress && organizations.length > 0; - - const organization = isOrganizationReady && organizations.find((org) => org.chain_id === parseInt(chainId) && org.ethereum_address === orgAddress); - const organizationBadges = organization && organization.badges; - - // TODO: make the badges use the dataset from the socket - const badge = organization && badgeId && organization.badges.find((badge) => String(badge.id) === badgeId); - - const isOwner = organization && organization.owner.ethereum_address === authenticatedAddress; - - return { - chain, - primaryChain, - authenticatedAddress, - organizations, - organization, - badges: orgAddress ? organizationBadges : badges, - badge, - isConnected, - isAuthenticated, - isAuthenticating, - isLoaded, - isOwner, - isWrongNetwork - } -} - -export { useUser } \ No newline at end of file diff --git a/frontend/src/style/index.css b/frontend/src/index.css similarity index 100% rename from frontend/src/style/index.css rename to frontend/src/index.css diff --git a/frontend/src/index.js b/frontend/src/index.js index 52bc111..0486daf 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -6,7 +6,7 @@ import { HelmetProvider } from 'react-helmet-async'; import App from './App'; -import '@style/index.css'; +import './index.css'; const root = ReactDOM.createRoot(document.getElementById('root')); diff --git a/frontend/src/pages/Badge/Badge.js b/frontend/src/pages/Badge/Badge.js deleted file mode 100644 index 4dc1f68..0000000 --- a/frontend/src/pages/Badge/Badge.js +++ /dev/null @@ -1,89 +0,0 @@ -import { useState } from "react"; -import { useNavigate, useParams } from "react-router-dom"; - -import { ActionTitle, BadgeManagementDrawer, BadgePreview, Header, HolderTable, Empty, SEO } from "@components"; - -import { useUser } from "@hooks"; - -import { badgeDrawerSelectActions as selectActions } from "@static"; - -import "@style/pages/Badge.css"; - -// TODO: Make sure that empty is all good - -const Badge = () => { - const navigate = useNavigate(); - - const { chainId, orgAddress, badgeId } = useParams(); - - const { authenticatedAddress, organization, badge } = useUser({ chainId, orgAddress, badgeId }); - - const [drawer, setDrawer] = useState({ - collapsed: true, - action: "Mint" - }); - - const isManager = organization && badge && ( - organization.owner.ethereum_address === authenticatedAddress || - badge.delegates.find(delegate => delegate.ethereum_address === authenticatedAddress) - ); - - const headerActions = [{ - text: "Settings", - icon: ["fal", "fa-gear"], - event: () => navigate(`/dashboard/organization/${chainId}/${orgAddress}/badge/${badgeId}/edit/`) - }] - - const titleActions = [{ - className: "home__action-button", - icon: ['fal', 'fa-user'], - text: "Update holders", - onClick: () => { - setDrawer({ - collapsed: selectActions.slice(0, 2).includes(drawer.action) ? !drawer.collapsed : false, - action: "Mint" - }) - } - }, - { - className: "home__action-button", - icon: ['fal', 'fa-people-roof'], - text: "Update managers", - onClick: () => { - setDrawer({ - collapsed: selectActions.slice(2, 4).includes(drawer.action) ? !drawer.collapsed : false, - action: "Add Manager" - }) - } - }] - - return ( - <> - - -
- navigate(`/dashboard/organization/${chainId}/${orgAddress}/`)} - actions={isManager && headerActions} /> - - - -
- - - {isManager && } -
- - {badge && badge.users.length + badge.delegates.length === 0 && } - - {badge && badge.users.length > 0 && } - - ) -} - -export { Badge } \ No newline at end of file diff --git a/frontend/src/pages/Badge/BadgeForm.js b/frontend/src/pages/Badge/BadgeForm.js deleted file mode 100644 index 133bce1..0000000 --- a/frontend/src/pages/Badge/BadgeForm.js +++ /dev/null @@ -1,198 +0,0 @@ -import { useState, useRef } from "react"; -import { useNavigate, useParams } from "react-router-dom"; - -// import BadgeDangerZone from "@components/Badge/BadgeDangerZone"; - -import { - useUser, - useBadgeForm, - useIPFS, - useIPFSImageHash, - useIPFSMetadataHash, - useBadgeArt -} from "@hooks"; - -import { - FormActionBar, - FormDrawer, - initialBadgeForm, - Input, - Header, - ImageLoader -} from "@components"; - -import { IPFS_GATEWAY_URL } from "@static"; - -import "@style/pages/BadgeForm.css"; - -const BadgeForm = ({ isEdit = false }) => { - const imageInput = useRef(); - - const navigate = useNavigate(); - - const { chainId, orgAddress, badgeId } = useParams(); - - const { organization, badge } = useUser({ chainId, orgAddress, badgeId }); - - const [ obj, setObj ] = useState(badge || initialBadgeForm); - const [ image, setImage ] = useState(null); - - const { badgeArt } = useBadgeArt({organization: organization, name: obj.name}) - - const activeImage = image || obj.image_hash || badgeArt; - - /// Prioritizes an uploaded image, then the ipfs gateway image, then the generated image - const activeImageURL = image ? URL.createObjectURL(image) : - obj.image_hash ? IPFS_GATEWAY_URL + obj.image_hash : - badgeArt ? URL.createObjectURL(badgeArt) : null; - - const isDisabled = !(obj.name && obj.description && activeImageURL); - - const tokenId = obj.token_id || organization.badges.length - - const { imageHash, ipfsImage } = useIPFSImageHash(activeImage); - - const { metadataHash, ipfsMetadata } = useIPFSMetadataHash({ - name: obj.name, - description: obj.description, - image: imageHash, - attributes: obj.attributes - }) - - const transactionParams = { - ...obj, - imageHash: imageHash, - uriHash: metadataHash, - token_id: tokenId - } - - const { - openBadgeFormTransaction, - isPrepared, - isLoading - } = useBadgeForm({ obj: transactionParams, functionName: "setBadgeURI" }); - - const { pinImage, pinMetadata } = useIPFS({ - image: ipfsImage, - data: ipfsMetadata - }) - - const actions = [{ - text: isEdit ? "Update badge" : "Create badge", - icon: ["fal", "arrow-right"], - disabled: isDisabled || !isPrepared, - loading: isLoading, - event: () => openBadgeFormTransaction({ - onLoading: () => { - pinImage(); - pinMetadata(); - }, - onSuccess: async({ chain, receipt }) => { - const event = receipt.events.find((event) => event.name === "URI"); - - if (!event) throw new Error("Error submitting transaction."); - - navigate(`/dashboard/organization/${chainId}/${orgAddress}/badge/${tokenId}/`); - } - }) - }] - - // Updates generative image and Name field - const onNameChange = async (event) => { - setObj({...obj, name: event.target.value }); - } - - const onDescriptionChange = (event) => { - setObj({...obj, description: event.target.value }); - } - - const onCustomImageChange = (file, uploaded) => { - const reader = new FileReader(); - - reader.readAsDataURL(file); - reader.onload = () => { - setImage(reader.result) - } - } - - return ( - <> -
navigate(`/dashboard/organization/${chainId}/${orgAddress}`)} /> - -

- {isEdit ? "Update Badge" : "Create Badge"} -

- - -
-
- - - -
-
- -
- -
-
-
-
- - - imageInput.current.click()} - style={{ width: "auto" }} - > - {image ? - "Change image" : - "Upload image" - } - - } - /> - onCustomImageChange(e.target.files[0], true)} - /> - - - - - ) -} - -export { BadgeForm }; \ No newline at end of file diff --git a/frontend/src/pages/Badge/index.js b/frontend/src/pages/Badge/index.js deleted file mode 100644 index f5e9899..0000000 --- a/frontend/src/pages/Badge/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { Badge } from './Badge'; -export { BadgeForm } from './BadgeForm'; diff --git a/frontend/src/pages/Dashboard/Dashboard.js b/frontend/src/pages/Dashboard/Dashboard.js deleted file mode 100644 index 97b8c22..0000000 --- a/frontend/src/pages/Dashboard/Dashboard.js +++ /dev/null @@ -1,63 +0,0 @@ -import { useState } from "react"; -import { Route, Routes } from "react-router-dom"; - -import { useUser } from "@hooks"; - -import { ActionBar, Dashboard as DashboardContent, Empty, SEO } from "@components"; - -import { Badge, BadgeForm, Home, Org, OrgForm } from "@pages"; - -import "@style/Dashboard/Dashboard.css"; - -const title = "Dashboard | Badger"; -const description = "Badger is a decentralized, open-source, and community-driven platform for creating, managing, and sharing onchain organizations and badges."; - -const Dashboard = () => { - const { isAuthenticated, isConnected, isLoaded, isWrongNetwork, primaryChain } = useUser(); - - return ( - <> - - -
-
- - - {!isConnected && } - - {isConnected && isWrongNetwork && } - - {isConnected && (!isAuthenticated && )} - - {isAuthenticated && !isLoaded && } - - {isAuthenticated && isLoaded && - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - - } -
-
- - ) -} - -export { Dashboard }; \ No newline at end of file diff --git a/frontend/src/pages/FAQ/FAQ.js b/frontend/src/pages/FAQ/FAQ.js deleted file mode 100644 index 0b87e2b..0000000 --- a/frontend/src/pages/FAQ/FAQ.js +++ /dev/null @@ -1,90 +0,0 @@ -import { Accordion, LandingHero, SEO } from "@components"; - -import "@style/pages/FAQ.css"; - -const title = "FAQ | Badger"; -const description = "Badger is a EVM-Based smart contract factory that deploys new instances of Organizations and Badges for personal use and management."; - -const FAQ = () => { - const faqs = [{ - title: "What is Badger built to solve?", - content: "Before Badger it was very difficult to have onchain access policies with network permissions. Badger lowers the barrier and empowers every individual with the ability to issue, manage and revoke onchain permissions in seconds for free without any coding.", - }, { - title: "Who is Badger for?", - content: "Badger was specifically designed for people like you. Avoiding the land of complexity, Badger is focused on bringing the power of Badges to every person while removing the technical barrier.", - }, { - title: "What can I use a Badge for?", - content: "With Badges, the capabilities are as wide as your imagination. You can use Badges as a form of reputation, access, targeting, etc. Once you have deployed Badges with Badger, your team can integrate with the leading solutions in Web3 management. Take a look at our [integration docs](https://flipside-crypto.gitbook.io/badger/help/integration-tutorials) to learn more.", - }, { - title: "How do I get started?", - content: "All you have to do is connect your wallet.", - }, { - title: "How does Badger work?", - content: "Badger is a EVM-Based smart contract factory that deploys new instances of Organizations and Badges using a decentralized proxy." - }, { - title: "Is there anything I need to do or pay for?", - content: "At this time, all Badger use is free and comes at no additional charge to the cost of gas." - }, { - title: "What blockchains are supported?", - content: "Currently only Polygon is supported. Badger goes where it is needed. Need the protocol running on another chain? Let us know." - }, { - title: "Why should I choose Badger instead of one of the other great options?", - content: "Badger is designed to be the simplest and most future-looking solution for every operator. Without the need of writing custom-coded solutions, every organization and operator can get to action in seconds. Standing in contrast to other solutions, while Badger is opinionated-by-default it is also highly customizable. Badger is built to be the most flexible solution for every operator enabling middle-out management." - }, { - title: "What type of tokens are the minted Badges?", - content: "Badger is built using ERC-1155 tokens designed to serve as credential badges." - }, { - title: "What collections are supported?", - content: "To use Badger, the collection must be Badger-compatible. It is recommended that all contract deployments be made through the official factory even when writing a custom solution." - }, { - title: "How does adopting Badger improve my organizations operations?", - content: "With the use of Badger, operators no longer have hire developers, create custom solutions, or rebuild the wheel. Badger allows every organization and operator to access the power of onchain Badges and permissions with ease." - }, { - title: "Are Badges soulbound?", - content: "That is up to you!" - }, { - title: "Can I use the Badges I have from another platform?", - content: "Unfortunately Badger does not have the ability to wrap existing tokens or collections. However, migration from a platform is straightforward. If you would like personal help please join our Discord and a team member can help you migrate in seconds." - }, { - title: "Is there a place I can find documentation for the Badger app?", - content: "Of course! You can find all documentation regarding the app and smart contract at: http://docs.trybadger.com -- If you have a question not answered here, reach out and a Badger team member will get you the answer." - }, { - title: "Are there any tutorials to guide me through?", - content: "Yes there are! You can find all the tutorial videos in our [Docs on GitBook](https://flipside-crypto.gitbook.io/badger/help/usage-tutorials)." - }, { - title: "Can I make my own frontend that users interact with Badger?", - content: "Absolutely you can! Badger was built with a primitive-first mindset meaning the use of the app is entirely optional and only offered as a form of assistance. All required pieces that allow Badger to function are handled at the contract level!" - }, { - title: "Can I charge someone for a Badge?", - content: "Yes you can! Badges can be gated behind the successful payment of any ERC20, ERC1155, or ERC721. A new user can deposit the asset into the Organization contract and gain the ability to claim the Badge." - }, { - title: "Will the Badger site update even if I use another app to run a transaction?", - content: "Yes it does! We are running an indexer that is constantly listening for Badger related transactions and updating our records accordingly. If any transactions are not facilitated through the Badger app, the indexer should still catch it within a couple minutes." - }, { - title: "Is Badger integrated with xyz?", - content: "Badger uses standards for a reason and is immediately interoperable with all DAO tools out of the box." - }, { - title: "Do Badges appear on marketplaces?", - content: "Yes! Badges are ERC-1155 compatible and every major marketplace will display your Badges." - }] - - return ( - <> - - -
- -
-

Have questions about how Badger is the onchain badging solution for you?

-
-
- -
- -
-
- - ) -} - -export { FAQ } \ No newline at end of file diff --git a/frontend/src/pages/Home/Home.js b/frontend/src/pages/Home/Home.js deleted file mode 100644 index 372fb81..0000000 --- a/frontend/src/pages/Home/Home.js +++ /dev/null @@ -1,42 +0,0 @@ -import { useNavigate } from "react-router-dom"; - -import { useUser } from "@hooks"; - -import { ActionTitle, Empty, OrgCard } from "@components" - -import "@style/pages/Home.css"; - -const Home = () => { - const navigate = useNavigate(); - - const { isAuthenticated, organizations } = useUser(); - - const titleActions = isAuthenticated && [{ - className: "home__action-button", - text: "Create Organization", - icon: ['fal', 'plus'], - onClick: () => navigate(`/dashboard/organization/new/`) - }]; - - return ( -
- - - {organizations && organizations.length === 0 && } - - {organizations && organizations.length > 0 &&
- {organizations?.map((org, index) => )} -
} -
- ) -} - -export { Home }; \ No newline at end of file diff --git a/frontend/src/pages/Landing/Landing.js b/frontend/src/pages/Landing/Landing.js deleted file mode 100644 index 8660be5..0000000 --- a/frontend/src/pages/Landing/Landing.js +++ /dev/null @@ -1,156 +0,0 @@ -import { Link } from "react-router-dom"; - -import { useStory } from "@hooks"; - -import { ArrowLink, Accordion, Metrics, StoryPreview, LandingHero, SEO } from "@components"; - -import "@style/pages/Landing.css"; - -const title = "The No-Code Badge Solution for Web3 Organizations | Badger"; -const description = "Badger is the no-code solution that unlocks the power of onchain badges for everyone. Deploy and manage flexible group policies for your team's decentralized tool stack."; - -const Landing = () => { - const { story: talentdao } = useStory("talentdao"); - const { story: mdao } = useStory("mdao"); - - return ( - <> - - -
- -
-

The no-code solution unlocking the power of onchain Badges.

-

Experience the power of onchain Badges and permissions in seconds with the help of an extremely simple interface.

- - - - -
-
- -
- -
- -
-

Badger is a protocol streamlining onchain access policies with Badges - no coding needed.

- -
-
-
-
-
-
-
-
-
-
- -
-

The Badger Dashboard lets you deploy an Organization, define rules, and mint badges just by clicking a few buttons; no smart contract experience required.

- - Get started - it's free - - -
-
- - - -
-

Optimized to secure the next decade of onchain protocols and builders.

- -
-

Step into the 21st century of the blockchain with access permissions and experience a world of secure, simple-to-manage and decentralized access management.

- - Issue Badges now - - -
- -
-
-
-
-
-
-
-
-
- - - -
-
-
-
-
-
-
- -
-
-

We're here to help you get started.

-

Unlock the power of onchain Badges and permissions with Badger and harness the power your network today.

-
- -
-

Learn

-

View tutorials and documentations to understand more about how Badger empowers you.

- - Use Badges with Guild to control Discord - Empower operating pods with Snapshot votes - Run an onchain contest for Badge holders on JokeDAO - Programatically mint and revoke Badges in a protocol -
- -
-

Explore

-

Connect with other Badger operators and developers to help you build your network.

- Documentation - Developers - Community - Customer stories -
- -
-

Hire an Expert

-

Don't have the time or team to build a solution? We can solve your problem and save you the headache.

-
-
-
-
- - ) -} - -export { Landing }; \ No newline at end of file diff --git a/frontend/src/pages/Legal/Privacy.js b/frontend/src/pages/Legal/Privacy.js deleted file mode 100644 index 0be2878..0000000 --- a/frontend/src/pages/Legal/Privacy.js +++ /dev/null @@ -1,9 +0,0 @@ -const Privacy = () => { - return ( -
-

Privacy

-
- ) -} - -export { Privacy } \ No newline at end of file diff --git a/frontend/src/pages/Legal/Terms.js b/frontend/src/pages/Legal/Terms.js deleted file mode 100644 index e346eb8..0000000 --- a/frontend/src/pages/Legal/Terms.js +++ /dev/null @@ -1,9 +0,0 @@ -const Terms = () => { - return ( -
-

Terms

-
- ) -} - -export { Terms } \ No newline at end of file diff --git a/frontend/src/pages/Legal/index.js b/frontend/src/pages/Legal/index.js deleted file mode 100644 index 90edc19..0000000 --- a/frontend/src/pages/Legal/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { Privacy } from './Privacy'; -export { Terms } from './Terms'; \ No newline at end of file diff --git a/frontend/src/pages/Media/Media.js b/frontend/src/pages/Media/Media.js deleted file mode 100644 index fbdc42d..0000000 --- a/frontend/src/pages/Media/Media.js +++ /dev/null @@ -1,77 +0,0 @@ -import { LandingHero } from "@components" - -import { logo } from "@static" - -import "@style/pages/Media.css" - -const Media = () => { - const colors = [ - "#00FF94", - "#00FFE0", - "#000000", - "#577088", - "#F6FFFE", - "#E1FEF9" - ] - - return ( -
- -
-

Media Kit

-

Here you can find all the assets you need to promote Badger.

-
-
- -
-
- - -

Badger is an open-source efficiency-first EVM-based badge primitive. It is a simple, flexible, and scalable way to issue and manage badges on Ethereum.

- -

With a couple clicks, you can deploy an organization, issue a badge to anyone on Ethereum, and secure the future of your onchain operations with ease. Badges can be used to represent anything, from a membership to a certification to a badge of honor.

- -

Our mission is simple: Lower the barrier of efficient onchain credential management and use for everyone.

-
- -
-
-

Fonts

- -
-

Gopher, 700 - rgba(0, 0, 0, 1.00)

-

Gopher, 400 - rgba(0, 0, 0 , 0.65)

-
-
- -
-

Colors

- -
- {colors.map((color, index) => ( -
navigator.clipboard.writeText(color)}> -
-

{color}

-
- ))} -
-
-
- -

Images

- -
- - - - - - - -
-
-
- ) -} - -export { Media } \ No newline at end of file diff --git a/frontend/src/pages/Org/Org.js b/frontend/src/pages/Org/Org.js deleted file mode 100644 index 492c60a..0000000 --- a/frontend/src/pages/Org/Org.js +++ /dev/null @@ -1,55 +0,0 @@ -import { useNavigate, useParams } from "react-router-dom"; - -import { useUser } from "@hooks"; - -import { ActionTitle, BadgeTable, Empty, Header, SEO } from "@components"; - -const Org = () => { - const navigate = useNavigate(); - - const { chainId, orgAddress } = useParams(); - - const { badges, isOwner, organization } = useUser({ chainId, orgAddress }); - - const URL_BASE = `/dashboard/organization/${chainId}/${orgAddress}`; - - const headerActions = isOwner && [{ - text: "Settings", - icon: ['fal', 'fa-gear'], - onClick: () => navigate(`${URL_BASE}/edit/`) - }]; - - const titleActions = isOwner && [{ - text: "Create Badge", - icon: ['fal', 'plus'], - onClick: () => navigate(`${URL_BASE}/badge/new/`) - }]; - - return ( - <> - {!organization && } - - {organization && <> - - -
navigate("/dashboard/")} actions={headerActions} /> - -
- - - {badges && badges.length === 0 && } - - {badges && badges.length > 0 && } -
- } - - ) -} - -export { Org }; \ No newline at end of file diff --git a/frontend/src/pages/Org/OrgForm.js b/frontend/src/pages/Org/OrgForm.js deleted file mode 100644 index e0302cc..0000000 --- a/frontend/src/pages/Org/OrgForm.js +++ /dev/null @@ -1,145 +0,0 @@ -import { useState, useRef } from "react"; -import { useNavigate, useParams } from "react-router-dom"; - -import { - useOrgForm, - usePFP, - useUser, - useIPFS, - useIPFSImageHash, - useIPFSMetadataHash, -} from "@hooks"; - -import { initialOrgForm, FormActionBar, FormDrawer, Header, Input, OrgDangerZone } from "@components" - -import { IPFS_GATEWAY_URL } from "@static"; - -import "@style/pages/OrgForm.css"; - -// TODO: OrgDangerZone is a landmine that I am not yet ready to mount. - -const getSymbol = (name) => { - return name.replace(/[^a-zA-Z0-9]/g, "").toUpperCase().substring(0, 5); -} - -const OrgForm = ({ isEdit = false }) => { - const imageInput = useRef(); - - const navigate = useNavigate(); - - const { chainId, orgAddress } = useParams(); - - const { organization, authenticatedAddress } = useUser({ chainId, orgAddress }); - - const [obj, setObj] = useState(organization || initialOrgForm); - const [image, setImage] = useState(null); - - const { characterPFP } = usePFP({ name: obj.name, address: authenticatedAddress }); - - const customImage = image || obj.image_hash; - - const activeImage = customImage || characterPFP; - - const imageURL = customImage && (image ? image.name : IPFS_GATEWAY_URL + obj.image_hash); - - const isDisabled = !(obj.name && obj.symbol && obj.description && activeImage); - - const { imageHash, ipfsImage } = useIPFSImageHash(activeImage) - - const { metadataHash, ipfsMetadata } = useIPFSMetadataHash({ - name: obj.name, - description: obj.description, - image: imageHash, - attributes: obj.attributes - }) - - const org = { - ...obj, - imageHash: imageHash, - contractHash: metadataHash - } - - const { openOrgFormTx, isPrepared, isLoading } = useOrgForm({ obj: org }) - - const { pinImage, pinMetadata } = useIPFS({ - image: ipfsImage, - data: ipfsMetadata - }) - - const actions = [{ - text: `${isEdit ? "Save" : "Create"} organization`, - icon: ["fal", "arrow-right"], - loading: isLoading, - disabled: isDisabled || !isPrepared, - event: () => openOrgFormTx({ - onLoading: () => { - pinImage(); - pinMetadata(); - }, - onSuccess: ({ chain, receipt }) => { - const event = receipt.events.find((event) => event.name === "OrganizationCreated"); - - if (!event) throw new Error("Error submitting transaction."); - - const orgAddress = event.args.organization; - - navigate(`/dashboard/organization/${chain.id}/${orgAddress}/`); - } - }) - }] - - const onNameChange = (e) => { - setObj({ ...obj, name: e.target.value, symbol: getSymbol(e.target.value) }) - } - - const onDescriptionChange = (e) => { - setObj({ ...obj, description: e.target.value }) - } - - const onImageUpload = () => { - imageInput.current.click(); - } - - const onImageChange = (e) => { - const files = e.target.files[0]; - - if (!files) return - - const reader = new FileReader(); - - reader.readAsDataURL(files); - reader.onload = () => { setImage(reader.result) }; - } - - return ( - <> -
navigate((isEdit ? `/dashboard/organization/${chainId}/${organization.ethereum_address}/` : '/dashboard/'))} /> - -

{`${isEdit ? "Update" : "Create"} Organization`}

- - - - - - - - - {`${customImage ? "Update" : "Upload"} image`} - } - value={imageURL || "Choose file..."} /> - - - - - - - {isEdit && <> -
- - } - - ) -} - -export { OrgForm }; \ No newline at end of file diff --git a/frontend/src/pages/Org/index.js b/frontend/src/pages/Org/index.js deleted file mode 100644 index f387f35..0000000 --- a/frontend/src/pages/Org/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export { Org } from './Org'; -export { OrgForm } from './OrgForm'; \ No newline at end of file diff --git a/frontend/src/pages/Page/Hero.js b/frontend/src/pages/Page/Hero.js deleted file mode 100644 index 1f9a989..0000000 --- a/frontend/src/pages/Page/Hero.js +++ /dev/null @@ -1,19 +0,0 @@ -import { Route, Routes } from "react-router-dom"; - -import "@style/Hero/LandingHero.css" - -const LandingHero = ({ children }) => { - return ( -
-
-
-
-
-
- - {children} -
- ) -} - -export { LandingHero } \ No newline at end of file diff --git a/frontend/src/pages/Page/Page.js b/frontend/src/pages/Page/Page.js deleted file mode 100644 index 8048a97..0000000 --- a/frontend/src/pages/Page/Page.js +++ /dev/null @@ -1,31 +0,0 @@ -import { Route, Routes } from "react-router-dom"; - -import { Navbar, Footer } from "@components"; - -import { Landing, FAQ, Media, Privacy, Stories, Story, Terms } from "@pages"; - -import "@style/pages/Page.css" - -const Page = () => { - return ( - <> - - - - } /> - } /> - } /> - - } /> - } /> - } /> - - } /> - - -