From 0f27dc05f4ee32c59cc4755c273bc568ff7762f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Eng=C3=A9libert?= Date: Thu, 12 Jun 2025 20:10:41 +0200 Subject: [PATCH] Initial commit --- .gitignore | 1 + LICENSE | 661 ++++ README.md | 65 + g1bridge/.gitignore | 1 + g1bridge/Cargo.lock | 5620 +++++++++++++++++++++++++++++++++++ g1bridge/Cargo.toml | 25 + g1bridge/res/metadata.scale | Bin 0 -> 149943 bytes g1bridge/rustfmt.toml | 9 + g1bridge/src/blockchain.rs | 100 + g1bridge/src/main.rs | 147 + init.lua | 49 + mod.conf | 3 + 12 files changed, 6681 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 g1bridge/.gitignore create mode 100644 g1bridge/Cargo.lock create mode 100644 g1bridge/Cargo.toml create mode 100644 g1bridge/res/metadata.scale create mode 100644 g1bridge/rustfmt.toml create mode 100644 g1bridge/src/blockchain.rs create mode 100644 g1bridge/src/main.rs create mode 100644 init.lua create mode 100644 mod.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..deaa1b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +sk diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 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 Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + 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 AGPL, see +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..eae584a --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# Ğ1 <-> Luanti bridge + +Luanti mod to exchange in-game [currency](https://github.com/mt-mods/currency) with [libre currency](https://duniter.org) (Ğ1 blockchain). + +Luanti server has a dedicated account. +Player transfer money on it and the server gives them a corresponding amount of in-game banknotes. +They can then do whatever they want with the banknotes (trade, decorate walls, burn...). +Players can ask the server to transfer their banknotes to an account of their choice using a chat command. + +It works with Ğ1v2 which is still in development/testing phase. + +## Install + +Put this repo in the `mods` directory. + +Have a local Duniter node. + +```bash + cargo build --release + ./target/release/g1bridge -l -d /path/to/database -s ../sk +``` + +* `sk` contains the server's secret key + * Without `-l`, use Substrate formats. + * With `-l`, use legacy Ğ1 format on 2 lines (one password per line). +* `database` is the directory where the bridge will save its database. It is used to store debts in case of failure of a transfer. + +## ToDo + +* Blockchain-to-game transfers +* Ensure all transfers are failproof (any communication, storage medium, server or whatever should be able to fail or rollback to a previous state, without causing double spend or money loss) +* Force reception account to exist +* Nice ATM-like interface + +## Workflow + +### game -> blockchain + +1. Player issues command `/g1_send
` +2. Mod takes currency from inventory and saves the debt in storage. +3. Mod sends `/send/
/` to bridge. +4. + * If bridge responds immediately, clean the debt. + * Else, retry later. + +### blockchain -> game + +1. bridge listens to events +2. on reception event, bridge stores debt +3. Player issues command `/g1_claim` +4. Mod sends `/claim/` to bridge +5. Bridge answers an amount and clears debt +6. Mod stores debt +7. Mod tries to give player MG +8. What does not fit is kept in debt. What does fit is removed from debt. + +## License + +[Support me via LiberaPay](https://liberapay.com/tuxmain/donate) + +GNU AGPL v3, CopyLeft 2025 Pascal Engélibert [(why copyleft?)](https://txmn.tk/blog/why-copyleft/) + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License. +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 Affero General Public License for more details. +You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/. diff --git a/g1bridge/.gitignore b/g1bridge/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/g1bridge/.gitignore @@ -0,0 +1 @@ +/target diff --git a/g1bridge/Cargo.lock b/g1bridge/Cargo.lock new file mode 100644 index 0000000..0878086 --- /dev/null +++ b/g1bridge/Cargo.lock @@ -0,0 +1,5620 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anyhow" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" + +[[package]] +name = "argp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7409aa6f1dd8464eac2e56cf538e1e5f7f79678caa32f198d214a3db8d5075c1" +dependencies = [ + "argp_derive", +] + +[[package]] +name = "argp_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9b949411282939e3f7d8923127e3f18aa474b46da4e8bb0ddf2cb8c81f963a" +dependencies = [ + "proc-macro2", + "pulldown-cmark", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +dependencies = [ + "ark-bls12-377", + "ark-ec 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bls12-381-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +dependencies = [ + "ark-bls12-381", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bw6-761-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +dependencies = [ + "ark-bw6-761", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash 0.8.11", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.2", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +dependencies = [ + "ark-ec 0.4.2", + "ark-ed-on-bls12-377", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +dependencies = [ + "ark-ec 0.4.2", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.4.2", + "ark-models-ext", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec 0.7.6", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.96", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "ark-models-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash 0.8.11", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.2", +] + +[[package]] +name = "ark-scale" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-secret-scalar" +version = "0.0.2" +source = "git+https://github.com/duniter/ring-vrf#93af77b15de3bb34f1c46913599f4f4c4faa3215" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "ark-transcript", + "digest 0.10.7", + "getrandom_or_panic", + "zeroize", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive 0.5.0", + "ark-std 0.5.0", + "arrayvec 0.7.6", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", + "rayon", +] + +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "ark-transcript" +version = "0.0.2" +source = "git+https://github.com/duniter/ring-vrf#93af77b15de3bb34f1c46913599f4f4c4faa3215" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] + +[[package]] +name = "array-bytes" +version = "6.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.4.0", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-net" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +dependencies = [ + "async-io", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.4.0", + "futures-lite", + "rustix", + "tracing", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "atomic-take" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "bandersnatch_vrfs" +version = "0.0.4" +source = "git+https://github.com/duniter/ring-vrf#93af77b15de3bb34f1c46913599f4f4c4faa3215" +dependencies = [ + "ark-bls12-381", + "ark-ec 0.4.2", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "dleq_vrf", + "rand_chacha", + "rand_core 0.6.4", + "ring 0.1.0", + "sha2 0.10.8", + "sp-ark-bls12-381", + "sp-ark-ed-on-bls12-381-bandersnatch", + "zeroize", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base58" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bip39" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" +dependencies = [ + "bitcoin_hashes", +] + +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + +[[package]] +name = "bitcoin_hashes" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec 0.7.6", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bounded-collections" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d077619e9c237a5d1875166f5e8033e8f6bff0c96f8caf81e1c2d7738c431bf" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" + +[[package]] +name = "cc" +version = "1.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8293772165d9345bdaaa39b45b2109591e63fe5e6fbc23c6ff930a048aa310b" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chunked_transfer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "common" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof?rev=665f5f5#665f5f51af5734c7b6d90b985dd6861d4c5b4752" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "fflonk", + "getrandom_or_panic", + "merlin", + "rand_chacha", +] + +[[package]] +name = "common-path" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.96", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.96", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "dleq_vrf" +version = "0.0.2" +source = "git+https://github.com/duniter/ring-vrf#93af77b15de3bb34f1c46913599f4f4c4faa3215" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-scale", + "ark-secret-scalar", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "ark-transcript", + "arrayvec 0.7.6", + "zeroize", +] + +[[package]] +name = "docify" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a772b62b1837c8f060432ddcc10b17aae1453ef17617a99bc07789252d2a5896" +dependencies = [ + "docify_macros", +] + +[[package]] +name = "docify_macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e6be249b0a462a14784a99b19bf35a667bb5e09de611738bb7362fa4c95ff7" +dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn 2.0.96", + "termcolor", + "toml", + "walkdir", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek 4.1.3", + "ed25519", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +dependencies = [ + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek 4.1.3", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.8", + "zeroize", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +dependencies = [ + "event-listener 5.4.0", + "pin-project-lite", +] + +[[package]] +name = "expander" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2c470c71d91ecbd179935b24170459e926382eaaa86b590b78814e180d8a8e2" +dependencies = [ + "blake2", + "file-guard", + "fs-err", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fflonk" +version = "0.1.1" +source = "git+https://github.com/w3f/fflonk#eda051ea3b80042e844a3ebd17c2f60536e6ee3f" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "merlin", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "file-guard" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "frame-metadata" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "frame-metadata" +version = "16.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +dependencies = [ + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "g1bridge" +version = "0.1.0" +dependencies = [ + "argp", + "log", + "parity-scale-codec", + "scrypt", + "serde", + "simplelog", + "sp-core", + "sp-runtime", + "subxt", + "tiny_http", + "tokio", + "typed-sled", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom_or_panic" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +dependencies = [ + "rand", + "rand_core 0.6.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash-db" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", + "serde", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "indexmap-nostd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jsonrpsee" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" +dependencies = [ + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-types", +] + +[[package]] +name = "jsonrpsee-client-transport" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" +dependencies = [ + "futures-util", + "http", + "jsonrpsee-core", + "pin-project", + "rustls-native-certs 0.7.3", + "rustls-pki-types", + "soketto", + "thiserror", + "tokio", + "tokio-rustls 0.25.0", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-core" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" +dependencies = [ + "anyhow", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "hyper", + "jsonrpsee-types", + "pin-project", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "jsonrpsee-http-client" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" +dependencies = [ + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", +] + +[[package]] +name = "jsonrpsee-types" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" +dependencies = [ + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +dependencies = [ + "hashbrown 0.15.2", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memory-db" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" +dependencies = [ + "hash-db", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec 0.7.6", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" +dependencies = [ + "bitcoin_hashes", + "rand", + "rand_core 0.6.4", + "serde", + "unicode-normalization", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec 0.7.6", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.8", + "smallvec", + "windows-targets", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", + "password-hash", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" + +[[package]] +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +dependencies = [ + "polkavm-derive-impl-macro", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +dependencies = [ + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +dependencies = [ + "polkavm-derive-impl", + "syn 2.0.96", +] + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +dependencies = [ + "proc-macro2", + "syn 2.0.96", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.8.0", + "getopts", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ring" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof?rev=665f5f5#665f5f51af5734c7b6d90b985dd6861d4c5b4752" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "arrayvec 0.7.6", + "blake2", + "common", + "fflonk", + "merlin", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" +dependencies = [ + "bitflags 2.8.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "ruzstd" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +dependencies = [ + "byteorder", + "derive_more 0.99.18", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-bits" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662d10dcd57b1c2a3c41c9cf68f71fb09747ada1ea932ad961aca7e2ca28315f" +dependencies = [ + "parity-scale-codec", + "scale-info", + "scale-type-resolver", + "serde", +] + +[[package]] +name = "scale-decode" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc79ba56a1c742f5aeeed1f1801f3edf51f7e818f0a54582cac6f131364ea7b" +dependencies = [ + "derive_more 0.99.18", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode-derive", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-decode-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5398fdb3c7bea3cb419bac4983aadacae93fe1a7b5f693f4ebd98c3821aad7a5" +dependencies = [ + "darling 0.14.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-encode" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628800925a33794fb5387781b883b5e14d130fece9af5a63613867b8de07c5c7" +dependencies = [ + "derive_more 0.99.18", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-encode-derive", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-encode-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a304e1af7cdfbe7a24e08b012721456cc8cecdedadc14b3d10513eada63233c" +dependencies = [ + "darling 0.14.4", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "scale-type-resolver" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10b800069bfd43374e0f96f653e0d46882a2cb16d6d961ac43bea80f26c76843" +dependencies = [ + "scale-info", + "smallvec", +] + +[[package]] +name = "scale-typegen" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d470fa75e71b12b3244a4113adc4bc49891f3daba2054703cacd06256066397e" +dependencies = [ + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.96", + "thiserror", +] + +[[package]] +name = "scale-value" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07ccfee963104335c971aaf8b7b0e749be8569116322df23f1f75c4ca9e4a28" +dependencies = [ + "base58", + "blake2", + "derive_more 0.99.18", + "either", + "frame-metadata 15.1.0", + "parity-scale-codec", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-type-resolver", + "serde", + "yap", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schnellru" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "356285bbf17bea63d9e52e96bd18f039672ac92b55b8cb997d6162a2a37d1649" +dependencies = [ + "ahash 0.8.11", + "cfg-if", + "hashbrown 0.13.2", +] + +[[package]] +name = "schnorrkel" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" +dependencies = [ + "aead", + "arrayref", + "arrayvec 0.7.6", + "curve25519-dalek 4.1.3", + "getrandom_or_panic", + "merlin", + "rand_core 0.6.4", + "serde_bytes", + "sha2 0.10.8", + "subtle", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" +dependencies = [ + "pbkdf2", + "salsa20", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.8.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "serde_json" +version = "1.0.135" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simple-mermaid" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" + +[[package]] +name = "simplelog" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0" +dependencies = [ + "log", + "termcolor", + "time", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "sled" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" +dependencies = [ + "crc32fast", + "crossbeam-epoch", + "crossbeam-utils", + "fs2", + "fxhash", + "libc", + "log", + "parking_lot 0.11.2", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smol" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" +dependencies = [ + "async-channel", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-net", + "async-process", + "blocking", + "futures-lite", +] + +[[package]] +name = "smoldot" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" +dependencies = [ + "arrayvec 0.7.6", + "async-lock", + "atomic-take", + "base64 0.21.7", + "bip39", + "blake2-rfc", + "bs58", + "chacha20", + "crossbeam-queue", + "derive_more 0.99.18", + "ed25519-zebra 4.0.3", + "either", + "event-listener 4.0.3", + "fnv", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "hmac 0.12.1", + "itertools 0.12.1", + "libm", + "libsecp256k1", + "merlin", + "no-std-net", + "nom", + "num-bigint", + "num-rational", + "num-traits", + "pbkdf2", + "pin-project", + "poly1305", + "rand", + "rand_chacha", + "ruzstd", + "schnorrkel", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "siphasher", + "slab", + "smallvec", + "soketto", + "twox-hash", + "wasmi", + "x25519-dalek", + "zeroize", +] + +[[package]] +name = "smoldot-light" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" +dependencies = [ + "async-channel", + "async-lock", + "base64 0.21.7", + "blake2-rfc", + "derive_more 0.99.18", + "either", + "event-listener 4.0.3", + "fnv", + "futures-channel", + "futures-lite", + "futures-util", + "hashbrown 0.14.5", + "hex", + "itertools 0.12.1", + "log", + "lru", + "no-std-net", + "parking_lot 0.12.3", + "pin-project", + "rand", + "rand_chacha", + "serde", + "serde_json", + "siphasher", + "slab", + "smol", + "smoldot", + "zeroize", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures", + "httparse", + "log", + "rand", + "sha-1", +] + +[[package]] +name = "sp-application-crypto" +version = "30.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", +] + +[[package]] +name = "sp-arithmetic" +version = "23.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "docify", + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", + "static_assertions", +] + +[[package]] +name = "sp-ark-bls12-381" +version = "0.4.2" +source = "git+https://github.com/duniter/arkworks-substrate#1dbec3114648697c992d3d022ade24c7a221c4c8" +dependencies = [ + "ark-bls12-381-ext", + "sp-crypto-ec-utils", +] + +[[package]] +name = "sp-ark-ed-on-bls12-381-bandersnatch" +version = "0.4.2" +source = "git+https://github.com/duniter/arkworks-substrate#1dbec3114648697c992d3d022ade24c7a221c4c8" +dependencies = [ + "ark-ed-on-bls12-381-bandersnatch-ext", + "sp-crypto-ec-utils", +] + +[[package]] +name = "sp-core" +version = "28.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "array-bytes", + "bandersnatch_vrfs", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra 3.1.0", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "itertools 0.10.5", + "k256", + "libsecp256k1", + "log", + "merlin", + "parity-bip39", + "parity-scale-codec", + "parking_lot 0.12.3", + "paste", + "primitive-types", + "rand", + "scale-info", + "schnorrkel", + "secp256k1", + "secrecy", + "serde", + "sp-crypto-hashing", + "sp-debug-derive 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", + "sp-externalities 0.25.0", + "sp-runtime-interface 24.0.0", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", + "sp-storage 19.0.0", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-crypto-ec-utils" +version = "0.14.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "ark-bls12-377", + "ark-bls12-377-ext", + "ark-bls12-381", + "ark-bls12-381-ext", + "ark-bw6-761", + "ark-bw6-761-ext", + "ark-ec 0.4.2", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-377-ext", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ed-on-bls12-381-bandersnatch-ext", + "ark-scale", + "sp-runtime-interface 28.0.0", +] + +[[package]] +name = "sp-crypto-hashing" +version = "0.1.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.8", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "sp-externalities" +version = "0.25.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-storage 19.0.0", +] + +[[package]] +name = "sp-externalities" +version = "0.29.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-storage 21.0.0", +] + +[[package]] +name = "sp-io" +version = "30.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "bytes", + "ed25519-dalek", + "libsecp256k1", + "log", + "parity-scale-codec", + "polkavm-derive", + "rustversion", + "secp256k1", + "sp-core", + "sp-crypto-hashing", + "sp-externalities 0.25.0", + "sp-keystore", + "sp-runtime-interface 24.0.0", + "sp-state-machine", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", + "sp-tracing 16.0.0", + "sp-trie", + "tracing", + "tracing-core", +] + +[[package]] +name = "sp-keystore" +version = "0.34.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "parity-scale-codec", + "parking_lot 0.12.3", + "sp-core", + "sp-externalities 0.25.0", +] + +[[package]] +name = "sp-panic-handler" +version = "13.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "backtrace", + "lazy_static", + "regex", +] + +[[package]] +name = "sp-runtime" +version = "31.0.1" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "docify", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "paste", + "rand", + "scale-info", + "serde", + "simple-mermaid", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", + "sp-weights", +] + +[[package]] +name = "sp-runtime-interface" +version = "24.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities 0.25.0", + "sp-runtime-interface-proc-macro 17.0.0", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", + "sp-storage 19.0.0", + "sp-tracing 16.0.0", + "sp-wasm-interface 20.0.0", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface" +version = "28.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities 0.29.0", + "sp-runtime-interface-proc-macro 18.0.0", + "sp-std 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk)", + "sp-storage 21.0.0", + "sp-tracing 17.0.1", + "sp-wasm-interface 21.0.1", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "17.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "18.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "Inflector", + "expander", + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "sp-state-machine" +version = "0.35.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "hash-db", + "log", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand", + "smallvec", + "sp-core", + "sp-externalities 0.25.0", + "sp-panic-handler", + "sp-trie", + "thiserror", + "tracing", + "trie-db", +] + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" + +[[package]] +name = "sp-storage" +version = "19.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", +] + +[[package]] +name = "sp-storage" +version = "21.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk)", +] + +[[package]] +name = "sp-tracing" +version = "16.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "parity-scale-codec", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-tracing" +version = "17.0.1" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "parity-scale-codec", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-trie" +version = "29.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "ahash 0.8.11", + "hash-db", + "lazy_static", + "memory-db", + "nohash-hasher", + "parity-scale-codec", + "parking_lot 0.12.3", + "rand", + "scale-info", + "schnellru", + "sp-core", + "sp-externalities 0.25.0", + "thiserror", + "tracing", + "trie-db", + "trie-root", +] + +[[package]] +name = "sp-wasm-interface" +version = "20.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "impl-trait-for-tuples", + "log", + "parity-scale-codec", +] + +[[package]] +name = "sp-wasm-interface" +version = "21.0.1" +source = "git+https://github.com/duniter/duniter-polkadot-sdk#90e77c4c212232c85b81fbd9e83064a3e7586db7" +dependencies = [ + "anyhow", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", +] + +[[package]] +name = "sp-weights" +version = "27.0.0" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "bounded-collections", + "parity-scale-codec", + "scale-info", + "serde", + "smallvec", + "sp-arithmetic", + "sp-debug-derive 14.0.0 (git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0)", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ss58-registry" +version = "1.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19409f13998e55816d1c728395af0b52ec066206341d939e22e7766df9b494b8" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "substrate-bip39" +version = "0.4.7" +source = "git+https://github.com/duniter/duniter-polkadot-sdk.git?branch=duniter-substrate-v1.11.0#030a7b8fd5ef03e4da466e65ce8fe92e3cff90e4" +dependencies = [ + "hmac 0.12.1", + "pbkdf2", + "schnorrkel", + "sha2 0.10.8", + "zeroize", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subxt" +version = "0.35.3" +source = "git+https://github.com/duniter/subxt?branch=subxt-v0.35.3-duniter-substrate-v1.11.0#04282d7f1638f8e86200958ee36cb3920852ed4f" +dependencies = [ + "async-trait", + "base58", + "blake2", + "derivative", + "either", + "frame-metadata 16.0.0", + "futures", + "hex", + "impl-serde", + "instant", + "jsonrpsee", + "parity-scale-codec", + "primitive-types", + "scale-bits", + "scale-decode", + "scale-encode", + "scale-info", + "scale-value", + "serde", + "serde_json", + "sp-core", + "sp-crypto-hashing", + "sp-runtime", + "subxt-lightclient", + "subxt-macro", + "subxt-metadata", + "thiserror", + "tokio-util", + "tracing", + "url", +] + +[[package]] +name = "subxt-codegen" +version = "0.35.3" +source = "git+https://github.com/duniter/subxt?branch=subxt-v0.35.3-duniter-substrate-v1.11.0#04282d7f1638f8e86200958ee36cb3920852ed4f" +dependencies = [ + "frame-metadata 16.0.0", + "heck", + "hex", + "jsonrpsee", + "parity-scale-codec", + "proc-macro2", + "quote", + "scale-info", + "scale-typegen", + "subxt-metadata", + "syn 2.0.96", + "thiserror", + "tokio", +] + +[[package]] +name = "subxt-lightclient" +version = "0.35.3" +source = "git+https://github.com/duniter/subxt?branch=subxt-v0.35.3-duniter-substrate-v1.11.0#04282d7f1638f8e86200958ee36cb3920852ed4f" +dependencies = [ + "futures", + "futures-util", + "serde", + "serde_json", + "smoldot-light", + "thiserror", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "subxt-macro" +version = "0.35.3" +source = "git+https://github.com/duniter/subxt?branch=subxt-v0.35.3-duniter-substrate-v1.11.0#04282d7f1638f8e86200958ee36cb3920852ed4f" +dependencies = [ + "darling 0.20.10", + "parity-scale-codec", + "proc-macro-error", + "quote", + "scale-typegen", + "subxt-codegen", + "syn 2.0.96", +] + +[[package]] +name = "subxt-metadata" +version = "0.35.3" +source = "git+https://github.com/duniter/subxt?branch=subxt-v0.35.3-duniter-substrate-v1.11.0#04282d7f1638f8e86200958ee36cb3920852ed4f" +dependencies = [ + "derive_more 0.99.18", + "frame-metadata 16.0.0", + "hashbrown 0.14.5", + "parity-scale-codec", + "scale-info", + "sp-crypto-hashing", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny_http" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" +dependencies = [ + "ascii", + "chunked_transfer", + "httpdate", + "log", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.22", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.24", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "time", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "trie-db" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" +dependencies = [ + "hash-db", + "log", + "rustc-hex", + "smallvec", +] + +[[package]] +name = "trie-root" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0b" +dependencies = [ + "hash-db", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.7", + "rand", + "static_assertions", +] + +[[package]] +name = "typed-sled" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1060f05a4450ec5b758da60951b04f225a93a62079316630e76cf25c4034500d" +dependencies = [ + "bincode", + "pin-project", + "serde", + "sled", + "thiserror", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "w3f-bls" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a3028804c8bbae2a97a15b71ffc0e308c4b01a520994aafa77d56e94e19024" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-serialize-derive 0.4.2", + "arrayref", + "constcat", + "digest 0.10.7", + "rand", + "rand_chacha", + "rand_core 0.6.4", + "sha2 0.10.8", + "sha3", + "thiserror", + "zeroize", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasmi" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +dependencies = [ + "smallvec", + "spin", + "wasmi_arena", + "wasmi_core", + "wasmparser-nostd", +] + +[[package]] +name = "wasmi_arena" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" + +[[package]] +name = "wasmi_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +dependencies = [ + "downcast-rs", + "libm", + "num-traits", + "paste", +] + +[[package]] +name = "wasmparser-nostd" +version = "0.100.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" +dependencies = [ + "indexmap-nostd", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +dependencies = [ + "memchr", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek 4.1.3", + "rand_core 0.6.4", + "serde", + "zeroize", +] + +[[package]] +name = "yap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4524214bc4629eba08d78ceb1d6507070cc0bcbbed23af74e19e6e924a24cf" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] diff --git a/g1bridge/Cargo.toml b/g1bridge/Cargo.toml new file mode 100644 index 0000000..9a18e23 --- /dev/null +++ b/g1bridge/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "g1bridge" +version = "0.1.0" +edition = "2024" + +[dependencies] +argp = "0.4.0" +codec = { package = "parity-scale-codec", version = "3.6.12" } +log = "0.4.27" +scrypt = { version = "0.11.0", default-features = false } +serde = { version = "1.0.219", features = ["derive"] } +simplelog = "0.12.2" +sp-core = { git = "https://github.com/duniter/duniter-polkadot-sdk.git", branch = "duniter-substrate-v1.11.0" } +sp-runtime = { git = "https://github.com/duniter/duniter-polkadot-sdk.git", branch = "duniter-substrate-v1.11.0" } +subxt = { git = 'https://github.com/duniter/subxt', branch = 'subxt-v0.35.3-duniter-substrate-v1.11.0', default-features = false, features = [ + "substrate-compat", + "native", + "jsonrpsee", +] } +tiny_http = "0.12.0" +tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] } +typed-sled = "0.2.3" + +[profile.release] +lto = "fat" diff --git a/g1bridge/res/metadata.scale b/g1bridge/res/metadata.scale new file mode 100644 index 0000000000000000000000000000000000000000..aa2d5ecb9c31af40b6dae44102204e3278748bb9 GIT binary patch literal 149943 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 OA`JK0{N(%kv;P2*KT5>_ literal 0 HcmV?d00001 diff --git a/g1bridge/rustfmt.toml b/g1bridge/rustfmt.toml new file mode 100644 index 0000000..26b2841 --- /dev/null +++ b/g1bridge/rustfmt.toml @@ -0,0 +1,9 @@ +hard_tabs = true +newline_style = "Unix" +imports_granularity = "Crate" + +unstable_features = true +format_code_in_doc_comments = true +format_macro_bodies = true +format_macro_matchers = true +format_strings = true diff --git a/g1bridge/src/blockchain.rs b/g1bridge/src/blockchain.rs new file mode 100644 index 0000000..2248f9c --- /dev/null +++ b/g1bridge/src/blockchain.rs @@ -0,0 +1,100 @@ +use crate::{DebtG2B, Opt}; + +use log::error; +use runtime::balances::calls::types::TransferKeepAlive; +use subxt::{ + OnlineClient, + backend::{Backend, BackendExt}, + ext::sp_core::{ + Pair as _, + ed25519::{Pair, Public}, + }, + tx::{PairSigner, Signer}, +}; +use tokio::sync::mpsc::Receiver; +use typed_sled::Tree; + +#[subxt::subxt( + runtime_metadata_path = "res/metadata.scale", + derive_for_all_types = "Debug" +)] +pub mod runtime {} + +pub type Client = subxt::OnlineClient; +pub type AccountId = subxt::utils::AccountId32; +pub type IdtyId = u32; +pub type BlockNumber = u32; +pub type TxProgress = subxt::tx::TxProgress; +pub type Balance = u64; +pub type AccountData = + runtime::runtime_types::pallet_duniter_account::types::AccountData; +pub type AccountInfo = runtime::runtime_types::frame_system::AccountInfo; +pub type Hash = sp_core::H256; + +// declare runtime types +pub enum Runtime {} +impl subxt::config::Config for Runtime { + type AssetId = (); + type Hash = Hash; + type AccountId = AccountId; + type Address = sp_runtime::MultiAddress; + type Signature = sp_runtime::MultiSignature; + type Hasher = subxt::config::substrate::BlakeTwo256; + type Header = subxt::config::substrate::SubstrateHeader; + type ExtrinsicParams = subxt::config::DefaultExtrinsicParams; +} + +#[derive(Copy, Clone, Debug, Default, codec::Encode)] +pub struct Tip { + #[codec(compact)] + tip: u64, +} +impl Tip { + pub fn new(amount: u64) -> Self { + Tip { tip: amount } + } +} +impl From for Tip { + fn from(n: u64) -> Self { + Self::new(n) + } +} + +pub enum Msg { + NewDebt, + Timer, +} + +pub async fn run( + url: String, + pair: Pair, + mut recv: Receiver, + tree_debt_g2b: Tree, +) { + let mut client = OnlineClient::::from_url(&url).await.ok(); + while let Some(msg) = recv.recv().await { + if client.is_none() { + client = OnlineClient::::from_url(&url).await.ok(); + } + if let Some(client) = &client { + match client + .tx() + .sign_and_submit_then_watch_default( + &runtime::tx().balances().transfer_keep_alive( + subxt::utils::MultiAddress::Id(msg.address.clone()), + msg.amount, + ), + &subxt::tx::PairSigner::new(pair), + ) + .await + { + Ok(_) => { + tree_debt_g2b.remove(&msg).ok(); + } + Err(e) => { + error!("Submitting transaction: {e:?}"); + } + } + } + } +} diff --git a/g1bridge/src/main.rs b/g1bridge/src/main.rs new file mode 100644 index 0000000..c395b88 --- /dev/null +++ b/g1bridge/src/main.rs @@ -0,0 +1,147 @@ +#![feature(try_blocks)] + +mod blockchain; + +use argp::FromArgs; +use serde::{Deserialize, Serialize, de}; +use sp_core::Pair as _; +use std::{ + io::{BufRead, Read}, + str::FromStr, + sync::Arc, +}; +use subxt::{ + ext::sp_core::ed25519::{Pair, Public}, + utils::{AccountId32, MultiAddress}, +}; +use tiny_http::{Response, ResponseBox, Server, ServerConfig}; +use tokio::sync::mpsc::{Sender, channel}; +use typed_sled::Tree; + +/// Game to Blockchain +const TREE_DEBT_G2B: &'static str = "debt_g2b"; + +/// Blob +#[derive(FromArgs)] +struct Opt { + /// path to the database + #[argp(option, short = 'd')] + db: String, + + /// secret key is legacy (two passwords on the two first lines) + #[argp(switch, short = 'l')] + legacy: bool, + + /// path to the file containing the secret key in Substrate format + #[argp(option, short = 's')] + secret_key: String, + + /// duniter node URL (default: ws://127.0.0.1:9944) + #[argp(option, short = 'u', default = "String::from(\"ws://127.0.0.1:9944\")")] + url: String, +} + +#[derive(Deserialize, Serialize)] +struct DebtG2B { + address: AccountId32, + amount: u64, +} + +#[tokio::main] +async fn main() { + let opt: Opt = argp::parse_args_or_exit(argp::DEFAULT); + + let mut sk_file = std::fs::File::open(opt.secret_key).expect("Cannot open secret key file"); + let pair: Pair = if opt.legacy { + let sk_reader = std::io::BufReader::new(sk_file); + let mut sk_lines = sk_reader.lines(); + let psw1 = sk_lines + .next() + .expect("Secret key file should contain at least 2 lines for the 2 passwords") + .unwrap(); + let psw2 = sk_lines + .next() + .expect("Secret key file should contain at least 2 lines for the 2 passwords") + .unwrap(); + let params = scrypt::Params::new(12, 16, 1, 32).unwrap(); + let mut seed = [0u8; 32]; + scrypt::scrypt( + psw2.trim().as_bytes(), + psw1.trim().as_bytes(), + ¶ms, + &mut seed, + ) + .unwrap(); + Pair::from_seed(&seed) + } else { + let mut sk_content = String::new(); + sk_file + .read_to_string(&mut sk_content) + .expect("Cannot read secret key file"); + Pair::from_string(sk_content.trim(), None).expect("Cannot decode secret key") + }; + + simplelog::SimpleLogger::init(log::LevelFilter::Debug, simplelog::Config::default()).unwrap(); + + let db = typed_sled::open(opt.db).expect("Cannot open database"); + let tree_debt_g2b = Tree::::open(&db, TREE_DEBT_G2B); + + let (bc_send, bc_recv) = channel(128); + + tokio::spawn(blockchain::run( + opt.url, + pair, + bc_recv, + tree_debt_g2b.clone(), + )); + + let server = Server::http("127.0.0.1:30061").expect("Cannot start server"); + + struct Locals { + tree_debt_g2b: Tree, + bc_send: Sender, + } + + tokio::task_local! { + static LOCALS: Arc; + }; + + LOCALS.scope( + Arc::new(Locals { + tree_debt_g2b, + bc_send, + }), + async move { + for request in server.incoming_requests() { + let locals = LOCALS.get(); + tokio::spawn(async move { + let url = request.url(); + + let mut url_items = url.split('/').filter(|item| !item.is_empty()); + + let resp: Option = try { + match url_items.next() { + Some("send") => { + let address = AccountId32::from_str(url_items.next()?).ok()?; + let amount = url_items.next()?.parse::().ok()?; + println!("{address} {amount}"); + + let debt = DebtG2B { address, amount }; + locals.tree_debt_g2b.insert(&debt, &()).ok()?; + locals.bc_send.send(debt).await.ok()?; + + Response::empty(200).boxed() + } + _ => None?, + } + }; + if let Some(resp) = resp { + request.respond(resp).ok(); + } else { + request.respond(Response::empty(400)).ok(); + } + }); + } + }, + ).await; +} diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..01e7a59 --- /dev/null +++ b/init.lua @@ -0,0 +1,49 @@ +local http = minetest.request_http_api() +if http == nil then + error("Please add g1_bridge to secure.http_mods") +end + +minetest.register_chatcommand("g1", { + func = function(name, param) + local args = {} + for arg in string.gmatch(param,"%S+") do + if #args >= 3 then + break + end + table.insert(args, arg) + end + if #args >= 1 then + core.chat_send_player(name, "args >= 1") + if args[1] == "send" and #args == 3 and string.find(args[2],"^[%da-zA-Z]+$") and string.find(args[3],"^%d+$") then + local address = args[2] + local amount = tonumber(args[3]) + -- This version Lua does not have any way to check if a number is represented as an integer or a float, + -- because it explicitely doesn't care. + -- Hence, this program won't care if the player writes an invalid number, + -- as there is no need to ensure arithmetic rules are respected. (as Lua's manual pretends) + -- As the pattern excludes "." and nobody should have billions of items, + -- it should still be safe. I hope. + if type(amount) ~= "number" then + return + end + local inv = core.get_inventory({type="player", name=name}) + local wanted_stack = "currency:minegeld "..amount + local balanced = inv:contains_item("main", ItemStack(wanted_stack)) + if balanced then + inv:remove_item("main", wanted_stack) + http.fetch({url="http://127.0.0.1:30061/send/"..address.."/"..amount, method="GET"}, + function(res) + if res.code == 200 then + core.chat_send_player(name, "Transfer sent") + else + core.chat_send_player(name, "Error during transfer") + end + end + ) + else + core.chat_send_player(name, "Not enough currency") + end + end + end + end +}) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..3dae52f --- /dev/null +++ b/mod.conf @@ -0,0 +1,3 @@ +name = g1_bridge +description = Bridge to exchange in-game MineGeld with libre currency G1 +depends = currency